Вопрос: Как я могу перечислить списки шифрования SSL / TLS, которые предлагает конкретный веб-сайт?


Как я могу получить список наборов шифрования 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 выбирает из наборов шифров клиента. Поэтому мне кажется, что мне нужно будет тестировать все шифровые сюиты по одному за раз. Я думаю, что я могу что-то взломать, но есть ли более простой, более надежный (например, новый шифр) способ сделать это?


227
2018-02-15 18:47


Источник


Может быть gnutls-cli? - grawity
После изменения названия этот вопрос действительно не требует программного обеспечения-rec. Голосование для повторного открытия. - Bob
@ fixer1234 Если это делает вас счастливее, я удалил любое появление слова «инструмент». Основной вопрос заключается в том, чтобы спросить, как выполнить конкретную задачу в любом случае; это небольшая перефразировка и далеко не полный открытый вопрос «список программного обеспечения». - Bob
@Bob: Я в восторге. :-) Голосование для повторного открытия. - fixer1234


Ответы:


Я написал сценарий bash для тестирования наборов шифров. Он получает список поддерживаемых наборов шифров из OpenSSL и пытается подключиться с помощью каждого из них. Если рукопожатие выполнено успешно, оно печатает YES, Если рукопожатие не выполнено, оно печатает NO, за которым следует текст ошибки OpenSSL.

#!/usr/bin/env bash

# OpenSSL requires the port number.
SERVER=$1
DELAY=1
ciphers=$(openssl ciphers 'ALL:eNULL' | sed -e 's/:/ /g')

echo Obtaining cipher list from $(openssl version).

for cipher in ${ciphers[@]}
do
echo -n Testing $cipher...
result=$(echo -n | openssl s_client -cipher "$cipher" -connect $SERVER 2>&1)
if [[ "$result" =~ ":error:" ]] ; then
  error=$(echo -n $result | cut -d':' -f6)
  echo NO \($error\)
else
  if [[ "$result" =~ "Cipher is ${cipher}" || "$result" =~ "Cipher    :" ]] ; then
    echo YES
  else
    echo UNKNOWN RESPONSE
    echo $result
  fi
fi
sleep $DELAY
done

Вот пример вывода, показывающий 3 неподдерживаемых шифра и 1 поддерживаемый шифр:

[@linux ~]$ ./test_ciphers 192.168.1.11:443
Obtaining cipher list from OpenSSL 0.9.8k 25 Mar 2009.
Testing ADH-AES256-SHA...NO (sslv3 alert handshake failure)
Testing DHE-RSA-AES256-SHA...NO (sslv3 alert handshake failure)
Testing DHE-DSS-AES256-SHA...NO (sslv3 alert handshake failure)
Testing AES256-SHA...YES

EDIT: добавьте гибкость, поскольку хост и порт предоставляются в качестве параметра скрипту


198
2017-12-20 23:41



openssl 1.0 нуждается в изменении: 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' - Hubert Kario
Существует еще один очень сложный сценарий оболочки, который использует sslscan и openssl: TLSSLed - Robert
Я перечислил ниже другой скрипт, который требует только OpenSSL CipherScan - Olivier - interfaSys
Обратите внимание, что этот скрипт вероятно, не будет скажите, поддерживает ли сервер шифровальные пакеты, которые OpenSSL не поддерживает. - sampablokuper
Предложение от @Robert для TLSSLed был фантастическим. Он был обновлен до 1.3 и имеет гораздо больше функциональности. Я использую для тестирования безопасности и должен сказать, что я впечатлен. - John Yeary


Nmap с SSL-перечислений-шифры

Нет лучшего или более быстрого способа получить список доступных шифров из сетевой службы. Кроме того, птар обеспечит рейтинг сильных, слабых или неизвестных для каждого доступного шифрования.

Сначала загрузите SSL-перечислимый-ciphers.nse nmap-скрипт (объяснение здесь). Затем из того же каталога, что и скрипт, запустите nmap следующим образом:

Список шифров, поддерживаемых HTTP-сервером

$ nmap --script ssl-enum-ciphers -p 443 www.example.com

Список шифров, поддерживаемых сервером IMAP

$ nmap --script ssl-enum-ciphers -p 993 mail.example.com

Вот фрагмент вывода с сервера Davecot IMAP:

993/tcp open  imaps
| ssl-enum-ciphers:
|   SSLv3:
|     ciphers:
|       TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA - strong
|       TLS_RSA_WITH_IDEA_CBC_SHA - weak
...
|   TLSv1.0:
|     ciphers:
|       TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA - strong
|       TLS_RSA_WITH_IDEA_CBC_SHA - weak
...
|_  least strength: weak

