簡體   English   中英

如何在Java中的HTTPS請求調用中包括SSL證書文件

[英]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 

現在,您必須使用javakeytool創建與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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM