我知道這個問題可能看起來是重複的,但我瀏覽過的所有線程似乎都沒有解決或幫助我解決問題。glassfish v3「無法找到要求的目標的有效認證路徑」
我一直在嘗試幾天來創建一個自簽名的SSL證書。需要證書才能訪問必須通過HTTPS提供WSDL文件的glassfish域。我在Solaris 10上使用Glassfish 3.1.1,它不使用默認的SSL端口(443)。目前,它正在使用8181.
SSL證書非常關注用於訪問它們的主機名。證書需要在多個網絡區域內有效;因此glassfish域擁有多個與之相關的不同IP。據我所知,主機名稱(我們稱之爲foobar)無法在服務器之外訪問。
經過大量研究後,我決定需要生成一個帶有使用者替代名稱的自簽名證書,指明這些IP。以下是我採取的步驟。
使用SAN生成證書最簡單的方法是下載Java 7,其中包含具有此功能的keytool實用程序。從Oracle網站下載JDK 1.7.0_04並將其安裝在foobar中。
導航到glassfish domain1配置目錄,例如, /選擇/ glassfish3 /的glassfish /域/域1 /配置
(以下是從Oracle Glassfish的3.1文檔修改:http://docs.oracle.com/cd/E18930_01/html/821-2435/ablqz.html)
生成在密鑰庫中的證書。注意:每個glassfish域都有自己的密鑰存儲區;該證書下面針對domain1的產生,這是與HTTPS端口8181
keytool -genkey -alias foobar -keyalg RSA -dname "CN=foobar, OU=xxxxxxx xxxx, O=xxxxxxxxxx, L=xxxxx xxx, S=xx, C=xx" -ext "SAN=IP:12.34.56.78,IP:99.88.77.66" -keypass changeit -storepass changeit -validity 3650 -keystore keystore.jks
導出所生成的證書的文件(在這種情況下,foobar.cer)
keytool -export -alias foobar -storepass changeit -file foobar.cer -keystore keystore.jks
相關聯
將證書導入cacerts作爲可信證書。這樣做兩次,一次爲Glassfish cacerts文件,一次爲foobar上的Java JRE cacerts文件。
keytool -import -v -trustcacerts -alias foobar -file foobar.cer -keypass changeit -storepass changeit -keystore cacerts.jks
在/ usr/JAVA/JRE/lib/security中:
keytool -import -v -trustcacerts -alias foobar -file foobar.cer -keypass changeit -storepass changeit -keystore cacerts
以防萬一,我也下載並導入證書到在Windows工作站中的Java JRE的cacerts文件將訪問HTTPS(可能不是必需的)。
在C:\ Program Files文件\的Java \ JRE \ lib \ security中:
keytool -import -v -trustcacerts -alias foobar -file foobar.cer -keypass changeit -storepass changeit -keystore cacerts
重新啓動的GlassFish域1。
asadmin restart-domain domain1
重啓完成後,測試連接。在我的情況下,我去我的Windows工作站,在那裏我已經加載了Netbeans的Java應用程序。我通過HTTPS運行需要WSDL的測試,並輸入
https://12.34.56.78:8181
作爲源。
這給了我下面的錯誤:
2012-06-05 10:25:32,132 WARN utilities.ConnectionManager - Could not connect to url https://12.34.56.78:8181/foobar/WebService?wsdl: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
如果我不是使用的域爲默認Glassfish的SSL證書,我反而得到指示沒有使用者替代名稱是否存在錯誤。這就是爲什麼我首先經歷了再生證書的麻煩。
據我所知,導入證書作爲可信CA證書應該解決這個「無法找到有效的證書路徑」的錯誤。我承認我並不是一個網絡專家,但是迄今爲止,我的所有研究都表明了這一點。我不確定這裏的問題是否因爲我使用非標準的SSL端口(必須添加:8181可能導致與SAN IP不匹配)。我還沒有嘗試過。但是沒有辦法在CN或SAN中爲IP:端口組合生成自簽名證書嗎?
謝謝...幫助將不勝感激!
P.S.我可以根據需要提供應用程序代碼。