В рамках этого репозитория реализован пример обращения к удостоверяющему центру (УЦ) CryptoPro по двухстороннему ГОСТ TLS соединению. Код написан на языке Kotlin под JVM 17. Используется криптопровайдер CryptoPro CSP 5.0.13000
ГОСТ TLS
это российский стандарт шифрования, разработанный для обеспечения безопасности интернет-соединений. Он основан на международном стандарте TLS (Transport Layer Security), но использует российские криптографические алгоритмы, такие как ГОСТ 28147-89 и ГОСТ Р 34.10-2012. ГОСТ TLS обеспечивает конфиденциальность, целостность и аутентификацию данных, передаваемых по сети, и используется в различных областях, включая электронное правительство, банковскую сферу и другие секторы, где требуется высокий уровень защиты информации.CryptoPro Удостоверяющий Центр
это ключевой компонент инфраструктуры открытых ключей (PKI), предоставляющий услуги по выпуску и управлению цифровыми сертификатами. УЦ КриптоПро обеспечивает создание и проверку электронной подписи, подтверждает подлинность пользователей и защищает целостность данных. Он используется в различных сферах, где требуется юридически значимый электронный документооборот, включая государственные органы, коммерческие организации и частных лиц. КриптоПро УЦ поддерживает российские криптографические стандарты, такие как ГОСТ Р 34.10-2012, и интегрируется с различными программными продуктами для работы с электронной подписью.CryptoPro JCP
это программный компонент, предоставляющий Java-приложениям доступ к российским криптографическим алгоритмам. Он позволяет разработчикам интегрировать функции шифрования, электронной подписи и хэширования в свои Java-приложения, используя стандарты ГОСТ. КриптоПро JCP совместим с различными операционными системами и аппаратными платформами, что обеспечивает кроссплатформенную поддержку криптографических функций.- Нужно установить набор библиотек в папку
./libs
из CryptoPro JCSP с официального сайта (часто версии несовместимы с CSP) - Установить корневой сертификат УЦ в CryptoPro CSP "Сертификаты > Доверенные корневые центры сертификации"
- Установить клиентский сертификат в CryptoPro CSP "Сертификаты > Личное"
- Экспортировать ключи в CryptoPro CSP "Сертификаты > Личное > {Выбрать нужный сертификат}" > Экспортировать ключи (в формате .PFX, с цепочкой сертификатов)
- Указать в
src/main/resources/gost-tls-client.properties
правильный путь к.pfx
, указанный ранее пароль иurl
для вызова в УЦ
Иногда не получается подключиться к УЦ, возможные причины:
- Сертификаты зашифрованы другим алгоритмом
- Несовместимость версий CryptoPro JCSP и CSP
- Несовместимость версий CryptoPro JCSP и JVM
JCP
добавляется в Security Providers доJCSP
- Параметр
com.sun.security.enableCRLDP
в состоянииfalse
Чтобы упростить отладку, рекомендую зайти в один из файлов JRE, отвечающий за логирование
и выставить значение ALL
для логгеров при помощи команды.
echo \
"java.util.logging.ConsoleHandler.level=ALL
ru.CryptoPro.JCP.tools.JCPLogger.level=ALL
ru.CryptoPro.JCSP.JCSPLogger.level=ALL
ru.CryptoPro.JCSP.CAPILogger.level=ALL" \
>> $JAVA_HOME/conf/logging.properties