SSL客户端身份验证而不进行SSL重新协商

4
在客户端,我使用的是jdk5u22上的Apache HTTP客户端。在服务器端,我使用的是jdk6u27上的tomcat。
通过这个设置,如果我尝试进行SSL客户端身份验证(双向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
1个回答

4
根据redhat网站https://access.redhat.com/kb/docs/DOC-20491#Renegotiations_disabled_in_Apache_Tomcat的说法: 在某些配置下,例如使用客户端证书身份验证的配置中,Tomcat可能会要求客户端重新协商,例如: 在初始连接时不需要客户端证书,例如当: 1.使用JSSE的HTTPS连接器的clientAuth属性设置为false。或者使用OpenSSL的HTTPS连接器的SSLVerifyClient属性设置为none。 和 2. Web应用程序在应用程序的web.xml文件的login-config部分指定了CLIENT-CERT身份验证方法。
因此,为了避免在Tomcat中重新协商,请通过将ssl的clientAuth =“true”来使整个站点安全而不仅仅是一部分。
希望这能帮助某些人。
问候, Litty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接