OpenSSL s#U客户端可以';t通过APR连接到Tomcat 7
我目前正在使用禁用SSLv3的APR连接器将我的Tomcat服务器升级到Tomcat 7。这是我的连接器:OpenSSL s#U客户端可以';t通过APR连接到Tomcat 7,ssl,tomcat7,sslv3,Ssl,Tomcat7,Sslv3,我目前正在使用禁用SSLv3的APR连接器将我的Tomcat服务器升级到Tomcat 7。这是我的连接器: <Connector port="8443" maxHttpHeaderSize="8192" maxThreads="150" enableLookups="false" disableUploadTimeout="true" acceptCount="100" scheme="https" secure="true
<Connector port="8443" maxHttpHeaderSize="8192"
maxThreads="150"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
SSLEnabled="true"
SSLProtocol="TLSv1"
SSLCertificateFile="${CP_ROOT}/security/tomcat.crt"
SSLCertificateKeyFile="${CP_ROOT}/security/tomcat.key" />
执行相同的操作,但强制TLSv1(-tls1
),我能够正确连接:
$ openssl s_client -connect casrept2.tc.columbia.edu:8443/cas/monitor.jsp -tls1
CONNECTED(00000003)
... cert chain, etc, etc
我想知道这是否是导致健康监视器失败的原因。不管是哪种方式,我都很好奇为什么我需要特别强制
-tls1
才能让它工作。我认为它应该自动协商正确的协议?您在s_客户机上使用什么版本的openssl
?如果是0.9.8系列,则默认为协议ssl2、ssl3、tls1(.0),这要求它使用ssl2格式的ClientHello(但其内容可以协商到tls1.0)。Tomcat/APR中仅指定tls1的openssl服务器(而不是默认的自动检测)将针对SSL3+格式协商或根据需要返回警报,但对于SSL2格式,它只是关闭TCP连接——至少在Windows上是“异常”关闭的使用RST,它会导致s_client
获取系统调用错误并显示您看到的消息。(虽然54是一个errno值,但我不记得在RST中看到过;您能说出什么操作系统吗?)
通过指定s_client-tls1
可以使它使用包含版本3.1=tls1.0的SSL3+格式,并且可以正常工作。如果改为使用-ssl3
,则它无法协商,但它确实会得到更具体的警报握手失败
,而不仅仅是TCP错误。如果您使用的是使用SSL3+格式并协商TLS1.0的-no\ssl2
,尽管这比-TLS1
更不方便
如果您对s_客户端
使用openssl 1.0.0或1.0.1系列,则它们应默认为minimum-SSL3和(因此)SSL3+hello格式并工作,除非在构建过程中发生异常情况
我不知道F5监视器在这里做什么——或者可以做什么——但如果它尝试SSL2格式hello,我也不会感到惊讶,因为它的理论是——或者在过去是——最大程度的互操作性。如果是这样,则会导致连接失败,这可以理解为服务器出现问题。您可以在服务器上(或附近)放置一个跟踪,如www.wireshark.org或类似的跟踪,查看F5到底发送了什么,并确认您的服务器使用RST进行响应。您用于s_客户端的是什么版本的openssl
?如果是0.9.8系列,则默认为协议ssl2、ssl3、tls1(.0),这要求它使用ssl2格式的ClientHello(但其内容可以协商到tls1.0)。Tomcat/APR中仅指定tls1的openssl服务器(而不是默认的自动检测)将针对SSL3+格式协商或根据需要返回警报,但对于SSL2格式,它只是关闭TCP连接——至少在Windows上是“异常”关闭的使用RST,它会导致s_client
获取系统调用错误并显示您看到的消息。(虽然54是一个errno值,但我不记得在RST中看到过;您能说出什么操作系统吗?)
通过指定s_client-tls1
可以使它使用包含版本3.1=tls1.0的SSL3+格式,并且可以正常工作。如果改为使用-ssl3
,则它无法协商,但它确实会得到更具体的警报握手失败
,而不仅仅是TCP错误。如果您使用的是使用SSL3+格式并协商TLS1.0的-no\ssl2
,尽管这比-TLS1
更不方便
如果您对s_客户端
使用openssl 1.0.0或1.0.1系列,则它们应默认为minimum-SSL3和(因此)SSL3+hello格式并工作,除非在构建过程中发生异常情况
我不知道F5监视器在这里做什么——或者可以做什么——但如果它尝试SSL2格式hello,我也不会感到惊讶,因为它的理论是——或者在过去是——最大程度的互操作性。如果是这样,则会导致连接失败,这可以理解为服务器出现问题。您可以在服务器上(或附近)放置一个跟踪,如www.wireshark.org或类似的跟踪,查看F5到底发送了什么,并确认服务器用RST响应。看起来您是对的。我在我的Mac电脑上使用了openssl,它是版本0.9.8za
。我将Tomcat切换到NIO连接器,并确保将SSLv2Hello
添加到已接受的协议中,监视器重新启动,因此它显然依赖于SSLv2Hello
请求。我已经搜索了一种方法来为Tomcat/APR启用SSLv2Hello
,但似乎找不到任何方法。@Teddy(和7类似)说SSLProtocol可以使用带加号的多个值。我没有看过代码,但我认为这必须使用OpenSSL中的“SSLv23”(不必担心名称),以“OP_NO”位作为补充,在这种情况下,包括SSLv2将启用SSL2格式,但如果密码列表不包含SSL2密码,则将拒绝实际的仅SSL2客户端,OpenSSL>=1.0.0默认值没有,但是声明的Tomcat默认值有,因此为了安全起见,您也应该更改它。看起来您是对的。我在我的Mac电脑上使用了openssl,它是版本0.9.8za
。我将Tomcat切换到NIO连接器,并确保将SSLv2Hello
添加到已接受的协议中,监视器重新启动,因此它显然依赖于SSLv2Hello
请求。我已经搜索了一种方法来为Tomcat/APR启用SSLv2Hello
,但似乎找不到任何方法。@Teddy(和7类似)说SSLProtocol可以使用带加号的多个值。我没有看过代码,但我认为这必须使用OpenSSL中的“SSLv23”(不必担心名称),以“OP_NO”位作为补充,在这种情况下,包括SSLv2将启用SSL2格式,但如果密码列表不包含SSL2密码,则将拒绝实际的仅SSL2客户端,OpenSSL>=1.0.0默认值没有,但声明了Tomcat默认值
$ openssl s_client -connect casrept2.tc.columbia.edu:8443/cas/monitor.jsp -tls1
CONNECTED(00000003)
... cert chain, etc, etc