Мне нужно использовать модуль 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 провайдер должен работать.