2012-06-05 56 views
0

我知道這個問題可能看起來是重複的,但我瀏覽過的所有線程似乎都沒有解決或幫助我解決問題。glassfish v3「無法找到要求的目標的有效認證路徑」

我一直在嘗試幾天來創建一個自簽名的SSL證書。需要證書才能訪問必須通過HTTPS提供WSDL文件的glassfish域。我在Solaris 10上使用Glassfish 3.1.1,它不使用默認的SSL端口(443)。目前,它正在使用8181.

SSL證書非常關注用於訪問它們的主機名。證書需要在多個網絡區域內有效;因此glassfish域擁有多個與之相關的不同IP。據我所知,主機名稱(我們稱之爲foobar)無法在服務器之外訪問。

經過大量研究後,我決定需要生成一個帶有使用者替代名稱的自簽名證書,指明這些IP。以下是我採取的步驟。

  1. 使用SAN生成證書最簡單的方法是下載Java 7,其中包含具有此功能的keytool實用程序。從Oracle網站下載JDK 1.7.0_04並將其安裝在foobar中。

  2. 導航到glassfish domain1配置目錄,例如, /選擇/ glassfish3 /的glassfish /域/域1 /配置

(以下是從Oracle Glassfish的3.1文檔修改:http://docs.oracle.com/cd/E18930_01/html/821-2435/ablqz.html

  1. 生成在密鑰庫中的證書。注意:每個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

  2. 導出所生成的證書的文件(在這種情況下,foobar.cer)

    keytool -export -alias foobar -storepass changeit -file foobar.cer -keystore keystore.jks

  3. 相關聯
  4. 將證書導入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

  5. 以防萬一,我也下載並導入證書到在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

  6. 重新啓動的GlassFish域1。

    asadmin restart-domain domain1

  7. 重啓完成後,測試連接。在我的情況下,我去我的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.我可以根據需要提供應用程序代碼。

回答

1

我有這個問題已經有相當長的一段時間了。

我無法如上所述解決它,所以我最終訂購了來自公共CA的SSL證書。

我遇到了Glassfish(3.1.1)和SSL的一個值得注意的怪癖。無論出於何種原因,每個域至少需要存在一個未啓用SSL的網絡偵聽器,否則在訪問啓用SSL的Web服務URL時會出現證書錯誤。

所以說我在8080和8181上有一個監聽器。如果兩個都啓用了SSL,那麼證書將不起作用。如果SSL從8080中刪除,則連接到監聽器8181的證書將起作用。

0

我認爲問題是,去cacerts的證書必須有一個非常具體的別名(在3.1.1.2它是glassfish實例)

相關問題