Java HttpsURLConnection вызывает остальную веб-службу и программно применяет сертификат - PullRequest
0 голосов
/ 06 мая 2020

Пытался привязать услугу отдыха для оплаты. Мне выдали сертификат в формате p12 и дали инструкцию преобразовать его в формат pem с использованием библиотеки OpenSSL. Теперь у меня есть эти два файла.

key.pem(-----BEGIN ENCRYPTED PRIVATE KEY-----)
cert.pem(-----BEGIN CERTIFICATE-----)

Моя цель - вызвать эту службу отдыха с помощью HttpsURLConnection. Насколько я знаю, мне нужно сделать следующее:

KeyStore, SSLContext and then apply into httpsCon.setSSLSocketFactory(context.getSocketFactory());

Я искал другое решение, но не нашел рабочего решения. Может кто-нибудь предоставить рабочий пример?

1 Ответ

0 голосов
/ 07 мая 2020

Вот код сработал для меня. Надеюсь, это поможет кому-то

public class Main {

    @Autowired
    ResourceLoader resourceLoader;

    private static void applyCertificateInformation(HttpsURLConnection con, String password) throws IOException, NoSuchAlgorithmException, CertificateException, KeyStoreException, UnrecoverableKeyException, KeyManagementException {
        KeyStore clientStore = KeyStore.getInstance("PKCS12");
        clientStore.load(resourceLoader.getResource("my-cert.p12").getInputStream(), password.toCharArray());

        KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
        kmf.init(clientStore, password.toCharArray());

        KeyManager[] kms = kmf.getKeyManagers();


        TrustManager[] tms = new TrustManager[]{
                new X509TrustManager() {

                    @Override
                    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                        return null;
                    }

                    @Override
                    public void checkClientTrusted(
                            java.security.cert.X509Certificate[] certs, String authType) {
                    }

                    @Override
                    public void checkServerTrusted(
                            java.security.cert.X509Certificate[] certs, String authType) {
                    }
                }
        };

        SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
        sslContext.init(kms, tms, new SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
        con.setSSLSocketFactory(sslContext.getSocketFactory());
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...