2017-05-09 85 views
0

當端點URL包含IP地址時,我的Java應用程序能夠使用https SSL連接連接到第三方應用程序。 現在,當IP地址更改爲主機名時,我得到「SSL握手異常」。 除此之外,沒有代碼更新或任何其他更改。 只有改變了所做的事情,就是多方會在端點URL中使用主機名,而不是IP地址。通過https連接時發生SSL握手異常

早些時候網址:https://10.0.0.1:5368/invoke/Upload.Accept/receiveReply 當前網址:https://service.serviceprovider.com:5368/invoke/Upload.Accept/receiveReply

任何想法是什麼原因造成這個問題以及如何解決它?

請讓我知道是否需要更多的細節。

下面是錯誤的堆棧跟蹤:

javax.net.ssl.SSLHandshakeException: Could not generate secret 
     at sun.security.ssl.DHCrypt.getAgreedSecret(DHCrypt.java:219) 
     at sun.security.ssl.ClientHandshaker.serverHelloDone(ClientHandshaker.java:1056) 
     at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:348) 
     at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1026) 
     at sun.security.ssl.Handshaker.process_record(Handshaker.java:961) 
     at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062) 
     at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375) 
     at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403) 
     at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387) 
     at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559) 
     at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) 
     at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153) 
     at com.etsalat.adapter.sadad.PaymentLoadAdapter.run(PaymentLoadAdapter.java:130) 
     at java.lang.Thread.run(Thread.java:748) 

    Caused by: java.security.NoSuchAlgorithmException: TlsPremasterSecret SecretKeyFactory not available 
     at javax.crypto.SecretKeyFactory.<init>(SecretKeyFactory.java:122) 
     at javax.crypto.SecretKeyFactory.getInstance(SecretKeyFactory.java:160) 
     at iaik.security.dh.DHKeyAgreement.engineGenerateSecret(Unknown Source) 
     at javax.crypto.KeyAgreement.generateSecret(KeyAgreement.java:648) 
     at sun.security.ssl.DHCrypt.getAgreedSecret(DHCrypt.java:217) 
+0

你可以改變的URL,並期望它與以前一樣工作。爲特定網址頒發SSL證書,如果更改了url,則必須爲新URL頒發新證書並配置您的應用程序以使用該證書。 –

+0

我的意思是你不能只是改變...... –

+0

@OleksandrShpota沒有解釋'不能產生祕密'。如果握手達到了「ServerHelloDone」,則證書被接受。 – EJP

回答

1

我以前有同樣的問題。

例外:如果您使用的數字簽名API沒有添加到您的應用程序使用的Java SDK中,則會發生「SecretKeyFactory不可用」。

將API添加到Java SDK: 1.導航到lib簽名文件夾,然後將API jar文件(例如:iaik_jce.jar)複製到/ jre/lib/ext。 2.導航到/ jre/lib/security,然後將以下內容添加到java.security security.provider.10 = iaik.security.provider.IAIK 注意:如果數字「10」正在被另一個條目使用,使用下一個可用號碼。

更多信息,請參閱:http://docs.oracle.com/cd/E61144_01/English/Install_and_Config/Automatic_Install_and_Config/helpmain.htm?toc.htm?89631.htm

+0

非常感謝分享解決方案..解決了我的問題! –