Такого алгоритма нет: TLS для провайдера SunPKCS11
Мне нужно использовать модуль 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, но, видимо, я единственный в Интернете, у кого возникает эта ошибка. Что я делаю неправильно?
У ребят, которые сделали HSM, есть Java SDK с классом Provider, но этот класс не поддерживает TLS, и когда мы поговорили с их службой поддержки, они сказали, что провайдер SunPKCS11 должен работать.