Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenSSL s#U客户端可以';t通过APR连接到Tomcat 7_Ssl_Tomcat7_Sslv3 - Fatal编程技术网

OpenSSL s#U客户端可以';t通过APR连接到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

我目前正在使用禁用SSLv3的APR连接器将我的Tomcat服务器升级到Tomcat 7。这是我的连接器:

<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