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


Я пытаюсь выполнить ручное извлечение данных / шифрование / дешифрование с помощью 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
2017-07-20 14:09


Источник




Ответы:


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

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

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


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

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

4
2017-07-20 18:36





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

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

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

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


1
2017-07-21 12:53



Спасибо, я все еще на большой кривой обучения здесь. На самом деле, пытаясь определить, могу ли я сделать это на языке MUMPS, выкладываем команду openssl. Как я могу задать следующий вопрос здесь, не публикуя еще один вопрос? - David B
(1) Я не знаю MUMPS (хотя я слышал, что он «сжался» до M?), Поэтому я не могу сказать, может ли и как он может обрабатывать детали. В командной строке openssl нет. Вероятно, это неточно для stackoverflow (не здесь). (2) Общая философия стека состоит в том, чтобы иметь 1 вопрос на Q и ответы для этого Q (со ссылками, если это помогает объяснить их), поэтому каждый может быть найден людьми, которые ищут эти проблемы или темы. Но если ваше наблюдение Закрыть к оригиналу вы можете уйти с редактированием этого Q, чтобы добавить его (но это невежливо для устранения проблем, которые уже были рассмотрены). - dave_thompson_085
MUMPS иногда называют «M» да, вы правы. Я задал следующий вопрос здесь ссылка] Надеюсь, я смогу обработать все, что мне нужно, в MUMPS, которое openssl не может. До сих пор так хорошо, что я пытаюсь прочитать RFC и следовать дальше, хотя я признаю, что немного борюсь. Моя программа MUMPS обслуживает сертификат, и я сейчас в процессе переговоров с сообщениями о рукопожатии, которые он хорошо разбирается. Если вы или кто-то может проверить мои последующие действия и помочь в следующем, что поможет. - David B