2010-02-15 18:47:18 +0000 2010-02-15 18:47:18 +0000
276
276

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

Ответы (21)

246
246
246
2010-12-20 23:41:17 +0000

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

170
170
170
2014-06-05 09:29:14 +0000

Nmap с ssl-enum-ciphers

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

Сначала скачайте скрипт ssl-enum-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

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

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
106
106
106
2010-02-20 18:02:27 +0000

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

Да, вы можете использовать онлайн-инструмент на веб-сайте SSL Labs ’, чтобы сделать запрос к публичной базе данных сервера SSL.

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

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

57
57
57
2010-03-18 22:21:08 +0000

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
15
15
15
2014-09-16 11:25:38 +0000

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

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

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

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

Вот типичный вывод

# ./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 полезен, если вы вызываете его из других скриптов.

13
13
13
2012-01-25 14:01:34 +0000

https://github.com/iSECPartners/sslyze

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

8
8
8
2010-02-20 16:30:05 +0000

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

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

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

6
6
6
2015-01-10 17:36:14 +0000

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

2
2
2
2014-04-09 18:31:47 +0000

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

Usage: ./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
2
2
2010-12-01 20:40:29 +0000

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

2
2
2
2016-02-05 00:55:55 +0000

Основываясь на @indiv’s ответ и предложении разместить его в качестве собственного ответа, я предоставляю свою обновленную версию сценария @indiv. Вы можете предоставить хост в качестве первого аргумента, и он выдаст те же результаты, что и оригинальный скрипт, но немного более отформатированный:

#!/usr/bin/env bash
# adapted from https://superuser.com/questions/109213/how-do-i-list-the-ssl-tls-cipher-suites-a-particular-website-offers

# OpenSSL requires the port number.
# SERVER=192.168.1.1:443
SERVER=$1
if [[-z "$SERVER"]]; then echo "ERROR: no server specified"; exit 1; fi;

## Set up colors, if possible
if [[$(tput colors)]];then
  COLOR_BOLD="$(tput bold)" # "\e[1;32m"
  COLOR_GREEN="$(tput setaf 2)" # "\e[1;32m"
  COLOR_RESET="$(tput sgr0)" # "\e[0m"
fi

SERVER=$1:443
echo Server is ${COLOR_BOLD}"$SERVER"${COLOR_RESET}

DELAY=1
ciphers=$(openssl ciphers 'ALL:eNULL' | sed -e 's/:/ /g')

echo Obtaining cipher list from $(openssl version).

for cipher in ${ciphers[@]}
  do
  printf "%-42s" "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 ${COLOR_BOLD}${COLOR_GREEN}YES${COLOR_RESET}
    else
      echo UNKNOWN RESPONSE
      echo $result
    fi
  fi
  sleep $DELAY
