2011-09-26 180 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