Статус: Участник
Группы: Участники
Зарегистрирован: 14.06.2020(UTC) Сообщений: 10
Сказал(а) «Спасибо»: 1 раз
|
Добрый день! Помогите, пожалуйста, разобраться. Требуется настроить HTTPS для приложения на SpringBoot. Есть контейнер закрытого ключа, находящийся в C:\Users\user\AppData\Local\Crypto Pro\mycont.000 Идентификатор контейнера: lp-11cb2070-f102-41c8-8a3a-6bc8f87eb66b Настройки для SpringBoot сделаны следующие: server: port: 8443 http2: enabled: true ssl: protocol: GostTLS enabled: true key-store-provider: JCP key-store: C:\Users\user\AppData\Local\Crypto Pro key-store-type: HDImageStore ciphers: TLS_CIPHER_2012,TLS_CIPHER_2001 key-store-password: 1234 key-alias: lp-11cb2070-f102-41c8-8a3a-6bc8f87eb66b enabled-protocols: TLSv1.2,GostTLS,GostTLSv1.1,GostTLSv1.2 В коде соответственно прописано: public static void main(String[] args) { Security.addProvider(new JCP()); SpringApplication.run(MyApplication.class, args); } При попытке запуска выдаётся ошибка Caused by: org.springframework.boot.web.server.WebServerException: Could not load key store 'C:\Users\user\AppData\Local\Crypto Pro' .... Caused by: java.io.IOException: Неверный формат хранилища. at ru.CryptoPro.JCP.KeyStore.TrustStore.engineLoad(Unknown Source) ~[JCP-2.0.40132-A.jar:40132-A] at ru.CryptoPro.JCP.KeyStore.JCPKeyStore.engineLoad(Unknown Source) ~[JCP-2.0.40132-A.jar:40132-A] at java.security.KeyStore.load(KeyStore.java:1479) ~[?:?]
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Здравствуйте. В случае JCP, фактически, нет понятия файлового ключевого хранилища вроде pfx, т.к. ключевой контейнер - это папка вида xxxxxxxx.yyy. Поэтому надо либо убрать key-store совсем, либо (если первое нельзя сделать) в качестве key-store укажите не место хранения таких контейнеров, а файловое хранилище доверенных корневых сертификатов формата CertStore или иного подходящего. Допустим, если это хранилище формата CertStore, созданное в панели управления JCP или с помощью keytool, то запись может выглядеть так: Другое дело, что в приведенном вами конфиге должна быть возможность указать trust-store. Оно необходимо для проверки цепочки сертификатов другой стороны. Конфиг должен выглядеть ориентировочно так: 1) если можно без key-store: Код:
ssl:
protocol: GostTLS
enabled: true
key-store-provider: JCP
key-store-type: HDImageStore
ciphers: TLS_CIPHER_2012,TLS_CIPHER_2001
key-store-password: 1234
key-alias: lp-11cb2070-f102-41c8-8a3a-6bc8f87eb66b
enabled-protocols: TLSv1.2,GostTLS,GostTLSv1.1,GostTLSv1.2
trust-store-provider: JCP
trust-store: C:\my.store
trust-store-type: CertStore
trust-store-password: 1234
2) если без key-store нельзя: Код:
ssl:
protocol: GostTLS
enabled: true
key-store-provider: JCP
key-store: C:\my.store
key-store-type: HDImageStore
ciphers: TLS_CIPHER_2012,TLS_CIPHER_2001
key-store-password: 1234
key-alias: lp-11cb2070-f102-41c8-8a3a-6bc8f87eb66b
enabled-protocols: TLSv1.2,GostTLS,GostTLSv1.1,GostTLSv1.2
trust-store-provider: JCP
trust-store: C:\my.store
trust-store-type: CertStore
trust-store-password: 1234
В примерах пароль trust store совпадает с паролем к ключевому контейнеру, возможно, это не обязательно. trust store может быть иного формата, например, JKS с указанием этого типа. key-alias тут, скорее всего, не нужен (не влияет). В enabled-protocols, возможно, надо перечислить TLSv.1.2,TLSv.1.1,TLSv1 Отредактировано пользователем 28 июня 2020 г. 14:20:33(UTC)
| Причина: Не указана |
|
 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 14.06.2020(UTC) Сообщений: 10
