Статус: Новичок
Группы: Участники
Зарегистрирован: 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) с использованием сертификата? Какой клиент использовать - не принципиально.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,244  Сказал(а) «Спасибо»: 106 раз Поблагодарили: 300 раз в 278 постах
|
не совсем то, тут просто делается подключение и скачивается файл. Код: private static void doConnect (String urlString, String fileToSave, boolean isGost,KeyStore keyStore,char[] password) throws Exception{ //двухсторонний метод
String toTMF, toSSLContext;
KeyStore trustedKeyStore = KeyStore.getInstance("JKS");
trustedKeyStore.load(new FileInputStream("c:\\JVM\\jdk-12.0.1\\lib\\security\\cacerts"),"changeit".toCharArray());
URL url = new URL(urlString);
if (isGost) { //for gosttls
toTMF="GostX509";
toSSLContext="GostTLSv1.2"; //GostTLS - это tls 1.0
} else
{ //for rsa
toTMF="PKIX";
toSSLContext="TLSv1.2";
}
TrustManagerFactory tmf = TrustManagerFactory.getInstance(toTMF);
tmf.init(trustedKeyStore);
SSLContext sslCtx = SSLContext.getInstance(toSSLContext);
if (keyStore==null) {
sslCtx.init(null,tmf.getTrustManagers(),null); //односторонний
} else {
KeyManagerFactory kmf = KeyManagerFactory.getInstance("GostX509");
kmf.init(keyStore,password);
sslCtx.init(kmf.getKeyManagers(),tmf.getTrustManagers(),null); //двухсторонний по ГОСТ
}
SSLSocketFactory socketFactory = sslCtx.getSocketFactory();
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setSSLSocketFactory(socketFactory);
connection.connect();
saveFilefromUrl(fileToSave,connection);
connection.disconnect();
}
private static void doConnect (String urlString, String fileToSave, boolean isGost) throws Exception { //односторонний метод
doConnect(urlString,fileToSave,isGost,null,null);
}
Отредактировано пользователем 25 января 2020 г. 0:52:27(UTC)
| Причина: Не указана |
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close