Nmap done: 1 IP address (1 host up) scanned in 1.03 seconds

128
2018-06-05 09:29



Есть ли способ использовать этот скрипт для IMAP с помощью STARTTLS? STARTTLS на SMTP, похоже, работает, но в IMAP скрипт даже не запускается. - Giel
Пара вещей: вы можете запустить скрипт в вашем nmap-дистрибутиве, а не тот, который вы загрузили. Проверьте, переименовав свой. Затем проверьте «portrule», который в некоторых версиях проверяет на часто используемые номера портов. Заменить portrule = function() \n return true \n end - slim
... и понадобится взлом для работы с IMAP STARTTLS, FTPS AUTH TLS и т. д., но это возможно. - slim
Одно предостережение в том, что старые сценарии, которые могут быть включены в ваш дистрибутив / пакет, перечисляют шифры в алфавитном порядке, не сервера (или клиента). См. Вышеупомянутый комментарий от @slim - Clint Pachl
За два года после написания этого ответа Nmap добавил поддержку STARTTLS через FTP, NNTP, IMAP, LDAP, POP3, PostgreSQL, SMTP, XMPP, VNC и MS SQL, а также многие другие улучшения, кроме простого перечисления поддерживаемых шифров , - bonsaiviking


Есть ли инструмент, который может проверить, что   Шифрование SSL / TLS   предложения веб-сайта?

Да, вы можете использовать онлайн-инструмент на Лаборатории SSL'для запроса базы данных Public SSL Server.

Вот фрагмент информации, которую он предоставляет:

alt text

(снимок экрана из результатов google.com)


94
2018-02-20 18:02



круто, спасибо, что нашли. - James K Polk
Это в точку что я искал! Большое спасибо! - Jeremy Powell
К сожалению, он поддерживает только HTTPS на стандартном порту, не может использовать его для проверки POP3S, IMAPS или IMAP с помощью TLS - Hubert Kario
И хотя он поддерживает HTTPS, ему даже не хватает поддержки SNI. - Gurken Papst
И хотя это хорошо для публичных сайтов, вы не можете использовать его для сайтов в сетях, которые изолированы от Интернета. - Iszi


sslscan это хорошая небольшая утилита.

Он проверяет соединение с TLS и SSL (и скрипт сборки может связываться со своей собственной версией OpenSSL, чтобы также проверять устаревшие версии SSL) и отчеты о наборах и сертификатах сервера.

Пример вывода для google.com (обрезается для удобства чтения):

$ sslscan google.com
Testing SSL server google.com on port 443

 TLS renegotiation:
Secure session renegotiation supported

  TLS Compression:
Compression disabled

  Heartbleed:
TLS 1.2 not vulnerable to heartbleed
TLS 1.1 not vulnerable to heartbleed
TLS 1.0 not vulnerable to heartbleed

  Supported Server Cipher(s):
Preferred TLSv1.2  128 bits  ECDHE-RSA-AES128-GCM-SHA256   Curve P-256 DHE 256
Accepted  TLSv1.2  128 bits  ECDHE-RSA-AES128-SHA          Curve P-256 DHE 256
Accepted  TLSv1.2  128 bits  ECDHE-RSA-RC4-SHA             Curve P-256 DHE 256
Accepted  TLSv1.2  128 bits  AES128-GCM-SHA256
Accepted  TLSv1.2  128 bits  AES128-SHA
<snip>
Preferred TLSv1.1  128 bits  ECDHE-RSA-AES128-SHA          Curve P-256 DHE 256
Accepted  TLSv1.1  128 bits  ECDHE-RSA-RC4-SHA             Curve P-256 DHE 256
Accepted  TLSv1.1  128 bits  AES128-SHA
<snip>
Preferred TLSv1.0  128 bits  ECDHE-RSA-AES128-SHA          Curve P-256 DHE 256
Accepted  TLSv1.0  128 bits  ECDHE-RSA-RC4-SHA             Curve P-256 DHE 256
Accepted  TLSv1.0  128 bits  AES128-SHA
<snip>
Preferred SSLv3    128 bits  RC4-SHA
Accepted  SSLv3    128 bits  RC4-MD5
<snip>

  SSL Certificate:
Signature Algorithm: sha256WithRSAEncryption
RSA Key Strength:    2048

Subject:  *.google.com
Altnames: DNS:*.google.com, DNS:*.android.com, <snip>
Issuer:   Google Internet Authority G2

Not valid before: Apr  7 08:24:31 2016 GMT
Not valid after:  Jun 30 08:20:00 2016 GMT

47
2018-03-18 22:21



