Найти версию SSL после рукопожатия в OpenSSL...
Если я правильно разбираю то, что вы хотите... вы хотите, чтобы версия протокола была напечатана openssl s_client
:
$ openssl version
OpenSSL 1.1.0b 26 Sep 2016
$ openssl s_client -connect www.google.com:443 -servername www.google.com
CONNECTED(00000005)
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
verify error:num=20:unable to get local issuer certificate
Server did acknowledge servername extension.
---
...
---
New, TLSv1.2, Cipher is ECDHE-RSA-CHACHA20-POLY1305
Server public key is 2048 bit
Secure Renegotiation IS supported
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
...
Первое сообщение "Новое, TLSv1.2" сообщает вам о шифре. То есть, когда ECDHE-RSA-CHACHA20-POLY1305
впервые появился в TLS. В случае с ECDHE-RSA-CHACHA20-POLY1305
набор шифров впервые появился в TLS 1.2.
Исходный код для s_client
находится по адресу <openssl src>/apps/s_client.c
. Код, ответственный за OpenSSL 1.0.2, находится в строке 2210:
/* line 2210 */
c = SSL_get_current_cipher(s);
BIO_printf(bio, "%s, Cipher is %s\n",
SSL_CIPHER_get_version(c), SSL_CIPHER_get_name(c));
...
Во втором сообщении "Протокол: TLSv1.2" указывается версия протокола, используемая при обмене ключами и последующем выборе шифра и массовой передаче.
Код, ответственный за OpenSSL 1.0.2, находится <openssl src>/ssl/ssl_txt.c
вокруг строки 105:
/* line 105 */
int SSL_SESSION_print(BIO *bp, const SSL_SESSION *x)
{
unsigned int i;
const char *s;
if (x == NULL)
goto err;
if (BIO_puts(bp, "SSL-Session:\n") <= 0)
goto err;
if (x->ssl_version == SSL2_VERSION)
s = "SSLv2";
else if (x->ssl_version == SSL3_VERSION)
s = "SSLv3";
else if (x->ssl_version == TLS1_2_VERSION)
s = "TLSv1.2";
else if (x->ssl_version == TLS1_1_VERSION)
s = "TLSv1.1";
else if (x->ssl_version == TLS1_VERSION)
s = "TLSv1";
else if (x->ssl_version == DTLS1_VERSION)
s = "DTLSv1";
else if (x->ssl_version == DTLS1_2_VERSION)
s = "DTLSv1.2";
else if (x->ssl_version == DTLS1_BAD_VER)
s = "DTLSv1-bad";
else
s = "unknown";
if (BIO_printf(bp, " Protocol : %s\n", s) <= 0)
goto err;
...
}
Я хочу узнать протоколы, поддерживаемые целью, но проблема в том, что их довольно много веб-сайтов, которые не поддерживают определенную версию, но когда я выполнил рукопожатие ...
Это другая проблема. Вы должны посмотреть исходный код для sslscan
на странице SSLScan – быстрый сканер SSL. чтобы увидеть, как это работает. Sourceforge кажется заброшенным. В нем отсутствует SNI и другие новые функции, такие как безопасное согласование и ALPN.
Вы можете попробовать это sslscan
с GitHub: rbsec/sslscan. GitHub активно поддерживается и, кажется, более актуален.
пример: я передал версию: TLSVersion.TLSopenssl s_client
2, но рукопожатие выполняется с использованием TLSv1_0, потому что он не поддерживает TLSVersion.TLSopenssl s_client
2
Этого не произойдет. TLS указывает только одну версию протокола. Идея заключается в том, чтобы попробовать TLS 1.2. Если это не удается, вы возвращаетесь к TLS 1.1. Если это не удается, вы возвращаетесь к TLS 1.0. До бесконечности.
Подход «попробуй и откажись» является причиной RFC 7504, Ценность набора шифров сигнализации TLS Fallback (SCSV) для предотвращения Атаки на понижение версии протокола. Это был ужасный помощник от толпы Browser. См., например, Последний вызов: (значение комплекта шифров резервной сигнализации TLS) (SCSV) для предотвращения атак с понижением версии протокола) до предлагаемого стандарта.
TLS не поддерживает ряд версий протокола, как думают многие. Мы несколько раз пытались его изменить. См., например, новый механизм согласования версии TLS. .
person
jww
schedule
15.10.2016