java - 无需 ssl 重新协商的 ssl 客户端身份验证

标签 java ssl httpclient authentication

在客户端,我在 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/

相关文章:

java - 使用摇一摇功能打开不同的 Activity

java - 使用 RestTemplate 的 Spring 4.0.0 基本身份验证

java - SSL 证书升级导致问题

java - 找不到属性文件 ReloadableResourceBundleMessageSource 错误

java - 安卓工作室 : Project successfully compiled but can't access Google Play Services on device

ssl - 如何使用 node-opcua 客户端信任自签名服务器证书

java.lang.IllegalArgumentException : Bad sequence size 异常

VeriSign 签名证书中的 Java SSLHandshakeException

android - 应用程序在 java.net.SocketTimeoutException : timeout (Kotlin, Retrofit 上崩溃

java - 使用 Apache HTTPAsyncClient 针对每个 HTTPS 请求自定义 SSLContext