2011-09-26 179 views
4

在客户端,我在jdk5u22上有Apache HTTP客户端。在服务器端,我在jdk6u27上有tomcat。没有ssl重新协商的ssl客户端认证

使用此设置,如果我尝试SSL客户端身份验证(2路SSL),则会在服务器上导致“javax.net.ssl.SSLHandshakeException:不允许重新协商”,并且握手失败。如果我在服务器上设置了系统属性sun.security.ssl.allowUnsafeRenegotiation = true和sun.security.ssl.allowLegacyHelloMessages = true,它会成功。

根据链接http://www.oracle.com/technetwork/java/javase/documentation/tlsreadme2-176330.html这是因为JRE6u27有RFC 5746实现和JRE5u26下面没有这个,所以两者都不兼容。不幸的是5u22是最新免费的Java 5版本。所以我想知道是否可以在没有ssl重新协商的情况下进行SSL客户端身份验证。

问候, Litty Preeth

回答

4

作为每红帽站点https://access.redhat.com/kb/docs/DOC-20491#Renegotiations_disabled_in_Apache_Tomcat的Tomcat可要求客户使用客户端证书的认证在某些配置中重新协商,例如,在配置: 不需要客户端证书在初始连接时,例如: 1.使用JSSE的HTTPS连接器的clientAuth属性设置为 false。或者使用 的HTTPS连接器的SSLVerifyClient属性将OpenSSL设置为无。 AND 2. Web应用程序在 应用程序的web.xml文件的login-config部分中指定CLIENT-CERT身份验证方法。

因此,为了避免在tomcat中重新协商,只需通过为ssl设置clientAuth =“true”来使整个站点安全,而不仅仅是其中的一部分。

希望这可以帮助别人。

Regards, Litty