我試圖從Web服務請求客戶端提交客戶端證書的數據。服務器使用SSL進行所有通信,並使用自簽名證書。我向Netbeans提供了該服務的WSDL文件,並生成了帶有wsimport
的客戶端代碼。將Glassfish配置爲使用雙向SSL的Web服務的客戶端
當我的客戶端代碼寫入常規Java應用程序時,我沒有任何問題;我將信任庫設置爲包含服務器證書的cacerts
文件,將密鑰庫設置爲服務器管理員以JKS格式提供的包含2個密鑰的文件 - 客戶機私鑰和服務器的公鑰,構建請求對象,以及發送請求。
將問題轉移到企業Java環境時出現問題。要求規定代碼必須是在Glassfish應用程序服務器上運行的Enterprise Archive內的Enterprise JavaBean。看起來Glassfish有自己的安全設置來覆蓋JVM的設置。當包含Web服務調用的EJB方法運行時,SSL協商失敗:javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
。我不知道如何像我的JVM的設置一樣設置Glassfish的安全設置,任何人都可以解釋Glassfish的安全設置嗎?我所做的研究僅顯示瞭如何將Glassfish設置爲Web服務服務器,而不是Web服務客戶端。
我有一個服務器的.cer證書文件,我通過使用Java的keytool
將其添加到默認的cacerts
文件中,將它添加到我的信任存儲中。 如果將cacerts
文件修改爲InstallCert
以包含自簽名證書,請按照http://blog.johnryding.com/post/1548502059/acquire-an-ssl-certificate-for-your-java-programs-in-win的步驟更好地修改?
我有存儲在$ JAVA_HOME/jre/lib/security和$ JAVA_HOME/lib/security中的信任存儲文件,密鑰存儲文件以及.cer證書文件和.p12瀏覽器證書。
我使用Netbeans 6.9.1和Glassfish 3.1 Final。相關的一段代碼如下,從我的EJB中複製而來。最後一行發生異常。
System.setProperty("javax.net.ssl.trustStore", "C:\\jssecacerts"); System.setProperty("javax.net.ssl.trustStorePassword", "changeit"); System.setProperty("javax.net.ssl.keyStore", "C:\\userCertificate.jks"); System.setProperty("javax.net.ssl.keyStorePassword", "password");
RequestObject request = new RequestObject;
request.setQuery("some data");
request.setUsername("user");
request.setPassword("pass");
Service service = new Service();
Endpoint port = service.getWebServicePort();
Result result = port.specificWebServiceMethod(request);
你解決了這個問題嗎?我面對同樣的情況。如果你有東西,請提供詳細信息。 – mahesh 2011-11-18 11:43:12