2015-10-15 2 views
0

Недавно мы создали новый сервер Windows 2012 с tomcat 7.0.57 и java-версией «1.8.0_45».«SSL23_GET_SERVER_HELLO: неизвестный протокол» После обновления сервера

Я получаю ниже ошибки при подключении к клиенту openssl. Но отлично работает от IE.

Новый сервер:

OpenSSL> s_client -connect xxx.xxx.xxx.xxx:443 
Loading 'screen' into random state - done 
CONNECTED(00000130) 
5724:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:.\ssl\s 
23_clnt.c:601: 
OpenSSL> 

Старый сервер: (подключение штрафа)

OpenSSL> s_client -connect yyy.yyy.yyy.yyy:443 
Loading 'screen' into random state - done 
CONNECTED(00000114) 
depth=1 /C=XX/O=YYYY CA1 
verify error:num=19:self signed certificate in certificate chain 
verify return:0 
--- 
Certificate chain 
......... 
SSL handshake has read 3064 bytes and written 282 bytes 
--- 
New, TLSv1/SSLv3, Cipher is EDH-RSA-DES-CBC3-SHA 
Server public key is 2048 bit 
Compression: NONE 
Expansion: NONE 
SSL-Session: 
    Protocol : TLSv1 
Cipher : EDH-RSA-DES-CBC3-SHA 
....... 

Может ли одно сказать, почему ведет себя, как это ??

Новый сервер: для Windows 2012 R2/Java версии "1.8.0_45"/Tomcat 7.0.57

Старый сервер: Windows 2003/Java версии "1.6.0_31"/Tomcat 6,0

Клиент: Windows 7/Java 1.7.0_75

ответ

1

Оба Java 1.8 и Tomcat 7.0.57 and later отключить SSLv3 по умолчанию, Java 1.8 отключен SSLv2Hello по умолчанию, и OpenSSL использует SSLv2Hello и SSLv3 по умолчанию, поэтому существует несоответствие протокола, и обе стороны не могут надлежащим образом завершить аутентификацию SSL/TLS.

Если вы хотите установить соединение с OpenSSL s_client, используйте переключатель -tls1 (или -tls1_1 и т. Д.), И вы должны быть в состоянии подключиться.

Если вы хотите, чтобы повторно включить SSLv3 в Tomcat, читать Configuration section of the Tomcat Users' Guide, в частности, об атрибутах sslEnabledProtocols и sslProtocol.

EDIT 2015-10-19 16:40 Америка/New_York

Вышесказанное относится к разъемам Java на основе, которые используют JVM встроенный JSSE для криптографии. Если вы используете родной соединитель APR, будет использоваться OpenSSL. Поведение OpenSSL по умолчанию будет зависеть от установленной вами версии ... по мере выпуска более поздних версий, по умолчанию были пересмотрены протоколы по умолчанию.

Вы всегда можете использовать конфигурацию Tomcat для включения любого протокола, если базовая библиотека (JSSE или OpenSSL) поддерживает протокол.

OpenSSL будет использовать точное рукопожатия специфичные для протокола, если вы выбираете один поддерживаемый протокол (например TLSv1 -> TLSv1 рукопожатие, TLSv1.1 -> TLSv1.1 рукопожатие и т.д.), но будет использовать SSLv2hello если у вас есть более одного протокола (например, SSLProtocol="TLSv1+TLSv1.1"). Это описано в атрибуте SSLProtocol для Tomcat's HTTP connector.

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

+0

Предполагая, что JSSE (не «native» = APR) Java 8 или 7 JSSE по умолчанию отключает SSLv2Hello на * клиенте *, но не * сервере *; по вашей ссылке Tomcat, по-видимому, отключает ее. OpenSSL * commandline * 's_client' по умолчанию имеет формат v2 через 0,9,8, v3 от 1,0,0 до; источник информации в сообщении об ошибке OP указывает, что он работает с 0.9.8 с патча j на l с 2009 года. 0.9.8 и 1.0.0 не реализуют TLS1.1 или 1.2 и, следовательно, не имеют флага '-tls1_1', а' - tls1_2' или версии '-no_'. ... –

+0

... Все версии по умолчанию * предлагают * как минимум 1.0 даже в формате v2 (1.0.1 и выше предложение 1.2), но JSSE 8 с SSLv2Hello off отклоняет любое предложение v2, с использованием предупреждения 40 с версией 1.2 (таким образом, формат v3), что клиент 0.9.8 считается недействительным. Интригующе, JSSE ** 7 ** предупреждает с версией 1.0, которую OpenSSL понимает, но даже так 40 = handshake_failure не очень полезно. (OpenSSL * library * не является дефолтом вообще, это зависит от приложения.) Те, кто сказал, согласны с заключением. –

+0

Команда openssl, работающая с -tls (s_client -connect xxx.xxx.xxx.xxx:443 -tls). Но когда я попытался включить SSlv3 в сам сервер tomcat, установив sslProtocol = "SSLv3", команда openssl не работает (без -tls). По моему пониманию. Если мы включим SSLv3 на сервере, openssl должен работать без -tls. –

Смежные вопросы