在客户端,我在 jdk5u22 上安装了 Apache HTTP 客户端。在服务器端,我在 jdk6u27 上有 tomcat。
使用此设置,如果我尝试 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 客户端身份验证。
问候, 小普瑞思
最佳答案
根据 redhat 站点 https://access.redhat.com/kb/docs/DOC-20491#Renegotiations_disabled_in_Apache_Tomcat : Tomcat 可能会要求客户端使用客户端证书身份验证在某些配置中重新协商,例如,配置中: 初始连接不需要客户端证书,例如: 1.使用JSSE的HTTPS连接器的clientAuth属性设置为 错误的。或者使用 HTTPS 连接器的 SSLVerifyClient 属性 OpenSSL 设置为无。 和 2. Web 应用程序在中指定 CLIENT-CERT 身份验证方法 应用程序的 web.xml 文件的登录配置部分。
因此,为了避免在 tomcat 中重新协商,只需通过为 ssl 设置 clientAuth="true"来确保整个站点的安全,而不仅仅是其中的一部分。
希望这对某人有帮助。
问候, 小
关于java - 无需 ssl 重新协商的 ssl 客户端身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7552710/