Статус: Новичок
Группы: Участники
Зарегистрирован: 15.02.2024(UTC) Сообщений: 4
|
Добрый день! Возникла необходимость объяснить netty о существовании гост алгоритмов, о которых netty не знает. Сам netty работает с криптографией путем объявления SslContextBuilder, где заполняется приватный ключ и сертификат сервера. Тип приватного ключа PrivateKey, из JDK. Каким образом передать в контекст приватный ключ? Код:
var ks = KeyStore.getInstance(JCP.HD_STORE_NAME);
ks.load(null, null);
var cf = CertificateFactory.getInstance("X509");
var cert = cf.generateCertificate(Files.newInputStream(Paths.get("path to certs")));
var sslContext = SslContextBuilder
.forServer(privateKey, cert)
.sslProvider(SslProvider.JDK)
.sslContextProvider(new Provider())
.trustManager(tmf)
.clientAuth(ClientAuth.REQUIRE)
.build();
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 27.04.2015(UTC) Сообщений: 14 Откуда: Воронеж Сказал(а) «Спасибо»: 3 раз
|
Автор: artishok Добрый день! Возникла необходимость объяснить netty о существовании гост алгоритмов, о которых netty не знает. Сам netty работает с криптографией путем объявления SslContextBuilder, где заполняется приватный ключ и сертификат сервера. Тип приватного ключа PrivateKey, из JDK. Каким образом передать в контекст приватный ключ? Код:
var ks = KeyStore.getInstance(JCP.HD_STORE_NAME);
ks.load(null, null);
var cf = CertificateFactory.getInstance("X509");
var cert = cf.generateCertificate(Files.newInputStream(Paths.get("path to certs")));
var sslContext = SslContextBuilder
.forServer(privateKey, cert)
.sslProvider(SslProvider.JDK)
.sslContextProvider(new Provider())
.trustManager(tmf)
.clientAuth(ClientAuth.REQUIRE)
.build();
А там разве нету поля keyManager куда вы можете передать приватный ключ, который вы вычитали из хранилища?
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 15.02.2024(UTC) Сообщений: 4
|
Что было сделано: сгенерированы корневой, серверный, клиентский сертификаты по мануалу . Код:
csptest -minica -root -dn "CN=example.com" -provtype 80 -provider "Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider" -container "CA" -password "123456" -store mRoot -fcert C:\root.cer
csptest -minica -leaf -dn "CN=server.example.com" -provtype 80 -provider "Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider" -container "server" -password "123456" -fcert C:\server.cer -issuer "CN=example.com" -ipassword "123456" -istore mRoot
csptest -minica -leaf -dn "CN=client.example.com" -provtype 80 -provider "Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider" -container "client" -password "123456" -fcert C:\client.cer -issuer "CN=example.com" -ipassword "123456" -istore mRoot
Это видится в консоли JCP крипто про. Был создан контейнер в который добавлен корневой сертификаты. Создается контекст для Netty Код:
//инициализация сервера
Security.addProvider(new JCP());
Security.addProvider(new RevCheck());
Security.addProvider(new CryptoProvider());
Security.addProvider(new Provider());
var provider = new Provider();
var ts = KeyStore.getInstance(HD_STORE_NAME);
ts.load(Files.newInputStream(Paths.get("ca.store")), certs.getTrustStorePassword().toCharArray());
var tmf = TrustManagerFactory.getInstance(TRUSTMANGER_ALG);
tmf.init(ts);
var ks = KeyStore.getInstance(HD_STORE_NAME);
ks.load(new StoreInputStream("server"), null);
var kmf = KeyManagerFactory.getInstance(KEYMANGER_ALG);
kmf.init(ks, "123456".toCharArray());
return SslContextBuilder.forServer(kmf)
.trustManager(tmf)
.protocols("TLSv1")
.sslContextProvider(provider)
.clientAuth(ClientAuth.REQUIRE)
.build();
Код:
//инициализация клиента
Security.addProvider(new JCP());
Security.addProvider(new RevCheck());
Security.addProvider(new CryptoProvider());
Security.addProvider(new Provider());
var provider = new Provider();
var ts = KeyStore.getInstance(HD_STORE_NAME);
ts.load(Files.newInputStream(Paths.get("ca.store")), "123456".toCharArray());
var tmf = TrustManagerFactory.getInstance(TRUSTMANGER_ALG);
tmf.init(ts);
var ks = KeyStore.getInstance(HD_STORE_NAME);
ks.load(new StoreInputStream("client"), null);
var kmf = KeyManagerFactory.getInstance(KEYMANGER_ALG);
kmf.init(ks, "123456".toCharArray());
return SslContextBuilder.forClient()
.trustManager(tmf)
.keyManager(kmf)
.protocols("TLSv1")
.sslContextProvider(provider)
.build();
Ошибка на клиенте при подключении Код:
java.lang.RuntimeException: Delegated task threw Exception/Error
at ru.CryptoPro.ssl.cl_64.B(Unknown Source) ~[cpSSL.jar:42646-A]
at ru.CryptoPro.ssl.SSLEngineImpl.e(Unknown Source) ~[cpSSL.jar:42646-A]
at ru.CryptoPro.ssl.SSLEngineImpl.a(Unknown Source) ~[cpSSL.jar:42646-A]
at ru.CryptoPro.ssl.SSLEngineImpl.unwrap(Unknown Source) ~[cpSSL.jar:42646-A]
at java.base/javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:637) ~[na:na]
at io.netty.handler.ssl.SslHandler$SslEngineType$3.unwrap(SslHandler.java:310) ~[netty-handler-4.1.101.Final.jar:4.1.101.Final]
at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1445) ~[netty-handler-4.1.101.Final.jar:4.1.101.Final]
at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1338) ~[netty-handler-4.1.101.Final.jar:4.1.101.Final]
at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1387) ~[netty-handler-4.1.101.Final.jar:4.1.101.Final]
at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:529) ~[netty-codec-4.1.101.Final.jar:4.1.101.Final]
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:468) ~[netty-codec-4.1.101.Final.jar:4.1.101.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290) ~[netty-codec-4.1.101.Final.jar:4.1.101.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.101.Final.jar:4.1.101.Final]
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.101.Final.jar:4.1.101.Final]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.101.Final.jar:4.1.101.Final]
at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
Caused by: java.lang.NullPointerException: null
at ru.CryptoPro.ssl.util.IPAddressUtil.textToNumericFormatV4(Unknown Source) ~[cpSSL.jar:42646-A]
at ru.CryptoPro.ssl.util.IPAddressUtil.isIPv4LiteralAddress(Unknown Source) ~[cpSSL.jar:42646-A]
at ru.CryptoPro.ssl.util.HostnameChecker.a(Unknown Source) ~[cpSSL.jar:42646-A]
at ru.CryptoPro.ssl.util.HostnameChecker.match(Unknown Source) ~[cpSSL.jar:42646-A]
at ru.CryptoPro.ssl.cl_120.a(Unknown Source) ~[cpSSL.jar:42646-A]
at ru.CryptoPro.ssl.cl_120.a(Unknown Source) ~[cpSSL.jar:42646-A]
at ru.CryptoPro.ssl.cl_120.checkServerTrusted(Unknown Source) ~[cpSSL.jar:42646-A]
at ru.CryptoPro.ssl.cl_18.a(Unknown Source) ~[cpSSL.jar:42646-A]
at ru.CryptoPro.ssl.cl_18.a(Unknown Source) ~[cpSSL.jar:42646-A]
at ru.CryptoPro.ssl.cl_64.u(Unknown Source) ~[cpSSL.jar:42646-A]
at ru.CryptoPro.ssl.cl_65.a(Unknown Source) ~[cpSSL.jar:42646-A]
at ru.CryptoPro.ssl.cl_65.run(Unknown Source) ~[cpSSL.jar:42646-A]
at java.base/java.security.AccessController.doPrivileged(Native Method) ~[na:na]
at ru.CryptoPro.ssl.cl_66.run(Unknown Source) ~[cpSSL.jar:42646-A]
at io.netty.handler.ssl.SslHandler.runDelegatedTasks(SslHandler.java:1651) ~[netty-handler-4.1.101.Final.jar:4.1.101.Final]
at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1497) ~[netty-handler-4.1.101.Final.jar:4.1.101.Final]
... 21 common frames omitted
дистрибутив КриптоПро JCP и JTLS R5 (2.0.42646-А для JVM 10+), (2.0.41940-А для JVM 10+) ошибка воспроизводится всегда. похожая ошибка с проверкой textToNumericFormatV4 https://bugs.openjdk.org/browse/JDK-8211339Можете помочь в исправлении данной ошибки? Отредактировано пользователем 22 февраля 2024 г. 18:42:36(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Здравствуйте. Сертификат сервера можете приложить? |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 15.02.2024(UTC) Сообщений: 4
|
Добрый день. Отправил в ЛС
|
|
|
|
Статус: Сотрудник
Группы: Модератор, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,193 Сказал(а) «Спасибо»: 100 раз Поблагодарили: 274 раз в 254 постах
|
вопрос рассматривается в рамках обращения на портале 112937 |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 15.02.2024(UTC) Сообщений: 4
|
Черновая версия для запуска контекста Netty Код:
var provider = new Provider();
var ts = KeyStore.getInstance(CERT_STORE_NAME);
ts.load(Files.newInputStream(Paths.get("test.store")), "123456".toCharArray());
var tmf = TrustManagerFactory.getInstance(TRUSTMANGER_ALG);
tmf.init(ts);
var ks = KeyStore.getInstance(HD_STORE_NAME);
ks.load(new StoreInputStream("server"), null);
var kmf = KeyManagerFactory.getInstance(KEYMANGER_ALG);
kmf.init(ks, "123456".toCharArray());
return SslContextBuilder.forServer(kmf)
.trustManager(tmf)
.protocols(List.of("TLSv1","TLSv1.1","TLSv1.2"))
.sslContextProvider(provider)
.clientAuth(ClientAuth.REQUIRE)
.build();
Код:
var provider = new Provider();
var ts = KeyStore.getInstance(CERT_STORE_NAME);
ts.load(Files.newInputStream(Paths.get("ca.store")), "123456".toCharArray());
var tmf = TrustManagerFactory.getInstance(TRUSTMANGER_ALG);
tmf.init(ts);
var ks = KeyStore.getInstance(HD_STORE_NAME);
ks.load(new StoreInputStream("client"), null);
var kmf = KeyManagerFactory.getInstance(KEYMANGER_ALG);
kmf.init(ks, "123456".toCharArray());
return SslContextBuilder.forClient()
.trustManager(tmf)
.keyManager(kmf)
.protocols(List.of("TLSv1","TLSv1.1","TLSv1.2"))
.sslContextProvider(provider)
.build();
ca.store содержит корневой сертификат. Запуск с ключом -Dtls_prohibit_disabled_validation=false (через свойства не подхватывается). В панели JCP так же отключена проверка CRL. Проверка хоста и первоначальная ошибка возникает при проверке хоста на клиенте, нужно добавить этот хост в обработчик Netty context.newHandler(ch.alloc(), "server.example.com", 12345) Отредактировано пользователем 7 марта 2024 г. 12:22:43(UTC)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close