Как я могу получить список наборов шифров SSL / TLS, предлагаемых конкретным веб-сайтом?
Я пробовал openssl, но если вы посмотрите на вывод:
$ echo -n | openssl s_client -connect www.google.com:443
CONNECTED(00000003)
depth=1 /C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com
i:/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
1 s:/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDITCCAoqgAwIBAgIQL9+89q6RUm0PmqPfQDQ+mjANBgkqhkiG9w0BAQUFADBM
MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkg
THRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBDQTAeFw0wOTEyMTgwMDAwMDBaFw0x
MTEyMTgyMzU5NTlaMGgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlh
MRYwFAYDVQQHFA1Nb3VudGFpbiBWaWV3MRMwEQYDVQQKFApHb29nbGUgSW5jMRcw
FQYDVQQDFA53d3cuZ29vZ2xlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC
gYEA6PmGD5D6htffvXImttdEAoN4c9kCKO+IRTn7EOh8rqk41XXGOOsKFQebg+jN
gtXj9xVoRaELGYW84u+E593y17iYwqG7tcFR39SDAqc9BkJb4SLD3muFXxzW2k6L
05vuuWciKh0R73mkszeK9P4Y/bz5RiNQl/Os/CRGK1w7t0UCAwEAAaOB5zCB5DAM
BgNVHRMBAf8EAjAAMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwudGhhd3Rl
LmNvbS9UaGF3dGVTR0NDQS5jcmwwKAYDVR0lBCEwHwYIKwYBBQUHAwEGCCsGAQUF
BwMCBglghkgBhvhCBAEwcgYIKwYBBQUHAQEEZjBkMCIGCCsGAQUFBzABhhZodHRw
Oi8vb2NzcC50aGF3dGUuY29tMD4GCCsGAQUFBzAChjJodHRwOi8vd3d3LnRoYXd0
ZS5jb20vcmVwb3NpdG9yeS9UaGF3dGVfU0dDX0NBLmNydDANBgkqhkiG9w0BAQUF
AAOBgQCfQ89bxFApsb/isJr/aiEdLRLDLE5a+RLizrmCUi3nHX4adpaQedEkUjh5
u2ONgJd8IyAPkU0Wueru9G2Jysa9zCRo1kNbzipYvzwY4OA8Ys+WAi0oR1A04Se6
z5nRUP8pJcA2NhUzUnC+MY+f6H/nEQyNv4SgQhqAibAxWEEHXw==
-----END CERTIFICATE-----
subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com
issuer=/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
---
No client certificate CA names sent
---
SSL handshake has read 1777 bytes and written 316 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 1024 bit
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : AES256-SHA
Session-ID: 748E2B5FEFF9EA065DA2F04A06FBF456502F3E64DF1B4FF054F54817C473270C
Session-ID-ctx:
Master-Key: C4284AE7D76421F782A822B3780FA9677A726A25E1258160CA30D346D65C5F4049DA3D10A41F3FA4816DD9606197FAE5
Key-Arg : None
Start Time: 1266259321
Timeout : 300 (sec)
Verify return code: 20 (unable to get local issuer certificate)
---
это просто показывает, что набор шифров - это что-то с AES256-SHA. Я знаю, что могу пролистать шестнадцатеричный дамп разговора, но я надеялся на что-то более элегантное.
Я бы предпочел сделать это на Linux, но Windows (или другой) будет в порядке. Этот вопрос мотивирован тестированием безопасности, которое я проводил для PCI, и общим тестированием на проникновение.
Обновить:
GregS указывает ниже, что сервер SSL выбирает из комплектов шифров клиента. Так что, похоже, мне нужно будет протестировать все наборы шифров по одному. Я думаю, что могу что-то взломать, но есть ли более простой, более перспективный способ (например, новые шифры) сделать это?
gnutls-cli
?Ответы:
Я написал скрипт bash для тестирования комплектов шифров. Он получает список поддерживаемых наборов шифров из OpenSSL и пытается подключиться, используя каждый из них. Если рукопожатие прошло успешно, оно печатается
YES
. Если рукопожатие не прошло успешно, оно печатаетNO
, а затем текст ошибки OpenSSL.Вот пример выходных данных, показывающих 3 неподдерживаемых шифра и 1 поддерживаемый шифр:
РЕДАКТИРОВАТЬ: добавить гибкость, так как хост и порт предоставляются в качестве параметра для сценария
источник
if [[ "$result" =~ "Cipher :" ]] ; then
вместо этогоif [[ "$result" =~ "Cipher is " ]] ; then
я также тестирую SSL2 и безопасное пересмотр:echo -n Testing ssl2... result=$(echo -n | openssl s_client -ssl2 -connect $SERVER 2>&1) if [[ "$result" =~ "Cipher :" ]] ; then echo supported. INSECURE! else echo no support, OK fi echo -n Testing SSL secure renegotiation... echo -n "" | openssl s_client -connect $SERVER 2>&1 | grep 'Secure Renegotiation'
Nmap с ssl-enum-шифрами
Нет лучшего или более быстрого способа получить список доступных шифров из сетевого сервиса. Кроме того, nmap предоставит оценку прочности сильного, слабого или неизвестного для каждого доступного шифра.
Сначала загрузите скрипт ssl-enum-ciphers.nse nmap ( объяснение здесь ). Затем из того же каталога, что и скрипт, запустите nmap следующим образом:
Список шифров, поддерживаемых HTTP-сервером
Список шифров, поддерживаемых сервером IMAP
Вот фрагмент вывода с сервера Dovecot IMAP:
источник
portrule = function() \n return true \n end
AUTH TLS
т. д. потребуется взлом , но это возможно.Да, вы можете использовать онлайн-инструмент на веб-сайте SSL Labs для запроса к публичной базе данных SSL-сервера.
Вот фрагмент информации, которую он предоставляет:
(скриншот с результатов google.com)
источник
sslscan - это небольшая полезная утилита.
Он проверяет соединение с TLS и SSL (и сценарий сборки может связываться с собственной копией OpenSSL, чтобы также проверять устаревшие версии SSL) и сообщает о наборах шифров и сертификате сервера.
Пример вывода для
google.com
(обрезано для удобства чтения):источник
yum install sslscan
работает на CentOS 6.sudo dnf install sslscan
на Fedora 22 также.brew install sslscan
на OSXsudo apt-get install sslscan
на Ubuntu (12.04 - так что все более поздние версии должны быть в порядке).Поскольку это отличный справочный материал для инструментов сканирования SSL, я перечислю CipherScan, созданный год назад, и также могу выявить проблемы с шифрами обмена ключами. https://github.com/jvehent/cipherscan
Если вам нужен мой форк, который поддерживает SNI и FreeBSD, URL-адрес https://github.com/oparoz/cipherscan
Это скрипт, который вызывает
openssl s_client
и поддерживает использование вашего собственного двоичного файла OpenSSL, чтобы вы могли тестировать будущие функции или новые шифры (chacha20 + poly1305 за пример).Он также позволяет вам подключиться к любому порту и использовать starttlss.
Вот типичный вывод
И вот список вариантов
Вывод json полезен, если вы вызываете это из других скриптов.
источник
https://github.com/iSECPartners/sslyze
Этот основан на Python, работает в Linux / Mac / Windows из командной строки.
источник
После небольшого поиска я нашел это Тестирование для SSL-TLS (OWASP-CM-001) :
а также: Foundstone SSL Digger - это инструмент для оценки надежности серверов SSL путем тестирования поддерживаемых шифров. Известно, что некоторые из этих шифров небезопасны.
источник
Я использую для большинства тестов SSL testssl.sh (см. Https://testssl.sh / devel version @ https://github.com/drwetter/testssl.sh . Он проверяет уязвимости, шифры, протоколы и т. Д.
источник
SSLScan великолепен; новый инструмент SSLDiagnos работает для Windows, или вы можете просто написать скрипт, используя openssl s_client.
источник
Сценарий Nmap ssl-enum-ciphers может перечислять поддерживаемые шифры и версии SSL / TLS, а также поддерживаемые компрессоры.
источник
ssl-enum-ciphers
Если вам нужен хороший вывод grepable (и поддержка проверки всех версий SSL / TLS)
Использование: ./script.sh www.url.com
источник
openssl ciphers -tls1.1
и,openssl ciphers -tls1.2
тем не менее, эти параметры, кажется, не существуют ... Есть только-tls1
(по крайней мере, на платформах, которые я пробовал).tls1_1
и,tls1_2
но они показаны только в основной версии openssl и даже не в 1.0.2 ....)На pentesterscripting.com есть небольшой скрипт, который использует SSLScan и OpenSSL для проверки:
http://www.pentesterscripting.com/discovery/ssl_tests (через интернет-архив Wayback Machine )
Дублирован здесь для защиты будущего, так как основной сайт уже мертв:
Использование: ./ssltest.sh HOST PORT
источник
Основываясь на ответе @ индивидуума и предложении опубликовать его как собственный ответ, я предоставляю свою измененную версию сценария @ индивидуума. Вы можете указать хост в качестве первого аргумента, и он будет выводить те же результаты, что и исходный скрипт, но чуть более отформатированный:
источник
(Бесплатно) Поваренная книга OpenSSL Ивана Ристича, который разработал онлайн-инструмент SSL Labs, отмеченный в ответе Кеза , гласит:
(Мой акцент.)
Одним из инструментов, о котором я не упоминал в других ответах, является SSLTest Стивена Брэдшоу , который, среди прочего, предназначен для сравнения «обнаруженных шифров и протоколов с такими стандартами соответствия, как DSD ISM и PCI-DSS».
Итак, попробуйте этот или один из инструментов, упомянутых в других ответах, или создайте свой собственный и подумайте об использовании подхода Ристича по частичному рукопожатию.
источник
Я написал инструмент, который делает именно это. Он называется tlsenum и доступен на GitHub .
Вот пример вывода инструмента против
twitter.com
.Это похоже на то, что делает SSL Lab, но я считаю, что наличие инструмента командной строки, который вы можете автоматизировать и анализировать, гораздо полезнее.
источник
SSLyze, первоначально на https://github.com/iSECPartners/sslyze , теперь находится на https://github.com/nabla-c0d3/sslyze . Это было упомянуто в другом ответе , но без особых подробностей.
SSLyze основан на Python и работает на Linux / Mac / Windows из командной строки. Он использует OpenSSL, а в Windows поставляется в комплекте с копией OpenSSL.
Перечисляет протоколы, комплекты шифров и ключевые детали, а также тесты для некоторых распространенных уязвимостей. Можно включить или отключить определенные проверки, чтобы получить больше данных или ускорить сканирование.
источник
Единственное, что вы можете сделать, это попробовать их все по одному и посмотреть, какие из них приняты. Я не знаю инструмент для этого, хотя это не должно быть трудно собрать вместе из инструментов сценариев и
openssl s_client
.В то время как клиент объявляет, какие наборы шифров он примет, сервер просто выбирает один и использует его или разрывает соединение, если он не находит ничего, что ему нравится.
источник
Все эти ответы в порядке. Одна часть ответа может объяснить, зачем нам нужен инструмент для обнаружения списка серверов, а не спрашивать непосредственно в TLS, что сервер предоставляет все свои поддерживаемые наборы шифров, как это делает клиент TLS при подключении к серверу.
Ответ заключается в том, что сервер никогда не отправляет список , он просто выбирает в списке клиентских шифров тот шифр, который он хочет использовать, так пишется протокол SSL / TLS: http://wiki.opensslfoundation.com/index.php/ SSL_and_TLS_Protocols # Cipher_Suites
Вот почему клиент должен перечислить шифры, чтобы иметь возможность найти те, которые поддерживаются сервером, и для этого сделать по крайней мере одно новое начальное рукопожатие (ClientHello) для каждого набора шифров.
источник
Ища что-то, что делает
AUTH TLS
на FTP, я обнаружил этот инструмент: ssl-cipher-suite-enumЭто perl-скрипт, который в основном делает то, что делает shell-скрипт hackajar, только более сложный.
Он также предлагает базовую оценку предлагаемых шифров и протоколов. Это похоже на инструменты SSL Labs, только для домашнего использования. :)
По умолчанию он поддерживает только
AUTH SSL
FTP, но простой поиск и замена могут это исправить. В качестве бонуса он также утверждает, что поддерживает SMTP сSTARTTLS
и RDP.источник
TestSSLServer - это решение, основанное исключительно на Java. Преимущества:
он работает очень низкоуровнево, просто на простых сокетах, поэтому он не зависит от возможных недоступных шифров из JDK или OpenSSL .
не требует открытия дополнительных портов (например, ICMP для ping)
работает с сертификатами клиентов
Недостатки:
Мой личный опыт: учитывая тесный сервер с открытым только одним HTTPS-портом (без другого порта), требуются сертификаты клиента и активные iptables, он все еще мог перечислять доступные шифры, в то время как решения с наибольшим количеством голосов не были (я был пробовать небольшой скрипт, SSL Labs, NMap, sslscan)
источник