Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用客户端身份验证的Java客户端在代码中工作,但不使用vm参数_Java_Ssl_Jvm Arguments_Mutual Authentication - Fatal编程技术网

使用客户端身份验证的Java客户端在代码中工作,但不使用vm参数

使用客户端身份验证的Java客户端在代码中工作,但不使用vm参数,java,ssl,jvm-arguments,mutual-authentication,Java,Ssl,Jvm Arguments,Mutual Authentication,我已经使用keytool创建了一个用于客户端身份验证的密钥对。从这个文件中,我导出了公钥作为服务器认证客户端的证书 客户端设置:将服务器证书加载到信任库文件中,并将密钥库文件用作密钥库。当我通过SSLContext代码并使用Apache HttpClient加载truststore和keystore时,客户端工作: KeyStore keyStore = KeyStore.getInstance("JKS"); keyStore.load(new FileInputS

我已经使用keytool创建了一个用于客户端身份验证的密钥对。从这个文件中,我导出了公钥作为服务器认证客户端的证书 客户端设置:
将服务器证书加载到信任库文件中,并将密钥库文件用作密钥库。当我通过SSLContext代码并使用Apache HttpClient加载truststore和keystore时,客户端工作:

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参数提供相同的信任库和密钥库(不使用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

您的VM参数中似乎有一个输入错误:arg值为
trustore
,而代码使用了
truststore
。我希望它真的这么简单。

您的VM参数似乎有一个输入错误:您将
trustore
作为arg值,而您的代码使用
truststore
。我希望它真的这么简单。

谢谢你指出了错误,但这不是原因。我更担心的是密钥库。。。因为这似乎并没有将证书呈现给服务器。感谢您指出输入错误-但这不是原因。我更担心的是密钥库。。。因为这似乎不会将证书呈现给服务器。