Расшифруйте трафик SSL с помощью инструмента командной строки openssl

544
David B

Я пытаюсь сделать ручное извлечение / шифрование / дешифрование данных с помощью opensslинструмента командной строки.

Я просматривал RFC5246, чтобы понять, что мне нужно делать. Мне не совсем ясно, смогу ли я сделать этот шаг с помощью этого инструмента. Я предполагаю, что закрытый ключ в объяснении является личным ключом, сгенерированным, когда я создал свой самозаверяющий сертификат.

Когда RSA используется для аутентификации сервера и обмена ключами, 48-байтовый pre_master_secret генерируется клиентом, шифруется под открытым ключом сервера и отправляется на сервер. Сервер использует свой закрытый ключ для расшифровки pre_master_secret. Затем обе стороны преобразуют pre_master_secret в master_secret, как указано выше.

Может кто-нибудь сказать мне, если мои предположения верны. Может ли opensslинструмент командной строки использоваться и поставляться с закрытым ключом моего сервера и зашифрованным pre_master_secret от клиента для генерации ключа pre_master для сервера, чтобы его можно было использовать для создания мастер-ключа?

Если это так, я не уверен, как это сделать, потому что я не очень знаком с инструментом.

Еще одна вещь, на которую я должен обратить внимание, это то, что набор шифров, с которым я работаю, это TLS_RSA_WITH_AES_256_CBC_SHA, и я вижу в Wireshark, что pre_master_secret от клиента имеет длину 256 байт.

2

2 ответа на вопрос

4
Gilles

Я не совсем уверен, но я думаю, что ответ - нет. opensslКлиент командной строки представляет собой гетерогенный набор инструментов. Команды X.509 могут быть полезны для управления сертификатами, но команды криптографии редко полезны для чего-либо другого, кроме тестирования самого OpenSSL.

Если вам нужно выполнять криптографические вычисления с помощью распространенных алгоритмов, я рекомендую интерактивную командную строку Python с библиотекой Cryptodome .

Но для расшифровки SSL-соединений обычно проще всего использовать Wireshark. Сообщите Wireshark, где найти закрытый ключ, и он расшифрует соединение TLS, использующее шифрование RSA. Для соединений, использующих эфемерный Diffie-Hellman, вы не можете дешифровать трафик одним ключом, вам нужна дополнительная информация от клиента или сервера .


Обратите внимание, что использование TLS_RSA_WITH_AES_256_CBC_SHAciphersuite является плохой идеей по нескольким причинам:

  • Он не имеет прямой секретности, поэтому, если закрытый ключ сервера когда-либо будет скомпрометирован, все соединения, сделанные с этим ключом, также будут скомпрометированы. Наборы шифров, которые используют обмен ключами Диффи-Хеллмана (с EDH или ECDHE в их названии), имеют прямую секретность.
  • Он использует расшифровку RSA, которая включает в себя заполнение, которое является классическим источником ошибок реализации и утечки через боковые каналы. Шифраторы с EDH или ECDHE в названии в дополнение к RSA или с DSA или ECDSA используют сигнатуры вместо дешифрования и менее подвержены дефектам реализации.
  • Он использует расшифровку CBC, которая включает в себя заполнение, которое является классическим источником ошибок реализации и утечки через боковые каналы. Ciphersuites без CBC в их названии менее подвержены дефектам реализации.
1
dave_thompson_085

RSAES-PKCS1v1_5, который использует обмен ключами SSL / TLS-через-1.2 plain-RSA, может быть дешифрован операциями командной строки OpenSSL rsautlилиpkeyutl (последний начиная с версии 1.1.0 в 2010 году). Просмотрите их соответствующие справочные страницы, которые должны быть доступны в вашей системе, если не в Windows, или в Интернете .

Обратите внимание, что это дает вам секрет перед мастером, который сам по себе не может расшифровать (или аутентифицировать) трафик. Вы должны использовать premaster плюс одноразовые номера для получения главного секрета, а затем мастер-секрет плюс nonces для получения рабочих ключей (множественное число). Функция деривации «PRF» отличается между SSLv3 (больше не используется), TLS 1.0 и 1.1 (RFC 2246 и 4346) и TLS 1.2 (RFC 5246). (PRF снова будет отличаться в TLS 1.3 в том виде, как он был составлен, но это также полностью исключит простой обмен ключами RSA.)

Командная строка не может получить доступ к SSL / TLS PRF напрямую, но может выполнять HMAC, из которых они построены (кроме SSLv3); см. справочную страницу для dgstв тех же местах, что и выше, и note -hmac $keyможет обрабатывать только последовательности байтов, которые могут быть переданы из оболочки / etc, но это еще не все, поэтому вам может потребоваться -mac hmac -macopt hexkey:$hexkeyвзамен.

Тем не менее, я согласен с Жилем, гораздо проще позволить Wireshark сделать это. Если ваша проблема заключается в том, что у вас есть данные в какой-либо форме, отличной от файла захвата, дистрибутивы wireshark поставляются с несколькими вспомогательными инструментами командной строки для манипулирования файлами, которые обычно могут создавать поддельный захват, который в этом случае может затем расшифровать wireshark или tshark main.

Спасибо, я все еще на большой кривой обучения здесь. На самом деле пытается определить, могу ли я сделать это на языке MUMPS, выдавая openssl. Как мне задать дополнительный вопрос здесь, не публикуя другой вопрос? David B 5 лет назад 0
(1) Я не знаю MUMPS (хотя я слышал, что он «сжался» для M?), Поэтому я не могу сказать, может ли он обрабатывать части, или нет, как это делает командная строка openssl. Это, вероятно, ontopic для stackoverflow (не здесь). (2) Общая философия стека состоит в том, чтобы иметь один вопрос на один вопрос и ответы на этот вопрос (со ссылками, если это поможет объяснить их), поэтому каждый может найти этот вопрос люди, ищущие эти проблемы или темы. Но если вы продолжите _close_ по отношению к оригиналу, вы можете отредактировать этот Q, чтобы добавить его (но неуместно удалять уже решенные проблемы). dave_thompson_085 5 лет назад 0
MUMPS иногда называют «М», да, вы правы. Я задал дополнительный вопрос здесь [ссылка] (https://superuser.com/questions/1342977/decrypt-ssl-traffic-with-the-openssl-command-line-tool-continued)] Я надеюсь, что справлюсь со всеми Мне нужно в MUMPS, что openssl не может. Пока все хорошо, я пытаюсь читать RFC и следить за этим, хотя признаю, что немного борюсь. Моя программа MUMPS обслуживает сертификат, и я нахожусь в процессе согласования вещей с сообщением (сообщениями) о рукопожатии, которое пока выглядит хорошо. Если бы вы или кто-то мог проверить мои последующие действия и помочь в этом, это помогло бы. David B 5 лет назад 0

Похожие вопросы