yum install sslscan работает на CentOS 6. - a coder
sudo dnf install sslscan на Fedora 22. - Zayne S Halsall
brew install sslscan на OSX - Xiao
sudo apt-get install sslscan на Ubuntu (12.04 - так что все более поздние версии должны быть точными). - balu
Обновление: Следует отметить, что официальная версия sslscan, найденная в репозиториях Debian и Ubuntu (в настоящее время 1,8,2 с 2009 года) не поддержка TLS v1.1 и 1.2, см. bugs.launchpad.net/ubuntu/+source/sslscan/+bug/1372741, Поэтому следует использовать версию GitHub, с которой связан OP. - balu


Поскольку это такой отличный ссылочный поток для инструментов сканирования SSL, я перечислил CipherScan, который был создан год назад, а также может выявить проблемы с ключевыми обменными шифрами. https://github.com/jvehent/cipherscan

Если вы хотите, чтобы моя вилка поддерживала SNI и FreeBSD, URL-адрес https://github.com/oparoz/cipherscan

Это сценарий, который вызывает openssl s_clientи поддерживает использование вашего собственного двоичного файла OpenSSL, чтобы вы могли тестировать предстоящие функции или новые шифры (chacha20 + poly1305 на пример).

Он также позволяет вам подключаться к любому порту, который вы хотите, и использовать starttls.

Вот типичный результат

# ./cipherscan -o ./openssl api.mycompany.com:443
...................
prio  ciphersuite                  protocols              pfs_keysize
1     DHE-RSA-AES256-GCM-SHA384    TLSv1.2                DH,4096bits
2     DHE-RSA-AES256-SHA256        TLSv1.2                DH,4096bits
3     ECDHE-RSA-AES256-GCM-SHA384  TLSv1.2                ECDH,P-384,384bits
4     ECDHE-RSA-AES256-SHA384      TLSv1.2                ECDH,P-384,384bits
5     DHE-RSA-AES128-GCM-SHA256    TLSv1.2                DH,4096bits
6     DHE-RSA-AES128-SHA256        TLSv1.2                DH,4096bits
7     ECDHE-RSA-AES128-GCM-SHA256  TLSv1.2                ECDH,P-384,384bits
8     ECDHE-RSA-AES128-SHA256      TLSv1.2                ECDH,P-384,384bits
9     DHE-RSA-CAMELLIA256-SHA      TLSv1,TLSv1.1,TLSv1.2  DH,4096bits
10    DHE-RSA-AES256-SHA           TLSv1,TLSv1.1,TLSv1.2  DH,4096bits
11    ECDHE-RSA-AES256-SHA         TLSv1,TLSv1.1,TLSv1.2  ECDH,P-384,384bits
12    DHE-RSA-CAMELLIA128-SHA      TLSv1,TLSv1.1,TLSv1.2  DH,4096bits
13    DHE-RSA-AES128-SHA           TLSv1,TLSv1.1,TLSv1.2  DH,4096bits
14    ECDHE-RSA-AES128-SHA         TLSv1,TLSv1.1,TLSv1.2  ECDH,P-384,384bits
15    CAMELLIA256-SHA              TLSv1,TLSv1.1,TLSv1.2
16    AES256-SHA                   TLSv1,TLSv1.1,TLSv1.2
17    CAMELLIA128-SHA              TLSv1,TLSv1.1,TLSv1.2
18    AES128-SHA                   TLSv1,TLSv1.1,TLSv1.2

Certificate: trusted, 4096 bit, sha256WithRSAEncryption signature
TLS ticket lifetime hint: 300
OCSP stapling: supported

И вот список вариантов

-a | --allciphers   Test all known ciphers individually at the end.
-b | --benchmark    Activate benchmark mode.
-d | --delay        Pause for n seconds between connections
-D | --debug        Output ALL the information.
-h | --help         Shows this help text.
-j | --json         Output results in JSON format.
-o | --openssl      path/to/your/openssl binary you want to use.
-v | --verbose      Increase verbosity.

Выход json полезен, если вы вызываете это из других скриптов.


14
2017-09-16 11:25



«Конфигурация большого-SSLv3 не поддерживается, соединение не выполнено» - a coder


https://github.com/iSECPartners/sslyze

Это один из основанных на Python, работает в Linux / Mac / Windows из командной строки.


12
2018-01-25 14:01





После небольшого поиска в Google я нашел это Тестирование SSL-TLS (OWASP-CM-001):

птар сканер через опцию «-sV» может идентифицировать службы SSL. Сканеры уязвимостей, в дополнение к выполнению обнаружения услуг, могут включать проверки против слабых шифров (например, Сканер Nessus имеет возможность проверять SSL-услуги на произвольных портах и ​​сообщать о слабых шифрах).

