我有(由第三方組織,我需要與溝通) 如何通過HttpsURLConnection爲POST請求使用X509證書?
- 自簽名的服務器證書,包含密鑰,該服務器證書籤名。
現在我需要通過使用這些證書的HTTPS發送POST請求。 我設法測試在Internet Explorer中通過https連接後我在瀏覽器上安裝他們:
- 服務器證書 - 到可信CA
- 客戶端證書 - 到個人證書。
在java中到現在爲止我使用的代碼,在回答中SO: Java client certificates over HTTPS/SSL鑑於neu242,即接受的任何證書。但是現在服務器端確實接受了這一點,即我得到了SSL握手失敗。
感謝SO: X509TrustManager Override without allowing ALL certs?我試圖返回getAcceptedIssuers
服務器證書,但徒勞無功。它拋出
javax.net.ssl.SSLHandshakeException:收到致命警報:handshake_failure
getAcceptedIssuers
之後的回報。
public X509Certificate[] getAcceptedIssuers() {
try {
X509Certificate scert;
try (InputStream inStream = new FileInputStream("..\\server.crt")) {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
scert = (X509Certificate) cf.generateCertificate(inStream);
}
return new X509Certificate[]{scert};
} catch (Exception ex) {
writeLogFile(ex.getMessage());
return new X509Certificate[]{};
}
}
我想我應該指定客戶端證書以某種方式,但無法找到任何方式。 我當然可能是錯的。
希望有人能帶領我正確的方向。
在客戶端或服務器端握手失敗?你可以使用額外的jvm參數'-Djavax.net.debug = all'運行你的服務器和客戶端,並共享控制檯輸出嗎? – thiyaga