Сказал(а) «Спасибо»: 1 раз
|
1) Похоже, что совсем без key-store нельзя - выдаёт ошибку: Код:Caused by: org.springframework.boot.web.server.WebServerException: Could not load key store 'null'
2) А разве store не должен содержать контейнер закрытого ключа? Тогда как будет работать HTTPS? Попробовал создать хранилище Код:keytool -import -file C:\work\cp\CE703E7CB8647BECE9F6613665C1613D1EA05CF4.cer -alias firstCA -keystore my.store
Хранилище создалось. В конфиге прописал его как во втором варианте вашего ответа, но выдаётся ошибка: Код:Caused by: java.io.IOException: Неверный формат хранилища.
at ru.CryptoPro.JCP.KeyStore.TrustStore.engineLoad(Unknown Source) ~[JCP-2.0.40132-A.jar:40132-A]
at ru.CryptoPro.JCP.KeyStore.JCPKeyStore.engineLoad(Unknown Source) ~[JCP-2.0.40132-A.jar:40132-A]
3) Попробовал следующий вариант. Сохранил контейнер mycont.000 в mycont.pfx Пытался экспортировать его в store, но выходит ошибка. Код:C:\work\cp>keytool -providerpath libs/JCP.jar;libs/ASN1P.jar;libs/asn1rt.jar;libs/forms_rt.jar -provider ru.CryptoPro.JCP.JCP -importkeystore -srckeystore mycont.pfx -srcstoretype pkcs1
2 -destkeystore mynew.store -deststoretype pkcs12
Importing keystore o-code-test.pfx to mynew.store...
Enter destination keystore password:
Re-enter new password:
Enter source keystore password:
keytool error: java.security.UnrecoverableKeyException: Get Key failed: Cannot find any provider supporting 1.2.840.113549.1.12.1.80
Или я не туда копаю?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
1) хорошо, попробуйте туда дать trust store, т.к. поддержки файловых хранилищ типа pfx в JCP нет (потому п. 3 тоже не подходит). trust store должно быть формата CertStore, созданное с этим типом в панели управления или в keytool. Команды для keytool можно посмотреть в рук-ве разработчика. 2) раз не указан тип хранилища в keytool, было создано хранилище с типом по умолчанию, т.е. JKS. Оно не подойдет, т.к. вы написали, что нет возможности указать trust-store, только key-store. Значит, нужно CertStore. trust store должно содержать только доверенные корневые сертификаты, а ключевой контейнер будет найден по паролю и типу HDImageStore. Отредактировано пользователем 29 июня 2020 г. 10:40:44(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 14.06.2020(UTC) Сообщений: 10
Сказал(а) «Спасибо»: 1 раз
|
Дело немного продвинулось. С помощью следующей команды создал соответствующий вашему совету CertStore: Код:keytool -providerpath libs/JCP.jar;libs/ASN1P.jar;libs/asn1rt.jar;libs/forms_rt.jar -provider ru.CryptoPro.JCP.JCP -import -file C:\work\cp\CE703E7CB8647BECE9F6613665C1613D1EA05CF
4.cer -alias firstCA -keystore myTrust.store -storepass 12345678 -storetype CertStore
Конфигурация SpringBoot теперь выглядит так: Код:
ssl:
protocol: GostTLS
enabled: true
key-store-provider: JCP
key-store: C:\work\cp\myTrust.store
key-store-type: HDImageStore
ciphers: TLS_CIPHER_2012,TLS_CIPHER_2001
key-store-password: 12345678
key-alias: lp-11cb2070-f102-41c8-8a3a-6bc8f87eb66a
enabled-protocols: TLSv1.2,TLSv1.1,TLSv1
trust-store-provider: JCP
trust-store: C:\work\cp\myTrust.store
trust-store-type: CertStore
trust-store-password: 12345678
Приложение теперь стартует, но при попытке обратиться по адресу https://localhost:8443 В ответ получаю в браузере: На сайте localhost используется неподдерживаемый протокол. ERR_SSL_VERSION_OR_CIPHER_MISMATCH В консоли выводится: Код:Caused by: javax.net.ssl.SSLHandshakeException: no cipher suites in common
at sun.security.ssl.Alert.createSSLException(Alert.java:131) ~[?:?]
at sun.security.ssl.Alert.createSSLException(Alert.java:117) ~[?:?]
Как быть дальше?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
КриптоПро CSP установлен и браузер - Internet Explorer (тут проще проверять)? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 14.06.2020(UTC) Сообщений: 10
Сказал(а) «Спасибо»: 1 раз
|
Да, КриптоПро CSP 5.0.11455 KC1 IE 11.0.9600.19596
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
1. В папке /var/opt/cprocsp/keys/<user> лежит контейнер для сервера? Видимо, контейнер с алиасом lp-11cb2070-f102-41c8-8a3a-6bc8f87eb66a и паролем 12345678 типа HDImageStore. Контейнер доступен пользователю <user>, под которым запускается приложение? Я бы еще предложил убрать параметр key-alias. 2. В сертификате сервера (в его ключевом контейнере) должна быть политика "серверная аутентификация". Она есть? 3. Еще, возможно, могут быть неточности в протоколах: Код:
protocol: GostTLS
enabled-protocols: TLSv1.2,TLSv1.1,TLSv1
Возможно, в enabled-protocols тоже надо указать GostTLSv1.2,GostTLSv1.1,GostTLSv1 Нужен лог JTLS: https://support.cryptopr...lirovnija-kriptopro-jtls с уровнем ALL Отредактировано пользователем 29 июня 2020 г. 16:16:06(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 14.06.2020(UTC) Сообщений: 10
Сказал(а) «Спасибо»: 1 раз
|
1. Система Windows Контейнер с alias'ом lp-11cb2070-f102-41c8-8a3a-6bc8f87eb66a и паролем 12345678 типа HDImageStore лежит в папке C:\Users\user\AppData\Local\Crypto Pro В Chrome установлен плагин КриптоПро, через который можно подписывать, так что контейнер работает. Попробовал убрать key-alias - результат тот же 2. Имеется в виду в свойствах сертификата контейнера поле "Политика сертификата"? Если она, то у меня такая: [1]Политика сертификата: Идентификатор политики=Класс средства ЭП КС1 [2]Политика сертификата: Идентификатор политики=Класс средства ЭП КС2 3. На попытки добавить GostTLSv1.2,GostTLSv1.1,GostTLSv1 выходит ошибка Код:java.lang.IllegalArgumentException: Unsupported protocolGostTLSv1.2
Попробовал сконфигурировать логи, пока никаких изменений выводе. Всё та же ошибка "no cipher suites in common". Прилагаю лог.  Logi ssl neudachnogo zaprosa.txt (63kb) загружен 2 раз(а).К слову, нашёл более простой способ вывода ssl логов без настройки в файле logging.properties Для этого нужно при запуске программы добавить параметр: -Djavax.net.debug=ssl,handshake,trustmanager
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
2. Я имел в виду: Проверка подлинности сервера (1.3.6.1.5.5.7.3.1) Это расширение должно быть в серверном сертификате. 3. В логе нет ни слова про CryptoPro, в стеке ошибки - тоже. Код:
javax.net.ssl.SSLHandshakeException: no cipher suites in common
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131)
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:308)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:264)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:255)
at java.base/sun.security.ssl.ServerHello$T12ServerHelloProducer.chooseCipherSuite(ServerHello.java:461)
at java.base/sun.security.ssl.ServerHello$T12ServerHelloProducer.produce(ServerHello.java:294)
at java.base/sun.security.ssl.SSLHandshake.produce(SSLHandshake.java:436)
at java.base/sun.security.ssl.ClientHello$T12ClientHelloConsumer.consume(ClientHello.java:1101)
at java.base/sun.security.ssl.ClientHello$ClientHelloConsumer.onClientHello(ClientHello.java:851)
at java.base/sun.security.ssl.ClientHello$ClientHelloConsumer.consume(ClientHello.java:810)
at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:392)
at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:450)
at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1078)
at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1065)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask.run(SSLEngineImpl.java:1012)
SSL-реализация из java, не cpSSL (пакет ru.CryptoPro.ssl). Возможно, где-то надо указать еще и провайдер - "JTLS", или все-таки как-то обозначить точно протокол - "GostTLS", так как имя протокола - уникальное, в отличие, например, от "TLSv1". P.S. Цитата: нашёл более простой способ вывода ssl логов без настройки в файле logging.properties Для этого нужно при запуске программы добавить параметр: -Djavax.net.debug=ssl,handshake,trustmanager
Да, т.к. работала реализация Java JSSE провайдера, а не cpSSL. Отредактировано пользователем 30 июня 2020 г. 11:51:07(UTC)
| Причина: Не указана |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close