Загрузка файла pk12 в приложении в Wildfly 16 - PullRequest
1 голос
/ 11 ноября 2019

У меня есть код, который вызывает api rest, защищенный сертификатом, и этот код некоторое время работал без проблем, пока я не перенес приложение из Wildfly 10 в Wildfly 16.

Сам код простон создает запрос http и устанавливает фабрику пользовательских сокетов: `

 private SSLSocketFactory getSSLSocketFactory() {
    char[] certPassword = {}; // password hidden from you 
    try {
        final KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
        final SSLContext sslContext = SSLContext.getInstance("TLS");
        final KeyStore keyStore = KeyStore.getInstance("PKCS12");
        try (FileInputStream fileInputStream = new FileInputStream(new File("cert.pk12"))) {
            keyStore.load(fileInputStream, certPassword);
        } catch (final Exception e) {
            logger.error("....", e);
        }

        this.readLoadCertificateFile(keyStore);
        kmf.init(keyStore, certPassword);
        sslContext.init(kmf.getKeyManagers(), new TrustManager[]{new AnyTrust()}, null);
        return sslContext.getSocketFactory();
    } catch (Exception e) {
        logger.error(".....", e);
    }
    throw new IllegalStateException("....");
}


  HTTPRequest req = ....
  req.setSSLSocketFactory(getSSLSocketFactory());
  tokenHttpResp = req.send();`

`

Все выглядит хорошо, но когда я запускаю этот код из WF16, он выдает

IOException: Не удалось загрузить .p12 хранилище ключей: C: \ Cert \ cert.p12;ошибка конструирования MAC: java.lang.SecurityException: JCE не может аутентифицировать провайдера BC;org. и у меня его нет в самом приложении ... Если кто-нибудь знает, в чем проблема, я был бы признателен за любой вклад.

В качестве альтернативы, я собираюсь перенести создание фабрики сокетов в сам контейнер, похоже на подсистему Wildfly Elytron, специально разработанную для этого, это хорошая идея?

...