Atom Лента - Форум КриптоПро - Тема:ошибка публичного ключа при наличии BouncyCastle в проекте - 10Форум КриптоПро - Atom Лентаurn:https:--www-cryptopro-ru:AtomLenta:ForumKriptoPro:Tema:oshibkapublichnogokljuchaprinalichiiBouncyCastlevproekte-10:1Copyright 2024 Форум КриптоПро2024-03-29T09:00:58Zhttps://www.cryptopro.ru/forum2/Images/YAFLogo.pngForum Adminhttps://www.cryptopro.ruforum@cryptopro.ruЕвгений Афанасьевhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=1064&name=Евгений АфанасьевЕвгений Афанасьевhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=1064&name=Евгений Афанасьевlong76https://www.cryptopro.ru/forum2/default.aspx?g=profile&u=58887&name=long76Евгений Афанасьевhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=1064&name=Евгений Афанасьевlong76https://www.cryptopro.ru/forum2/default.aspx?g=profile&u=58887&name=long76Евгений Афанасьевhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=1064&name=Евгений Афанасьевlong76https://www.cryptopro.ru/forum2/default.aspx?g=profile&u=58887&name=long76long76https://www.cryptopro.ru/forum2/default.aspx?g=profile&u=58887&name=long76Евгений Афанасьевhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=1064&name=Евгений АфанасьевЕвгений Афанасьевhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=1064&name=Евгений Афанасьевlong76https://www.cryptopro.ru/forum2/default.aspx?g=profile&u=58887&name=long76YetAnotherForum.NETurn:https:--www-cryptopro-ru:ftPosts:st1:meid126746:1ошибка публичного ключа при наличии BouncyCastle в проекте<table class="content postContainer_Alt" width="100%"><tr><td>Если у вас имеется полный лог, приложите, пожалуйста.</td></tr></table>2021-08-19T17:20:21+03:002021-08-19T17:20:21+03:00Евгений Афанасьев<table class="content postContainer_Alt" width="100%"><tr><td>Если у вас имеется полный лог, приложите, пожалуйста.</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid126744:1ошибка публичного ключа при наличии BouncyCastle в проекте<table class="content postContainer" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: Евгений Афанасьев <a href="/forum2/default.aspx?g=posts&m=126440#post126440"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote>Код верный, но сертификаты в логе, видимо, все представлены BC. Можете включить полное (ALL) логирование для SSLLogger и JCPLogger до момента возникновения ошибки?<br /><a rel="nofollow" href="https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/45/6/vkljuchenie-zhurnlirovnija-kriptopro-jcp" title="https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/45/6/vkljuchenie-zhurnlirovnija-kriptopro-jcp">https://support.cryptopr...nlirovnija-kriptopro-jcp</a><br /><a rel="nofollow" href="https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/59/6/vkljuchenie-zhurnlirovnija-kriptopro-jtls" title="https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/59/6/vkljuchenie-zhurnlirovnija-kriptopro-jtls">https://support.cryptopr...lirovnija-kriptopro-jtls</a></div></div><br /><br />Логирование особо не помогло, проблему решили выносом функционала в jar и дергание его через Runtime.exec. Но спасибо за помощь.</td></tr></table>2021-08-19T15:37:45+03:002021-08-19T15:37:45+03:00long76<table class="content postContainer" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: Евгений Афанасьев <a href="/forum2/default.aspx?g=posts&m=126440#post126440"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote>Код верный, но сертификаты в логе, видимо, все представлены BC. Можете включить полное (ALL) логирование для SSLLogger и JCPLogger до момента возникновения ошибки?<br /><a rel="nofollow" href="https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/45/6/vkljuchenie-zhurnlirovnija-kriptopro-jcp" title="https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/45/6/vkljuchenie-zhurnlirovnija-kriptopro-jcp">https://support.cryptopr...nlirovnija-kriptopro-jcp</a><br /><a rel="nofollow" href="https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/59/6/vkljuchenie-zhurnlirovnija-kriptopro-jtls" title="https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/59/6/vkljuchenie-zhurnlirovnija-kriptopro-jtls">https://support.cryptopr...lirovnija-kriptopro-jtls</a></div></div><br /><br />Логирование особо не помогло, проблему решили выносом функционала в jar и дергание его через Runtime.exec. Но спасибо за помощь.</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid126440:1ошибка публичного ключа при наличии BouncyCastle в проекте<table class="content postContainer_Alt" width="100%"><tr><td>Код верный, но сертификаты в логе, видимо, все представлены BC. Можете включить полное (ALL) логирование для SSLLogger и JCPLogger до момента возникновения ошибки?<br /><a rel="nofollow" href="https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/45/6/vkljuchenie-zhurnlirovnija-kriptopro-jcp" title="https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/45/6/vkljuchenie-zhurnlirovnija-kriptopro-jcp">https://support.cryptopr...nlirovnija-kriptopro-jcp</a><br /><a rel="nofollow" href="https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/59/6/vkljuchenie-zhurnlirovnija-kriptopro-jtls" title="https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/59/6/vkljuchenie-zhurnlirovnija-kriptopro-jtls">https://support.cryptopr...lirovnija-kriptopro-jtls</a></td></tr></table>2021-08-05T13:17:10+03:002021-08-05T13:17:10+03:00Евгений Афанасьев<table class="content postContainer_Alt" width="100%"><tr><td>Код верный, но сертификаты в логе, видимо, все представлены BC. Можете включить полное (ALL) логирование для SSLLogger и JCPLogger до момента возникновения ошибки?<br /><a rel="nofollow" href="https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/45/6/vkljuchenie-zhurnlirovnija-kriptopro-jcp" title="https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/45/6/vkljuchenie-zhurnlirovnija-kriptopro-jcp">https://support.cryptopr...nlirovnija-kriptopro-jcp</a><br /><a rel="nofollow" href="https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/59/6/vkljuchenie-zhurnlirovnija-kriptopro-jtls" title="https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/59/6/vkljuchenie-zhurnlirovnija-kriptopro-jtls">https://support.cryptopr...lirovnija-kriptopro-jtls</a></td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid126435:1ошибка публичного ключа при наличии BouncyCastle в проекте<table class="content postContainer" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: Евгений Афанасьев <a href="/forum2/default.aspx?g=posts&m=126434#post126434"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote><div class="quote"><span class="quotetitle">Автор: long76 <a href="/forum2/default.aspx?g=posts&m=126430#post126430"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote><div class="quote"><span class="quotetitle">Автор: Евгений Афанасьев <a href="/forum2/default.aspx?g=posts&m=126425#post126425"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote>Можете полный стек ошибки приложить? </div></div><br /><br />[attach]9859[/attach]</div></div><br /><br />1. JCP у вас JCP 2.0.41789?<br />2. SSLContext создается в вашем коде? Можете показать код?<br /><br /></div></div><br /><br />1. да <br />2. да<br /><br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-java">System.setProperty("com.sun.security.enableCRLDP", "true");
KeyStore ks;
try {
ks = KeyStore.getInstance("HDImageStore", "JCP");
} catch (KeyStoreException e) {
LOG.log(Level.SEVERE, "Ошибка чтения KeyStore с именем 'HDImageStore'", e);
throw new RuntimeException(e);
} catch (NoSuchProviderException e) {
LOG.log(Level.SEVERE, "Не установлен криптопровайдер JCP", e);
throw new RuntimeException(e);
}
try {
ks.load(null, null);
} catch (NoSuchAlgorithmException | CertificateException e) {
LOG.log(Level.SEVERE, "Ошибка загрузки KeyStore с именем 'HDImageStore'", e);
throw new RuntimeException(e);
}
KeyManagerFactory kmf;
try {
kmf = KeyManagerFactory.getInstance("GostX509", "JTLS");
} catch (NoSuchAlgorithmException e) {
LOG.log(Level.SEVERE, "Ошибка создания фабрики KeyManagerFactory 'GostX509'", e);
throw new RuntimeException(e);
} catch (NoSuchProviderException e) {
LOG.log(Level.SEVERE, "Не установлен криптопровайдер JTLS", e);
throw new RuntimeException(e);
}
try {
kmf.init(ks, "password".toCharArray());
} catch (KeyStoreException | NoSuchAlgorithmException | UnrecoverableKeyException e) {
LOG.log(Level.SEVERE, "Ошибка инициализации фабрики KeyManagerFactory 'GostX509'", e);
throw new RuntimeException(e);
}
KeyStore trustedKeyStore;
try {
trustedKeyStore = KeyStore.getInstance("JKS", "SUN");
trustedKeyStore.load(new FileInputStream(cacertsPath), cacertsPassword.toCharArray());
} catch (Exception e) {
LOG.log(Level.SEVERE, String.format("Ошибка загрузки cacerts. Путь %s, пароль %s", cacertsPath, cacertsPassword), e);
throw new RuntimeException(e);
}
TrustManagerFactory tmf;
try {
tmf = TrustManagerFactory.getInstance("GostX509", "JTLS");
tmf.init(trustedKeyStore);
} catch (Exception e) {
LOG.log(Level.SEVERE, "Ошибка инициализации TrustManager", e);
throw new RuntimeException(e);
}
SSLContext sslContext;
try {
sslContext = SSLContext.getInstance("GostTLSv1.2", "JTLS");
} catch (NoSuchAlgorithmException | NoSuchProviderException e) {
LOG.log(Level.SEVERE, "Окружение не поддерживает алгоритм шифрования GostTLSv1.2", e);
throw new RuntimeException(e);
}
SecureRandom secureRandom;
try {
secureRandom = SecureRandom.getInstance("CPRandom", "JCP");
} catch (NoSuchAlgorithmException | NoSuchProviderException e) {
LOG.log(Level.SEVERE, "Ошибка инициализации SecureRandom 'CPRandom'", e);
throw new RuntimeException(e);
}
sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), secureRandom);
</code></pre>
</div></div></td></tr></table>2021-08-05T10:24:15+03:002021-08-05T10:24:15+03:00long76<table class="content postContainer" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: Евгений Афанасьев <a href="/forum2/default.aspx?g=posts&m=126434#post126434"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote><div class="quote"><span class="quotetitle">Автор: long76 <a href="/forum2/default.aspx?g=posts&m=126430#post126430"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote><div class="quote"><span class="quotetitle">Автор: Евгений Афанасьев <a href="/forum2/default.aspx?g=posts&m=126425#post126425"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote>Можете полный стек ошибки приложить? </div></div><br /><br />[attach]9859[/attach]</div></div><br /><br />1. JCP у вас JCP 2.0.41789?<br />2. SSLContext создается в вашем коде? Можете показать код?<br /><br /></div></div><br /><br />1. да <br />2. да<br /><br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-java">System.setProperty("com.sun.security.enableCRLDP", "true");
KeyStore ks;
try {
ks = KeyStore.getInstance("HDImageStore", "JCP");
} catch (KeyStoreException e) {
LOG.log(Level.SEVERE, "Ошибка чтения KeyStore с именем 'HDImageStore'", e);
throw new RuntimeException(e);
} catch (NoSuchProviderException e) {
LOG.log(Level.SEVERE, "Не установлен криптопровайдер JCP", e);
throw new RuntimeException(e);
}
try {
ks.load(null, null);
} catch (NoSuchAlgorithmException | CertificateException e) {
LOG.log(Level.SEVERE, "Ошибка загрузки KeyStore с именем 'HDImageStore'", e);
throw new RuntimeException(e);
}
KeyManagerFactory kmf;
try {
kmf = KeyManagerFactory.getInstance("GostX509", "JTLS");
} catch (NoSuchAlgorithmException e) {
LOG.log(Level.SEVERE, "Ошибка создания фабрики KeyManagerFactory 'GostX509'", e);
throw new RuntimeException(e);
} catch (NoSuchProviderException e) {
LOG.log(Level.SEVERE, "Не установлен криптопровайдер JTLS", e);
throw new RuntimeException(e);
}
try {
kmf.init(ks, "password".toCharArray());
} catch (KeyStoreException | NoSuchAlgorithmException | UnrecoverableKeyException e) {
LOG.log(Level.SEVERE, "Ошибка инициализации фабрики KeyManagerFactory 'GostX509'", e);
throw new RuntimeException(e);
}
KeyStore trustedKeyStore;
try {
trustedKeyStore = KeyStore.getInstance("JKS", "SUN");
trustedKeyStore.load(new FileInputStream(cacertsPath), cacertsPassword.toCharArray());
} catch (Exception e) {
LOG.log(Level.SEVERE, String.format("Ошибка загрузки cacerts. Путь %s, пароль %s", cacertsPath, cacertsPassword), e);
throw new RuntimeException(e);
}
TrustManagerFactory tmf;
try {
tmf = TrustManagerFactory.getInstance("GostX509", "JTLS");
tmf.init(trustedKeyStore);
} catch (Exception e) {
LOG.log(Level.SEVERE, "Ошибка инициализации TrustManager", e);
throw new RuntimeException(e);
}
SSLContext sslContext;
try {
sslContext = SSLContext.getInstance("GostTLSv1.2", "JTLS");
} catch (NoSuchAlgorithmException | NoSuchProviderException e) {
LOG.log(Level.SEVERE, "Окружение не поддерживает алгоритм шифрования GostTLSv1.2", e);
throw new RuntimeException(e);
}
SecureRandom secureRandom;
try {
secureRandom = SecureRandom.getInstance("CPRandom", "JCP");
} catch (NoSuchAlgorithmException | NoSuchProviderException e) {
LOG.log(Level.SEVERE, "Ошибка инициализации SecureRandom 'CPRandom'", e);
throw new RuntimeException(e);
}
sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), secureRandom);
</code></pre>
</div></div></td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid126434:1ошибка публичного ключа при наличии BouncyCastle в проекте<table class="content postContainer_Alt" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: long76 <a href="/forum2/default.aspx?g=posts&m=126430#post126430"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote><div class="quote"><span class="quotetitle">Автор: Евгений Афанасьев <a href="/forum2/default.aspx?g=posts&m=126425#post126425"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote>Можете полный стек ошибки приложить? </div></div><br /><br />[attach]9859[/attach]</div></div><br /><br />1. JCP у вас JCP 2.0.41789?<br />2. SSLContext создается в вашем коде? Можете показать код?<br /><br /></td></tr></table>2021-08-05T10:08:59+03:002021-08-05T10:08:59+03:00Евгений Афанасьев<table class="content postContainer_Alt" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: long76 <a href="/forum2/default.aspx?g=posts&m=126430#post126430"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote><div class="quote"><span class="quotetitle">Автор: Евгений Афанасьев <a href="/forum2/default.aspx?g=posts&m=126425#post126425"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote>Можете полный стек ошибки приложить? </div></div><br /><br />[attach]9859[/attach]</div></div><br /><br />1. JCP у вас JCP 2.0.41789?<br />2. SSLContext создается в вашем коде? Можете показать код?<br /><br /></td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid126433:1ошибка публичного ключа при наличии BouncyCastle в проекте<table class="content postContainer" width="100%"><tr><td>не подскажете какой KeySpec использовать?</td></tr></table>2021-08-05T09:32:43+03:002021-08-05T09:32:43+03:00long76<table class="content postContainer" width="100%"><tr><td>не подскажете какой KeySpec использовать?</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid126430:1ошибка публичного ключа при наличии BouncyCastle в проекте<table class="content postContainer_Alt" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: Евгений Афанасьев <a href="/forum2/default.aspx?g=posts&m=126425#post126425"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote>Можете полный стек ошибки приложить? </div></div><br /><br />[attach]9859[/attach]</td></tr></table>2021-08-05T08:39:10+03:002021-08-05T08:39:10+03:00long76<table class="content postContainer_Alt" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: Евгений Афанасьев <a href="/forum2/default.aspx?g=posts&m=126425#post126425"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote>Можете полный стек ошибки приложить? </div></div><br /><br />[attach]9859[/attach]</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid126425:1ошибка публичного ключа при наличии BouncyCastle в проекте<table class="content postContainer" width="100%"><tr><td>Можете полный стек ошибки приложить? </td></tr></table>2021-08-04T18:49:00+03:002021-08-04T18:49:00+03:00Евгений Афанасьев<table class="content postContainer" width="100%"><tr><td>Можете полный стек ошибки приложить? </td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid126402:1ошибка публичного ключа при наличии BouncyCastle в проекте<table class="content postContainer_Alt" width="100%"><tr><td>Пока необходимости в CertificateFactory не было. <br />Для CertificateFactory аналогично KeyFactory нужно было бы указывать провайдер, если требуется специфическая factory.</td></tr></table>2021-08-04T15:04:19+03:002021-08-04T15:04:19+03:00Евгений Афанасьев<table class="content postContainer_Alt" width="100%"><tr><td>Пока необходимости в CertificateFactory не было. <br />Для CertificateFactory аналогично KeyFactory нужно было бы указывать провайдер, если требуется специфическая factory.</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid126401:1ошибка публичного ключа при наличии BouncyCastle в проекте<table class="content postContainer" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: Евгений Афанасьев <a href="/forum2/default.aspx?g=posts&m=126395#post126395"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote>1. Кем парсятся (в вашем коде или внутри wildlfy)? Обычно это место вроде KeyFactory keyFactory = KeyFactory.getInstance(...); PublicKey pk = keyFactory.generatePublic(...). <br />2. KeyFactory.getInstance без указания имени провайдера вторым аргументом приведет к тому, что будет выбрана реализация, умеющая работать с открытыми ГОСТ ключами того провайдера, который выше в списке провайдеров. И, видимо, им оказывается BC. Если п.1 выполняется в вашем коде, то вторым параметром KeyFactory.getInstance(...) можно прописать JCP.PROVIDER_NAME.</div></div><br /><br />к сожалению пока не нашел такого места, но появился вопрос почему в криптопро нет CertificateFactory? можно было бы динамически загрузить сертификат с нужным PublicKey и добавить его в KeyStore.</td></tr></table>2021-08-04T14:29:15+03:002021-08-04T14:29:15+03:00long76<table class="content postContainer" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: Евгений Афанасьев <a href="/forum2/default.aspx?g=posts&m=126395#post126395"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote>1. Кем парсятся (в вашем коде или внутри wildlfy)? Обычно это место вроде KeyFactory keyFactory = KeyFactory.getInstance(...); PublicKey pk = keyFactory.generatePublic(...). <br />2. KeyFactory.getInstance без указания имени провайдера вторым аргументом приведет к тому, что будет выбрана реализация, умеющая работать с открытыми ГОСТ ключами того провайдера, который выше в списке провайдеров. И, видимо, им оказывается BC. Если п.1 выполняется в вашем коде, то вторым параметром KeyFactory.getInstance(...) можно прописать JCP.PROVIDER_NAME.</div></div><br /><br />к сожалению пока не нашел такого места, но появился вопрос почему в криптопро нет CertificateFactory? можно было бы динамически загрузить сертификат с нужным PublicKey и добавить его в KeyStore.</td></tr></table>