使用client-auth的Java客户端在代码中工作,但在vm-arguments中不工作

时间:2016-02-24 21:00:17

标签: java ssl jvm-arguments mutual-authentication

我使用keytool创建了一个用于客户端身份验证的密钥对。在此文件中,我将公钥作为服务器的证书导出,以对客户端进行身份验证。

客户端设置:
将服务器证书加载到信任库文件中,并将密钥库文件用作密钥库。当我使用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 args:

    -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

1 个答案:

答案 0 :(得分:0)

您的VM参数中似乎有拼写错误:您有trustore作为arg值,而您的代码使用了truststore。我希望这真的很简单。