2013-07-30 144 views
2

我想一個驗證SSL證書添加到我的Java應用程序。 Java應用程序充當轉換服務。它在特定的URL上監聽端口。它通過字符串查找和替換來轉換請求的正文。 Java應用程序然後POST,將數據轉換爲內部服務。驗證的SSL證書異常觸發異常,當Java應用程序運行

我添加了一個自簽名的SSL證書的應用程序。然而,這不太好。在SoapUI中它工作正常。當我嘗試使用basicHttpBinding的和HttpWebRequest的C#應用​​程序調用它,我得到以下錯誤:

Unhandled Exception: System.Net.WebException: 
The underlying connection was closed: 
Could not establish trust relationship for the SSL/TLS secure channel. ---> 
System.Security.Authentication.AuthenticationException: The remote certificate 
is invalid according to the validation procedure. 

所以我刪除了證書,並加入了簽名的證書。此證書當前附加到java應用程序正在偵聽的域。當我嘗試和運行Java應用程序,我得到以下異常:

java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing 
implementation (algorithm: Default, provider: SunJSSE, class: 
com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl) 

Java代碼,設置密鑰和信任存儲區:

loadConfig(); 
loadTransforms(); 

// Set Trust/Key stores 
System.setProperty("javax.net.ssl.keyStore", keyFile); 
System.setProperty("javax.net.ssl.keyStorePassword", keyPassword); 
System.setProperty("javax.net.ssl.trustStore", keyFile); 
System.setProperty("javax.net.ssl.trustStorePassword", keyPassword); 

TransformationServer server = new TransformationServer(); 
server.runServer(mode); 

存儲證書的密鑰和信任存儲中。有沒有人有任何想法?

+0

什麼是「已驗證SSL證書」? – EJP

+0

那麼我不知道你是否稱它爲已驗證。但它是由第三方驗證(或驗證)的非自簽名證書。 –

+0

我不明白。您在您的問題中聲明它是自簽名的。現在你說(我認爲)它不是。證書可以由證書頒發機構*簽名*,如果這就是你的意思。請澄清你的問題。 – EJP

回答

0

走遍不同的解決方案。我已將以下配置添加到WinForm應用程序。

<system.net> 
    <settings> 
     <httpWebRequest useUnsafeHeaderParsing="true" /> 
    </settings> 
</system.net> 

因此,Java仍在使用自簽名證書。

編輯: 有一些問題,在請求頭中的行尾。它不符合一些http RFC標準。