1. 程式人生 > >Cas單點登入配置SSL時遇到的javax.net.ssl.SSLPeerUnverifiedException問題的解決方法

Cas單點登入配置SSL時遇到的javax.net.ssl.SSLPeerUnverifiedException問題的解決方法

網上有很多資料介紹如何整合CAS單點登入產品。由於整合CAS需要預先在tomcat中配置SSL,而且還要在客戶端匯入證書,但是許多人按照網上介紹的操作操作卻發現以下問題:儘管配置了SSL後可以訪問也能登入但是在位址列輸入自己的Web應用的連線,自動跳到Cas登入頁面,登入成功後並沒有跳回到受保護頁面,而是報下面的異常:

<javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated>

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated

at com.sun.net.ssl.internal.ssl.SSLSessionImpl.getPeerCertificateChain

這是什麼原因呢?

首先簡單回顧一下網上介紹的操作步驟:

首先是生成server端的證書

keytool -genkey -alias tomcat -keyalg RSA (說明,提示姓名的時候輸入localhost而不是你的名字)

keytool -export -file server.crt -alias tomcat

C:/Documents and Settings/bzwang/.keystore檔案複製到tomcatconf目錄(bzwangwindows的當前使用者目錄,tomcat是要配置cas servertomcat,.keystore是和tomcatserver.xml

在同一目錄下。

然後server.xml中增加以下配置:

<Connectorport="8443" maxHttpHeaderSize="8192"

maxThreads="150" minSpareThreads="25" maxSpareThreads="75"enableLookups="false" disableUploadTimeout="true"acceptCount="100" scheme="https" secure="true"

clientAuth="false" sslProtocol="TLS"keystoreFile="conf/.keystore"keystorePass="changeit"/>

這是CAS 所在的tomcat的配置方式,server端環境配置完成。然後在客戶端JVM匯入證書,由於現在server端和client端都在一臺機器上,所以需要注意,實際環境中cas和客戶端應用是在不同機器上,匯入證書是在部署了web應用的那臺機器上執行的。網上介紹客戶端匯入證書的命令是:

keytool -import -keystore %JAVA_HOME%/jre/lib/security/cacerts -file server.crt -alias tomcat

客戶端應用的web.xml中如何配置CAS過濾器我就不講了,這裡重點要說的是為什麼用keytool –import 語句匯入證書卻仍然出現javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated之類的異常,問題是因為你機器上實際的JRE環境不是在JAVA_HOME裡的那個JRE,一般大家安裝JDK時都預設安裝了JDKJRE,例如我的機器上的jdk安裝在C:/jdk<chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">1.5.0</chsdate>_05JRE安裝在C:/jre1.5.0_05,所以除了執行上面的import指令外,還需要執行下面的指令:

keytool -import -keystore C:/jre<chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">1.5.0</chsdate>_05/lib/security/cacerts -file server.crt -alias tomcat

所以請大家一定要牢記,如果你的主機上有多個JRE的話,最好每個JRE路徑下都用keytool –import指令匯入一次,如果其他配置沒問題的話,做完這步一定