天天看點

【轉】javax.net.ssl.SSLHandshakeException(Cas導入證書)

本文轉自:http://my.oschina.net/laiwanshan/blog/159057

一.報錯: javax.net.ssl.SSLHandshakeException

二.原因分析:

CAS部署時,常常要涉及到HTTPS的證書釋出問題。由于在實驗環境中,CAS和應用服務常常是共用一台PC機,它們跑在相同的JRE環境和Tomcat伺服器上,是以忽略了證書的實際用途,一旦将CAS和應用分别部署在不同的機器上時,就暈了! 

這裡假設如下實驗環境來說明相應的部署  

機器A: 部署CAS服務  

機器B: 部署OA應用 

機器C: 使用者浏覽器端 

1.由機器A上生成.keystore的證書檔案,證書頒發者是機器A的完全域名 

2.機器A上用于部署CAS的Tomcat的server.xml檔案中定義HTTPS的配置,指向.keystore檔案證書 

3.從.keystore中導出的憑證檔案要copy到機器B上,并導入機器B的JRE環境的證書庫中 

4.機器B上部署OA的Tomcat必須指定運作在導入憑證JRE環境上,而不是JDK,這點常有人搞錯。 

三.導入證書步驟:

1.找到JRE

1)機器B的OA應用直接部署在Tomcat

>>>獨立的JRE

如果你在安裝JDK時,選擇了同時安裝JRE,那麼系統是跑在獨立的JRE上。

為什麼?因為在安裝獨立JRE的時候程式自動幫你把jre的java.exe添加到了系統變量中,驗證的方法很簡單,大家看到了系統環境變量的 path最前面有“%SystemRoot%system32;%SystemRoot%;”這樣的配置,那麼再去Windows/system32下面去看看吧,發現了什麼?有一個java.exe。 

>>>JDK裡的JRE

如果沒有同時安裝獨立JRE,那麼系統跑在JDK自帶的JRE上。

2)機器B的OA應用在MyEclipse中開發測試中

MyEclipse-右鍵project-Java Build Path-Libraries-輕按兩下JRE-一般是Workspace default JRE;

MyEclipse-windows-Preferences-Java-Installed JREs-右邊有Myeclipse預設自帶的JDK,輕按兩下即可查到JRE home;

2.到機器A拷貝證書xxx.cer檔案到機器B

3.導入指令

cmd進入指令行視窗;

cd進入JRE目錄\lib\security;

keytool -import -alias cacerts -keystore JRE目錄\lib\security\cacerts -file 證書目錄\xxx.cer -trustcacerts;

提示輸入密碼:changeit;

确定:y

4.如果keytool用不了,檢視下path,classpath是否配置正确。