我正在尝试使用Tomcat 7 + SSL从AWS中的一台服务器(A)连接到AWS中的另一台服务器(B)。
服务器A:
服务器B:
我在服务器A中尝试以下命令:
curl https://Server.B -v
我得到以下例外:
* Connection #0 to host test.salespredict.com left intact
yakirm@ip-10-214-10-178:~$ curl https://Server.B.com -v
* Rebuilt URL to: https://Server.B.com/
* Hostname was NOT found in DNS cache
* Trying 54.245.81.*...
* Connected to Server.B.com (54.245.81.*) port 443 (#0)
* successfully set certificate verify locations:
* CAfile: none
CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* Unknown SSL protocol error in connection to Server.B.com:443
* Closing connection 0
curl: (35) Unknown SSL protocol error in connection to Server.B.com:443
我试图用OpenSSL检查
openssl s_client -connect Server.B.Address:443
我得到以下结果:
CONNECTED(00000003)
140284858304160:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:184:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 307 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---
如果我正在尝试从我自己的计算机(OS X Mavericks)进行连接,那么curl成功但openssl命令会返回相同的颜色。
顺便说一句
如果我正在尝试:
curl https://Server.B -v -ssl3
它可以在服务器A上运行,但我不想指定SSL协议。
修改
服务器B - Tomcat配置:
<Connector SSLEnabled="true" acceptCount="100" clientAuth="false" disableUploadTimeout="true"
enableLookups="true" maxThreads="200" port="443" keystoreFile="/var/lib/tomcat7/conf/Path/Path_keystore" keystorePass="******" protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https"
secure="true" sslProtocol="TLS" />
答案 0 :(得分:4)
设置--sslv3与未设置之间的主要区别在于客户端不会在初始ClientHello消息中宣布支持高于SSL3.0的版本。通常客户端和服务器都同意双方支持的版本,因此客户端宣布它支持的最佳SSL版本是正确的。
看起来在你的情况下,你遇到的情况是,服务器(或某些中间件)不仅不能说更新的TLS版本,而且还无法正确处理SSL 3.0,因为它会破坏客户宣布支持更新的版本。由于服务器软件本身看起来不老,你有一个非常奇怪的服务器设置或一些无法处理正确TLS的中间件(即负载均衡器,防火墙......)。
如果您发布有关服务器的更多信息,则可能会提供更多信息。您也可以针对SSLLabs检查服务器。
编辑:看起来服务器支持TLS1。*但只是在客户端提供时断开连接
ECDHE-RSA-AES256-SHA密码。使用openssl s_client -cipher 'ALL:!ECDHE-RSA-AES256-SHA'
与curl --ciphers 'ALL:!ECDHE-RSA-AES256-SHA'
一样有效。我认为这是服务器端的一个问题 - 也许你已经配置了密码,实际上这些密码在tomcat中不受SSL实现的支持(这不是OpenSSL,因为Java有自己的实现),Java尝试使用它们时会出现问题