Нет такого алгоритма: TLS для провайдера SunPKCS11 - PullRequest
0 голосов
/ 09 января 2020

Мне нужно использовать модуль HMS для аутентификации TLS на стороне клиента. Это приложение Spring Boot, работающее в качестве внутреннего API, но в этом контексте мы являемся клиентом (наш API вызывает другой API).

Текущий код выглядит следующим образом:

String configArg = "--" +
                    "name=myprovider\n" +
                    "library=" + nativeLibraryPath + "\n" +
                    "slot = 3";
var provider = Security.getProvider("SunPKCS11").configure(configArg);
Security.addProvider(provider);

var keyStore = KeyStore.getInstance("PKCS11", provider);
keyStore.load(null, "mypassword".toCharArray());


var kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(keyStore, "mypassword".toCharArray());

var httpClient = HttpClient.create()
    .wiretap(true)
    .secure(sslContextSpec -> 
        sslContextSpec.sslContext(
            SslContextBuilder.forClient()
                .sslContextProvider(provider)
                .keyManager(kmf)
                .build(); // fails here
        )
    );

// use httpClient to do the call.

Когда запрос отправляется и вызывается SslContextBuilder.build (), я получаю исключение, которое говорит No such algorithm: TLS for provider SunPKCS11-myprovider. Я пробовал поискать в Google, но, видимо, я единственный из inte rnet, который получает эту ошибку. Что я делаю не так?

У парней, которые сделали HSM, есть Java SDK с классом Provider, но этот класс не поддерживает TLS, и когда мы говорили с их поддержкой, они сказали, что SunPKCS11 провайдер должен работать.

...