Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline danillezz  
#1 Оставлено : 21 января 2020 г. 15:53:06(UTC)
danillezz

Статус: Новичок

Группы: Участники
Зарегистрирован: 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) с использованием сертификата? Какой клиент использовать - не принципиально.
Offline traceant  
#2 Оставлено : 21 января 2020 г. 18:00:34(UTC)
traceant

Статус: Новичок

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

thanks 1 пользователь поблагодарил traceant за этот пост.
danillezz оставлено 22.01.2020(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.