2015-09-28 88 views
0

我有SSL客戶端證書。它正在與我的應用程序一起工作,直到最近發生的某個Java更新(也許早在一年之前)。它適用於Web瀏覽器。它適用於捲曲。如何在Java 8.31上使用客戶端證書

例如,我可以做到這一點,它是罰款:

curl --cert example.pem https://example.net

現在我不能得到這個證書與Java的工作。我已經盡力嘗試一個非常小的應用程序,如來自https://gist.github.com/4ndrej/4547029的SSLPoke

將證書放入ControlPanel的客戶端證書中並沒有這樣做。

導入的.pem到密鑰庫中,然後在該密鑰庫指向與-Djavax.net.ssl.trustStore.keystore沒有做到這一點。

我得到的Java應用的是:

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

所以我無法弄清楚什麼是錯的 - 我調用java的方法是什麼?我要放證書的地方?我輸入證書的方式?

使用-Djava.security.debug=all的調試輸出不會使用我指定的trustStore/keyStore顯示它。它甚至沒有顯示任何關於我想要達到的URL。

我出來的想法。

回答

0

您的服務器可能使用過時的SSL協議,因爲默認情況下,Java不再允許出於安全原因。

嘗試使用此選項(例如需要爲老年人SQL Server實例)上運行Java:

-Djsse.enableCBCProtection=false 

如果不工作,也許服務器使用SSLv3的,所以看到這太問題的How to enable SSL 3 in Java

如果這些工作中有任何一個是解決方法,則需要降級SSL安全性,因此強烈建議您升級服務器,然後再次刪除這些解決方法。

+0

我不認爲這是問題 - 捲曲的詳細輸出顯示它使用TLS1.2: '*使用TLSv1.2工作/ ECDHE-RSA-AES256-GCM-SHA384' SSL連接 –