[英]How to include SSL certificate files in HTTPS request call in Java
我正在嘗試在HTTPS請求調用中包括SSL證書文件(.crt和.key)。 但是這樣做時出現握手失敗錯誤。 這是我的代碼,將文件包含在Java中。 客戶端期望SSL版本應為TLSv1.2。
public static void main(String[] args){
SSLConnectionSocketFactory socketFactory = null;
String uri = "https://myclient.com";
try {
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(
new FileInputStream(new File(
"certificate.p12")),
keyStorePassword.toCharArray());
socketFactory = new SSLConnectionSocketFactory(
new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy())
.loadKeyMaterial(keyStore, keyStorePassword.toCharArray()).build(),
NoopHostnameVerifier.INSTANCE);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
問題是您嘗試加載pkcs12
文件,而您應該加載keystore
文件。
所以第一步(您已經做過)是使用openssl
創建一個pkcs12
(或pfx
)文件。
openssl pkcs12 -export -out certificate.p12 -inkey privateKey.key -in certificate.crt
現在,您必須使用java
的keytool創建與jks
兼容的密鑰庫
keytool -genkey -alias mydomain -keyalg RSA -keystore mykeystore.jks -keysize 2048
系統將詢問您一系列問題,包括密碼。
創建密鑰庫后,現在可以導入pkcs12
文件:
keytool -importkeystore -srckeystore certificate.p12 -srcstoretype pkcs12 -destkeystore .\mykeystore.jks -deststoretype JKS
在Java
代碼中,您必須導入mykeystore.jks
而不是certificate.p12
。
在爭執這個問題超過一個星期后,它已解決。 我在MacOS上嘗試我的代碼。 由於Apple不贊成使用opensl而是使用其自己的TLS和加密庫,因此握手過程在更高版本的TLS中失敗。
我在ubuntu中嘗試了一下,並得到了結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.