Как я перечисляю наборы шифров 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. Я знаю, что мог grep через шестнадцатеричный дамп разговора, но я надеялся на что-то немного более изящное.

Я предпочел бы делать это на Linux, но Windows (или другой) будет прекрасен. Этот вопрос мотивирован тестированием безопасности, которое я делаю для PCI и общего тестирования на возможность проникновения.

Обновление:

GregS указывает ниже этого на выборы сервера SSL от наборов шифров клиента. Таким образом, кажется, что я должен был бы протестировать все наборы шифров по одному. Я думаю, что могу взломать что-то вместе, но являюсь там более простым, более соответствующим требованиям завтрашнего дня (например, новые шифры) способ сделать это?

264
задан 15.04.2016, 17:41

6 ответов

Я записал сценарий удара для тестирования наборов шифров. Это получает список поддерживаемых наборов шифров от 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

Править: Добавьте гибкость, поскольку хост и порт предоставляются как параметр сценарию

237
ответ дан 07.12.2019, 07:39

Единственная вещь, которую можно сделать, пробуют их всех, по одному, и видят, которые приняты. Я не знаю об инструменте, чтобы сделать это, хотя не должно быть трудно починить один из сценариев инструментов и openssl s_client.

В то время как клиент рекламирует, какой ciphersuites это примет, сервер просто выбирает один и использует его или приводит соединение к сбою, если это не находит ничего, что это любит.

0
ответ дан 07.12.2019, 07:39

Существует ли инструмент, который может протестировать, какие наборы шифров SSL/TLS конкретный веб-сайт предлагает?

Да, Вы могли использовать сетевой инструмент на веб-сайте Labs SSL для запросов Общественности База данных Сервера SSL.

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

alt text

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

107
ответ дан 07.12.2019, 07:39

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

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

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

8
ответ дан 07.12.2019, 07:39

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
55
ответ дан 07.12.2019, 07:39

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

2
ответ дан 07.12.2019, 07:39

Теги

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