а также: Foundstone SSL Digger это инструмент для оценки надежности SSL-серверов путем тестирования поддерживаемых шифров. Некоторые из этих шифров, как известно, небезопасны.


8
2018-02-20 16:30





Я использую для большинства тестов SSL testssl.sh (см. https://testssl.sh / devel version @ https://github.com/drwetter/testssl.sh, Он тестирует уязвимости, шифры, протоколы и т. Д.


3
2018-01-10 17:36





SSLScan отлично работает; новый инструмент SSLDiagnos работает для Windows, или вы можете просто написать скрипт, используя openssl s_client.


2
2017-12-01 20:40





Nmap-х SSL-перечислений-шифры скрипт может отображать поддерживаемые шифры и версии SSL / TLS, а также поддерживаемые компрессоры.


2
2018-03-25 21:58



Ваш ответ был ранее, но Клинт Пахль  ответ объясняет ssl-enum-ciphers гораздо более всесторонне. - sampablokuper


Если вам нужен хороший grepable-вывод (и поддержка проверки всех версий SSL / TLS)

Использование: ./script.sh www.url.com

#!/usr/bin/env bash
ciphers2=$(openssl ciphers -ssl2 'ALL:eNULL' | sed -e 's/:/ /g')
ciphers3=$(openssl ciphers -ssl3 'ALL:eNULL' | sed -e 's/:/ /g')
cipherst1=$(openssl ciphers -tls1 'ALL:eNULL' | sed -e 's/:/ /g')
cipherst11=$(openssl ciphers -tls1.1 'ALL:eNULL' | sed -e 's/:/ /g')
cipherst12=$(openssl ciphers -tls1.2 'ALL:eNULL' | sed -e 's/:/ /g')

SSL2="SSL2("
for cipher in ${ciphers2[@]}
do
result=$(echo -n | openssl s_client -ssl2 -cipher "$cipher" -connect $1:443 2>&1)
if [[ "$result" =~ "Cipher is ${cipher}" ]] ; then
  SSL2="${SSL2}${cipher}:"
fi
done
SSL2=$(echo "${SSL2})" | sed -e 's/:)/)/g')

SSL3="SSL3("
for cipher in ${ciphers3[@]}
do
result=$(echo -n | openssl s_client -ssl3 -cipher "$cipher" -connect $1:443 2>&1)
if [[ "$result" =~ "Cipher is ${cipher}" ]] ; then
  SSL3="${SSL3}${cipher}:"
fi
done
SSL3=$(echo "${SSL3})" | sed -e 's/:)/)/g')
TLS1="TLS1("
for cipher in ${cipherst1[@]}
do
result=$(echo -n | openssl s_client -tls1 -cipher "$cipher" -connect $1:443 2>&1)
if [[ "$result" =~ "Cipher is ${cipher}" ]] ; then
  TLS1="${TLS1}${cipher}:"
fi
done
TLS1=$(echo "${TLS1})" | sed -e 's/:)/)/g')

TLS11="TLS1.1("
for cipher in ${cipherst11[@]}
do
result=$(echo -n | openssl s_client -tls1_1 -cipher "$cipher" -connect $1:443 2>&1)
if [[ "$result" =~ "Cipher is ${cipher}" ]] ; then
  TLS11="${TLS11}${cipher}:"
fi
done
TLS11=$(echo "${TLS11})" | sed -e 's/:)/)/g')

TLS12="TLS1.2("
for cipher in ${cipherst12[@]}
do
result=$(echo -n | openssl s_client -tls1_2 -cipher "$cipher" -connect $1:443 2>&1)
if [[ "$result" =~ "Cipher is ${cipher}" ]] ; then
  TLS12="${TLS12}${cipher}:"
fi
done
TLS12=$(echo "${TLS12})" | sed -e 's/:)/)/g')

echo "$1,$SSL2,$SSL3,$TLS1,$TLS11,$TLS12";

2
2018-04-09 18:31



Вы выполняете openssl ciphers -tls1.1 а также openssl ciphers -tls1.2 однако эти параметры, похоже, не существуют ... Существует только -tls1 (по крайней мере, на платформах, которые я пробовал). - Marki
(Кажется, есть дополнительные варианты в форме tls1_1 а также tls1_2 но они отображаются только на главная версия of openssl и даже не в 1.0.2 ....) - Marki
Обратите внимание, что этот скрипт вероятно, не будет скажите, поддерживает ли сервер шифровальные пакеты, которые OpenSSL не поддерживает. - sampablokuper