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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline danillezz  
#1 Оставлено : 21 января 2020 г. 15:34:59(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 Санчир Момолдаев  
#2 Оставлено : 25 января 2020 г. 0:45:24(UTC)
Санчир Момолдаев

Статус: Сотрудник

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

Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.