Статус: Новичок
Группы: Участники
Зарегистрирован: 21.01.2020(UTC) Сообщений: 7  Сказал(а) «Спасибо»: 2 раз
|
Добрый день! Много информации перекопал. Пытаюсь достучаться до апи fedsfm. Сертификаты из хранилища JCP вытащил: Код:char[] psw = properties.getKeyPassword().toCharArray();
String alias = properties.getKeyAlias();
if (!JCPXMLDSigInit.isInitialized()) {
JCPXMLDSigInit.init();
}
// Инициализация ключевого контейнера.
String storename = JCP.HD_STORE_NAME;
KeyStore keyStore;
keyStore = KeyStore.getInstance(storename);
keyStore.load(null, null);
PrivateKey privateKey = (PrivateKey) keyStore.getKey(alias, psw);
if (privateKey == null) {
throw new Exception("Key named \"" + alias + "\" not found");
}
X509Certificate cert = (X509Certificate) keyStore.getCertificate(alias);
if (cert == null) {
throw new Exception("Certificate named \"" + alias + "\" not found");
}
Но io.netty.handler.ssl.SslContext не хочет их хавать. Использую reactive client spring: Код:HttpClient httpClient = HttpClient
.create()
.tcpConfiguration(
tcpClient -> tcpClient.proxy(
ops -> ops.type(ProxyProvider.Proxy.HTTP)
.host(properties.getProxyHost())
.port(properties.getProxyPort())
.username(properties.getProxyUser())
.password(s -> {
return properties.getProxyPassword();
})
)
).secure(sslSpec -> {
sslSpec.sslContext(SslContextBuilder
.forClient()
.keyManager(privateKey,properties.getKeyPassword(),cert)
.trustManager(cert)
.protocols("GostTLS")
);
});
Есть рабочий пример как сделать запрос (get/post) с использованием сертификата? Какой клиент использовать - не принципиально.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 06.12.2019(UTC) Сообщений: 9
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 1 раз в 1 постах
|
Из документации к JSTL. Код:
// Другой способ создать защищенный SSL контекст:
KeyStore trustStore = KeyStore.getInstance(JCP.CERT_STORE_NAME);
trustStore.load(new FileInputStream(“path_to_trust_store”),
“trust_store_password”.toCharArray()); // хранилище корневых сертификатов
// Если контекст для сервера или для клиента с аутентификацией
KeyManagerFactory kmf = KeyManagerFactory.getInstance("GostX509");
KeyStore keyStore = KeyStore.getInstance(JCP.HD_STORE_NAME);
keyStore.load(null, null);
kmf.init(keyStore, “key_store_password”.toCharArray()); // Пароль к контейнеру сервера или клиента
TrustManagerFactory tmf = TrustManagerFactory.getInstance("GostX509");
tmf.init(trustStore);
SSLContext sslCtx = SSLContext.getInstance("GostTLS"); // Защищенный контекст
sslCtx.init(kmf != null ? kmf.getKeyManagers() : null,
tmf.getTrustManagers(), null);
Потом можно создать `HttpClient`: Код:
SSLContext sslContext = SSLContext.getInstance(ru.CryptoPro.ssl.Provider.ALGORITHM_12);
// init ssl context
sslContext.init(kmf.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);
SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext);
HttpClientBuilder builder = HttpClientBuilder.create();
CloseableHttpClient client = builder.setSSLSocketFactory(sslConnectionSocketFactory).build();
Отредактировано пользователем 21 января 2020 г. 18:07:03(UTC)
| Причина: Не указана
|
 1 пользователь поблагодарил traceant за этот пост.
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close