1

クライアント認証用のキーツールを使用してキーペアを作成しました。このファイルから、サーバーがクライアントを認証するための証明書として公開鍵をエクスポートしました。

クライアントのセットアップ:
サーバー証明書をトラストストア ファイルにロードし、キーストア ファイルをキーストアとして使用しました。SSLContext を使用し、Apache HttpClient を使用してコードを介してトラストストアとキーストアをロードすると、クライアントは機能します。

KeyStore keyStore = KeyStore.getInstance("JKS");
              keyStore.load(new FileInputStream("keystore"), keyPassphrase.toCharArray());
              SSLContext sslcontext = SSLContexts.custom()
                .loadTrustMaterial(new File("truststore"), trustPassphrase.toCharArray(),
                        new TrustSelfSignedStrategy())
                .loadKeyMaterial(keyStore,keyPassphrase.toCharArray())
                .build();
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
                sslcontext,
                new String[] {"TLSv1"},   
                null,
                SSLConnectionSocketFactory.getDefaultHostnameVerifier());
              CloseableHttpClient httpclient = HttpClients.custom()
                .setSSLSocketFactory(sslsf)
                .build();

ssl の出力は、クライアントが証明書チェーンを提示していることを示しています。SoapUI でキーストアを設定することも正常に機能します。

私の問題: vm-arguments を介して同じトラストストアとキーストアを提供する (SSLContext を使用しない) クライアントが ssl 出力に証明書チェーンを提示していないことがわかります。
VM 引数:

    -Djavax.net.debug=ssl 
    -Djavax.net.ssl.keyStoreType=JKS 
    -Djavax.net.ssl.keyStore=keystore 
    -Djavax.net.ssl.keyStorePassword=keystorepw
    -Djavax.net.ssl.trustStoreType=jks 
    -Djavax.net.ssl.trustStore=truststore 
    -Djavax.net.ssl.trustStorePassword=truststorepw
4

1 に答える 1

0

VM 引数にタイプミスがあるようです:trustoreコードではtruststore. 本当にシンプルであることを願っています。

于 2016-02-24T21:16:23.570 に答える