Нет доступного личного ключа клиента - PullRequest
1 голос
/ 29 июня 2019

Я пишу код клиента, который должен использовать веб-сервис, для которого требуется сертификат клиента для аутентификации.

Код:

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? Что мне здесь не хватает?

...