没有可用的客户端私钥

时间:2019-06-29 14:12:35

标签: java ssl certificate mutual-authentication

我正在编写客户端代码,该代码必须使用需要客户端证书进行身份验证的Web服务。

代码:

String KEYSTOREPATH = "C:\\jks\\client.p12";
    String KEYPASS = "password";
    SSLContext sslContext = SSLContexts.custom()
            .loadKeyMaterial(
                    new File("C:\\jks\\client.p12"),
                    KEYPASS.toCharArray(), KEYPASS.toCharArray(),
                    (PrivateKeyStrategy) (aliases, socket) -> "client")
            .loadTrustMaterial(new File(KEYSTOREPATH), KEYPASS.toCharArray(), (chain, authType) -> true).build();

    // Allow TLSv1 protocol only
    SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
            sslContext,
            new String[] { "TLSv1.2" },
            null,
            SSLConnectionSocketFactory.getDefaultHostnameVerifier());
    CloseableHttpClient httpclient = HttpClients.custom()
            .setSSLSocketFactory(sslsf)
            .build();
    try {

        HttpGet httpget = new HttpGet("https://localhost:8443/test");

        System.out.println("Executing request " + httpget.getRequestLine());

        CloseableHttpResponse response = httpclient.execute(httpget);
        try {
            HttpEntity entity = response.getEntity();

            System.out.println("----------------------------------------");
            System.out.println(response.getStatusLine());
            EntityUtils.consume(entity);
        } finally {
            response.close();
        }
    } finally {
        httpclient.close();
    }

错误:

javax.net.ssl|DEBUG|01|main|2019-06-29 19:29:33.244 IST|SunX509KeyManagerImpl.java:401|matching alias: 1
javax.net.ssl|WARNING|01|main|2019-06-29 19:29:33.245 IST|CertificateRequest.java:699|No available client private key
javax.net.ssl|DEBUG|01|main|2019-06-29 19:29:33.246 IST|ServerHelloDone.java:142|Consuming ServerHelloDone handshake message (
<empty>
)
javax.net.ssl|DEBUG|01|main|2019-06-29 19:29:33.246 IST|CertificateMessage.java:291|No X.509 certificate for client authentication, use empty Certificate message instead
javax.net.ssl|DEBUG|01|main|2019-06-29 19:29:33.247 IST|CertificateMessage.java:322|Produced client Certificate handshake message (
"Certificates": <empty list>
)

生成p12文件的命令

openssl pkcs12 -export -out client.p12 -inkey client.key.pem -in client.cert.pem

为什么无法从client.p12文件中找到客户端证书?我在这里想念什么?

0 个答案:

没有答案