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

Posted

技术标签:

【中文标题】无需 ssl 重新协商的 ssl 客户端身份验证【英文标题】:ssl client authentication without ssl re-negotiation 【发布时间】:2011-09-26 08:48:32 【问题描述】:

在客户端,我在 jdk5u22 上有 Apache HTTP 客户端。在服务器端,我在 jdk6u27 上有 tomcat。

使用此设置,如果我尝试 SSL 客户端身份验证(2 路 SSL),则会导致服务器上出现“javax.net.ssl.SSLHandshakeException: Insecure renegotiation is not allowed”,并且握手失败。如果我在服务器上设置系统属性 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 客户端身份验证。

问候, 小普雷斯

【问题讨论】:

【参考方案1】:

根据 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 文件的 login-config 部分。

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

希望这对某人有所帮助。

问候, 小

【讨论】:

以上是关于无需 ssl 重新协商的 ssl 客户端身份验证的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Apache mod_ssl 变量验证 URI 格式的主题备用名称的内容?

不是很明白ssl双向认证和单向认证有啥区别吗?

WCF 身份验证错误

SSL安全证书的实现机制

Jboss EAP 7 - REST API客户端的动态SSL身份验证

https 客户端证书注销/重新登录