done
```.
2
2
2
2012-01-19 05:39:21 +0000

На сайте pentesterscripting.com есть небольшой скрипт, использующий SSLScan и OpenSSL для проверки:

Дублируется здесь для будущей защиты, так как основной сайт в настоящее время мертв:

#!/usr/bin/env bash

# Description:
# Script to extract the most security relevant details from a 
# target SSL/TLS implementation by using sslscan.
# Author: Raul Siles (raul _AT_ taddong _DOT_ com)
# Taddong (www.taddong.com)
# Date: 2011-05-27
# Version: 1.0
#
# - Current SSL/TLS tests: 
# SSLv2, NULL cipher, weak ciphers -key length-, strong 
# ciphers -AES-, MD5 signed cert, SSL/TLS renegotiation
#
# Requires: 
# - sslscan
# https://sourceforge.net/projects/sslscan/
#
# Credits: Based on ssl_test.sh by Aung Khant, http://yehg.net.
# 

#
# / **************************************************************************
# * Copyright 2011 by Taddong (Raul Siles) *
# * *
# * This program is free software; you can redistribute it and/or modify *
# * it under the terms of the GNU General Public License as published by *
# * the Free Software Foundation; either version 3 of the License, or *
# * (at your option) any later version. *
# * *
# * This program is distributed in the hope that it will be useful, *
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
# * GNU General Public License for more details. *
# * *
# * You should have received a copy of the GNU General Public License *
# * along with this program. If not, see <http://www.gnu.org/licenses/>. *
# * *
# ************************************************************************** /
#

VERSION=1.0

OPENSSLVERSION=$(openssl version)
SSLSCANVERSION=$(sslscan --version | grep version | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g")

echo ------------------------------------------------------
echo " TLSSLed - ($VERSION) based on sslscan and openssl"
echo " by Raul Siles (www.taddong.com)"
echo " ( inspired by ssl_test.sh by Aung Khant )"
echo ------------------------------------------------------
echo + openssl version: $OPENSSLVERSION
echo + $SSLSCANVERSION
echo ------------------------------------------------------
echo

if [$# -ne 2]; then 
   echo Usage: $0 IP PORT
   exit
fi

HOST=$1
PORT=$2

echo [*] Analyzing SSL/TLS on $HOST:$PORT ...
echo 

# Run sslcan once, store the results to a log file and
# analyze that file for all the different tests:
DATE=$(date +%F_%R:%S)
TARGET=$HOST:$PORT
LOGFILE=sslscan\_$TARGET\_$DATE.log
ERRFILE=sslscan\_$TARGET\_$DATE.err

echo [*] Running sslscan on $HOST:$PORT...
sslscan $HOST:$PORT > $LOGFILE 2> $ERRFILE

echo
echo [*] Testing for SSLv2 ...
cat $LOGFILE | grep "Accepted SSLv2"
echo
echo [*] Testing for NULL cipher ...
cat $LOGFILE | grep "NULL" | grep Accepted
echo
echo [*] Testing for weak ciphers \(based on key length\) ...
cat $LOGFILE | grep " 40 bits" | grep Accepted
echo 
cat $LOGFILE | grep " 56 bits" | grep Accepted
echo
echo [*] Testing for strong ciphers \(AES\) ...
cat $LOGFILE | grep "AES" | grep Accepted

echo 
echo [*] Testing for MD5 signed certificate ...
#cat $LOGFILE | grep -E 'MD5WithRSAEncryption|md5WithRSAEncryption'
cat $LOGFILE | grep -i 'MD5WithRSAEncryption'

echo 
echo [*] Checking preferred server ciphers ...
cat $LOGFILE | sed '/Prefered Server Cipher(s):/,/^$/!d' | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"

echo
echo [*] Testing for SSLv3/TLSv1 renegotiation vuln. \(CVE-2009-3555\) ...
#echo [*] echo R \| openssl s_client -connect $HOST:$PORT \| grep "DONE"
#
# Renegotiation details go to stderr (2>)
#
# if $OPENSSLVERSION is updated (version?) it supports RFC5746 and will print:
# Secure Renegotiation IS NOT supported
# Secure Renegotiation IS supported
#

echo R | openssl s_client -connect $HOST:$PORT | grep -E "Secure Renegotiation IS|DONE"

echo
echo [*] New files created:
ls -l $LOGFILE
if [! -s $ERRFILE]; then
        # Error file is empty
        rm $ERRFILE
else
        ls -l $ERRFILE
fi

echo
echo 
echo [*] done
echo

Использование: ./ssltest.sh ХОСТ-ПОРТ

2
2
2
2014-03-25 21:58:08 +0000

Скрипт Nmap ssl-enum-ciphers может перечислить поддерживаемые шифры и версии SSL/TLS, а также поддерживаемые компрессоры.

2
2
2
2016-09-19 03:01:09 +0000

(бесплатно) OpenSSL Cookbook Ивана Ристича, который разработал онлайн-инструмент SSL Labs, отмеченный в Kez’s answer , гласит:

Если вы хотите определить все комплекты, поддерживаемые определенным сервером, начните с вызова openssl ciphers ALL, чтобы получить список всех комплектов, поддерживаемых вашей версией OpenSSL. Затем отправьте их на сервер по одному, чтобы протестировать их по отдельности. Я не предлагаю делать это вручную; это ситуация, в которой небольшая автоматизация проходит долгий путь. На самом деле, это ситуация, в которой поиск хорошего инструмента может быть целесообразным.

Есть, однако, недостаток в тестировании таким образом. Вы можете тестировать только те комплекты, которые поддерживает OpenSSL. …

Нет одной библиотеки SSL/TLS поддерживает все наборы шифров, и это затрудняет всестороннее тестирование. Для лабораторий SSL, Я прибегнул к использованию частичного рукопожатия для этой цели, с пользовательским клиентом, который делает вид, что поддерживает произвольные наборы. На самом деле он не может провести переговоры даже с одним пакетом, но просто предложить провести переговоры достаточно для того, чтобы серверы сказали вам, поддерживают ли они пакет или нет.

(Мой акцент.)

Один из инструментов, который я не видел в других ответах, это тест Стивена Брэдшоу SSLTest, который, помимо всего прочего, предназначен для сравнения “обнаруженных шифров и протоколов со стандартами соответствия, такими как DSD ISM и PCI-DSS”. “

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

1
1
1
2020-02-11 13:25:43 +0000

Этот ответ суммирует лучшие ответы и аргументирует, почему следует выбрать альтернативу (или нет!).

  • *

Для того, чтобы найти наилучшее решение, мы должны сначала ответить: “Почему мы хотим перечислить все поддерживаемые шифры?”. Здесь основное внимание уделяется аспекту безопасности, т.е. выяснению, является ли сервер уязвимым или нет. Следующий вопрос, на который нужно ответить, должен ли результат быть машиночитаемым, например, для дальнейшего использования в скрипте, или нет.

1. testssl.sh

  • CLI (Bash)
  • TLSv1. 3
  • Проверка на наличие известных уязвимостей
  • Автономная (не требуется установка)
  • Поддержка 370 шифров (по состоянию на версию 3.1), включая устаревшие шифры (не включены в новые версии openSSL)
  • Производит машинно-считываемые результаты (CSV и JSON)
  • (распараллеленная) пакетная обработка
  • Медленная

Возможно, наиболее важным преимуществом testssl.sh перед следующими альтернативами является использование набора двоичных файлов, которые предназначены для тестирования уязвимостей (читайте объяснение разработчика здесь ).

2. cipherscan

  • CLI (python)
  • No TLSv1.3
  • Self-contained
  • Limited cipher suites (hard-coded)
  • Produces machine-readable results (JSON)
  • Fast

3. nmap ssl-enum-ciphers

  • CLI (nmap скрипт)
  • No TLSv1.3
  • Self-contained
  • Limited cipher suites (hard-coded)
  • Checks for known vulnerabilities
  • No machine-readable results

  • Исчерпывающий обзор доступных инструментов см. в sslLabs Assessment Tools .

1
1
1
2015-09-26 11:24:14 +0000

SSLyze, первоначально по адресу https://github.com/iSECPartners/sslyze , теперь по адресу https://github.com/nabla-c0d3/sslyze . Он был упомянут в другой ответ , но без особых подробностей.

SSLyze основан на Python и работает на Linux/Mac/Windows из командной строки. Он использует OpenSSL, а на Windows поставляется в комплекте с копией протоколов OpenSSL.

Lists protocols, наборы шифров и ключевые детали, плюс тесты на некоторые распространенные уязвимости. Можно включить или отключить определенные проверки, получить больше данных или ускорить сканирование.

1
1
1
2014-05-25 13:34:41 +0000

Я написал инструмент, который делает именно это. Он называется tlsenum и доступен на GitHub .

[ayrx@division tlsenum]$ ./tlsenum.py twitter.com 443
TLS Versions supported by server: 3.0, 1.0, 1.1, 1.2
Supported Cipher suites in order of priority:
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_RC4_128_SHA
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_RC4_128_SHA
TLS_RSA_WITH_RC4_128_MD5
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_3DES_EDE_CBC_SHA

Вот пример вывода инструмента против twitter.com.

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

0
0
0
2014-11-04 20:45:59 +0000

Все эти ответы в порядке. Одна часть ответа может объяснить, зачем нам нужен инструмент для обнаружения списка серверов и не спрашивать напрямую в TLS, что сервер предоставляет все поддерживаемые наборы шифров, как это делает TLS клиент при подключении к серверу.

Answer - это то, что сервер не посылает список никогда , он просто выбирает в клиентском списке шифров шифр, который он хочет использовать, это способ написания протокола SSL/TLS : http://wiki. opensslfoundation.com/index.php/SSL_and\TLS_Protocols#Cipher_Suites

Вот почему клиент должен перечислить шифры, чтобы найти те, которые поддерживаются сервером, и для этого сделать по крайней мере одно новое стартовое рукопожатие (ClientHello) для каждого набора шифров.

0
0
0
2010-02-15 21:51:27 +0000

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

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

0
0
0
2016-03-02 10:02:12 +0000
0
0
0
2014-12-20 23:56:37 +0000

В процессе поиска чего-то, что делает AUTH TLS на FTP, я обнаружил этот инструмент: (https://labs.portcullis.co.uk/tools/ssl-cipher-suite-enum/)

Это perl скрипт, который в основном делает то, что делает скрипт оболочки hackajar, только более сложный.

Он также предлагает базовую оценку предлагаемых шифров и протоколов. Это немного похоже на инструменты SSL Labs, только для домашнего использования. :)

По умолчанию, он поддерживает только AUTH SSL на FTP, но простой поиск и замена может это исправить. В качестве бонуса, он также утверждает, что поддерживает SMTP с STARTTLS и RDP.

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

8
13
16
15
3