Использование файла .p12 для выполнения запроса на оставшийся сервер - PullRequest
10 голосов
/ 07 мая 2019

Я пытаюсь выполнить запросы к серверу, который предоставил мне файл .p12 для создания безопасного соединения с остальными службами, я делаю следующее для установки HttpClient с ключом:

SSLContext sslContext =SSLContextBuilder
                .create().loadKeyMaterial(ResourceUtils.getFile("classpath:keystore/file.p12"), "secret".toCharArray(), "secret".toCharArray())
                .build();

    return HttpClientBuilder
            .create()
            .setConnectionManager(connManager())
            .setSSLContext(sslContext)
            .setDefaultRequestConfig(requestConfig())
            .build();

Когда я выполняю запрос с OAuth2RestOperations , я получил:

401 , Non existing certificate or invalid 

Ответы [ 3 ]

5 голосов
/ 15 мая 2019

У меня недавно было похожее требование. Вот код, который я использовал:

    KeyStore clientStore = KeyStore.getInstance("PKCS12");
    try {
        clientStore.load(ResourceUtils.getFile("classpath:keystore/file.p12"), "secret".toCharArray());
    } catch (IOException e) {
        //handle exception
    }

    KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
    kmf.init(clientStore, "secret".toCharArray());
    KeyManager[] kms = kmf.getKeyManagers();

    SSLContext sslContext = SSLContext.getInstance("TLS");
    sslContext.init(kms, null, new SecureRandom());

    SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext);

    HttpClientBuilder builder = HttpClientBuilder.create();
    return builder.setSSLSocketFactory(socketFactory).build();
0 голосов
/ 15 мая 2019

Во всех примерах вам нужно вызвать loadKeyMaterial метод с KeyStore

 public SSLContextBuilder loadKeyMaterial(KeyStore keystore,

Загрузите хранилище ключей, используя путь к файлу, например:

keyStore = KeyStore.getInstance("PKCS12");
FileInputStream inputStream = new FileInputStream(new File(certPath));
keyStore.load(inputStream, certPassword.toCharArray());
0 голосов
/ 15 мая 2019

Я думаю, что на самом деле это дублирующий вопрос.

Пожалуйста, посмотрите этот ответ на этот вопрос Проверка подлинности сертификата клиента Java HTTPS .

...