Статус: Новичок
Группы: Участники
Зарегистрирован: 12.10.2016(UTC) Сообщений: 1 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Рыбинск Сказал(а) «Спасибо»: 1 раз
|
Здравствуйте! Как задать расширение SNI (Extension server_name) для сокета крипто-про? Код:
SSLParameters sslParameters = socket.getSSLParameters();
sslParameters.setServerNames(serverNames);
socket.setSSLParameters(Arrays.asList(new SNIHostName(url.getHost())));
так не работает. Далее привожу детальное описание возникшей проблемы. Есть веб-клиент, который должен работать с веб-сервисом (ГОСТ шифрование). Сервис находится на виртуальном хосте (за nginx), поэтому клиенту необходимо использовать Server Name Indication (SNI). Код создания SSLSocketFactory: Код:
private SSLSocketFactory getCryptoProSSLSocketFactory() throws KeyStoreException, NoSuchAlgorithmException,
CertificateException, FileNotFoundException, IOException, KeyManagementException {
KeyStore trustStore = KeyStore.getInstance(JCP.CERT_STORE_NAME);
trustStore.load(new FileInputStream(keyStoreFile), "changeit".toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance("GostX509");
tmf.init(trustStore);
SSLContext sslCtx = SSLContext.getInstance("GostTLS");
sslCtx.init(null, tmf.getTrustManagers(), null);
return sslCtx.getSocketFactory();
}
В логах на этапе ssl-handshake: Код:
ClientHello, TLSv1; Cipher Suites: [TLS_CIPHER_2012, TLS_CIPHER_2001, SSL3_CK_GVO_KB2]; Compression Methods: 0; Extensions: Extension ext_hash_and_mac_alg_select, ext_hash_and_mac_alg_select: [48, 32, 48, 30, 48, 8, 6, 6, 42, -123, 3, 2, 2, 9, 48, 8, 6, 6, 42, -123, 3, 2, 2, 22, 48, 8, 6, 6, 42, -123, 3, 2, 2, 23], Extension renegotiation_info, renegotiated_connection: <empty>;
Получается что в данном случае SNI не отправляется -> nginx не понимает, что нужно запрос слать к хосту веб-сервиса, и шлет запрос на дефолтовый хост, естественно все ломается. Код:
Caused by: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
at ru.CryptoPro.ssl.am.a(Unknown Source)
at ru.CryptoPro.ssl.am.i(Unknown Source)
at ru.CryptoPro.ssl.am.startHandshake(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
Пробовал без крипто-про с обычным TLS. Все работает как надо, SNI задается: Код:
*** ClientHello, TLSv1.2
RandomCookie: GMT: 1459418267 bytes = { 74, 199, 110, 160, 53, 253, 254, 250, 208, 232, 10, 200, 23, 79, 97, 78, 156, 243, 136, 88, 6, 232, 10, 40, 146, 112, 82, 31 }
Session ID: {}
Cipher Suites: [TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256, TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, TLS_DHE_DSS_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, TLS_DHE_DSS_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, TLS_EMPTY_RENEGOTIATION_INFO_SCSV]
Compression Methods: { 0 }
Extension elliptic_curves, curve names: {secp256r1, sect163k1, sect163r2, secp192r1, secp224r1, sect233k1, sect233r1, sect283k1, sect283r1, secp384r1, sect409k1, sect409r1, secp521r1, sect571k1, sect571r1, secp160k1, secp160r1, secp160r2, sect163r1, secp192k1, sect193r1, sect193r2, secp224k1, sect239k1, secp256k1}
Extension ec_point_formats, formats: [uncompressed]
Extension signature_algorithms, signature_algorithms: SHA512withECDSA, SHA512withRSA, SHA384withECDSA, SHA384withRSA, SHA256withECDSA, SHA256withRSA, SHA224withECDSA, SHA224withRSA, SHA1withECDSA, SHA1withRSA, SHA1withDSA
]Extension server_name, server_name: [type=host_name (0), value=web-service-test.ru]
***
Здесь все установилось: Extension server_name, server_name: [type=host_name (0), value=web-service-test.ru]. Запрос дошел куда надо к веб-сервису, но естественно тут все ломается, т.к веб-сервис работает с ГОСТ
|