TYPE=1.2.840.113549.1.12.1.80

TYPE=1.2.840.113549.1.12.1.80 Электронная цифровая подпись


Offline

lifayk

 

Оставлено
:

14 августа 2021 г. 14:33:58(UTC)

Здравствуйте.

Пытаюсь сгенерировать и загрузить пару RSA+сертификат в КриптоПРО 4.
Получаю ошибку:
Invalid flags specified.
[ErrorCode: 0x80090009]

Подскажите, пожалуйста, что я делаю не так?

Код:

$ ./test.sh
+ dpkg -l
+ grep cpro
ii  cprocsp-cpopenssl-64                       4.0.9963-5                                 amd64        OpenSSL. Build 9963.
ii  cprocsp-cpopenssl-base                     4.0.9963-5                                 all          Openssl common Build 9963.
ii  cprocsp-cpopenssl-devel                    4.0.9963-5                                 all          Openssl devel Build 9963.
ii  cprocsp-curl-64                            4.0.9963-5                                 amd64        CryptoPro Curl shared library and binaris. Build 9963.
ii  cprocsp-rsa-64                             4.0.9963-5                                 amd64        CryptoPro RSA CSP. Build 9963.
ii  cprocsp-stunnel-64                         4.0.9963-5                                 amd64        Universal SSL/TLS tunnel.
ii  lsb-cprocsp-base                           4.0.9963-5                                 all          CryptoPro CSP directories and scripts. Build 9963.
ii  lsb-cprocsp-ca-certs                       4.0.9963-5                                 all          CA certificates.  Build 9963.
ii  lsb-cprocsp-capilite-64                    4.0.9963-5                                 amd64        CryptoAPI lite. Build 9963.
ii  lsb-cprocsp-kc1-64                         4.0.9963-5                                 amd64        CryptoPro CSP KC1. Build 9963.
ii  lsb-cprocsp-rdr-64                         4.0.9963-5                                 amd64        CryptoPro CSP readers. Build 9963.
+ /opt/cprocsp/cp-openssl/bin/amd64/openssl version
OpenSSL 1.0.2k  26 Jan 2017
+ /opt/cprocsp/cp-openssl/bin/amd64/openssl req -x509 -newkey rsa:1024 -keyout key.pem -out cert.pem -days 365 -nodes -subj /C=US/ST=Oregon/L=Portland/O=Company Name/OU=Org/CN=www.example.com
Generating a 1024 bit RSA private key
..............++++++
........++++++
writing new private key to 'key.pem'
-----
+ /opt/cprocsp/cp-openssl/bin/amd64/openssl pkcs12 -export -inkey key.pem -in cert.pem -out testpfx.pfx -nodes -passout pass:123
+ /opt/cprocsp/cp-openssl/bin/amd64/openssl pkcs12 -info -in testpfx.pfx -noout -passin pass:123
MAC Iteration 2048
MAC verified OK
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048
Certificate bag
PKCS7 Data
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 2048
+ /opt/cprocsp/bin/amd64/certmgr -inst -pfx -file testpfx.pfx -pin 123
Certmgr 1.1 (c) "Crypto-Pro",  2007-2018.
program for managing certificates, CRLs and stores

Error while importing pfx

Invalid flags specified.
[ErrorCode: 0x80090009]
+ tail -3 /var/log/syslog
Aug 14 14:30:01 farm1 certmgr: capi20: pfx_ImportPrivateKey () pfx - pfx_PasswordDeriveEncryptKeyFromAlgIdentifier failed
Aug 14 14:30:01 farm1 certmgr: capi20: pfx_CreatePrivateKeyContext () pfx - pfx_ImportPrivateKey failed
Aug 14 14:30:01 farm1 certmgr: capi20: PFXImportCertStore () pfx - pfx_CreatePrivateKeyContext failed


Offline

Андрей Русев

 

Оставлено
:

27 августа 2021 г. 21:00:47(UTC)

Здравствуйте.
В КриптоПро CSP 4.0 крайне ограниченная поддержка RSA. Попробуйте КриптоПро CSP 5.0 R2 Kraken (build 5.0.12000).


Offline

djuwa4

 

Оставлено
:

16 августа 2021 г. 11:24:07(UTC)

Добрый день!
Я установил КриптоПро CSP, КриптоПро ЭЦП SDK, pycades по мануалу: https://docs.cryptopro.r…es/pycades/pycades-build
Настроил pycades по мануалу в python3 https://docs.cryptopro.r…/pycades/pycades-install
import sys
sys.path.append(r’/path_to_pycades_so’)
import pycades
Результат
>>> pycades.ModuleVersion()
‘0.1.22769’
Установил сертификаты по мануалу https://www.cryptopro.ru…ix-ustanovit-sertifikaty

Что я хочу, я хочу чтобы python3 вместо openssl использовал Крипто ПРО и установленные при помощи certmgr по умолчанию, чтобы когда я делаю API запрос при помощи
библиотеки requests: requests.post(‘https://ssl.croinform.ru:450/api.test?Type=Login&Login=test&Password=test’) все шифрование ssl (https) обрабатывалось через
Крипто ПРО, на данный момент, я вижу по ошибкам, что python3 ищет сертификаты в openssl

Возможно вы сможете мне подсказать, что я еще не доделал, и будет ли вообще работать схема которую я описал?

Отредактировано пользователем 16 августа 2021 г. 11:26:19(UTC)
 | Причина: Не указана


Offline

djuwa4

 

Оставлено
:

16 августа 2021 г. 11:52:23(UTC)


Offline

Ситдиков Денис

 

Оставлено
:

16 августа 2021 г. 15:25:56(UTC)

Добрый день!
pycades и SSL через гостовые алгоритмы никак не связаны.
Возможно, вам стоит искать, как добавить поддержку ГОСТ в openssl. На форуме есть обсуждение.


Offline

djuwa4

 

Оставлено
:

16 августа 2021 г. 15:38:58(UTC)

Автор: Ситдиков Денис Перейти к цитате

Добрый день!
pycades и SSL через гостовые алгоритмы никак не связаны.
Возможно, вам стоит искать, как добавить поддержку ГОСТ в openssl. На форуме есть обсуждение.

Денис, я еще раз уточню, для понимания.
То есть, в моем сценарии, для отправки запросов API через python3 по протокол https (для шифрования сервис использует TLS), pycades не поможет?
И ни какой дополнительной настройки нет ни для python3 не для библиотеки requests.

Денис, тогда можно в кратце, для каких сценариев модуль pycades нужен. Из описания применения модуля мне не очень понятно.


Offline

Ситдиков Денис

 

Оставлено
:

16 августа 2021 г. 16:29:33(UTC)

Автор: djuwa4 Перейти к цитате

Автор: Ситдиков Денис Перейти к цитате

Добрый день!
pycades и SSL через гостовые алгоритмы никак не связаны.
Возможно, вам стоит искать, как добавить поддержку ГОСТ в openssl. На форуме есть обсуждение.

Денис, я еще раз уточню, для понимания.
То есть, в моем сценарии, для отправки запросов API через python3 по протокол https (для шифрования сервис использует TLS), pycades не поможет?
И ни какой дополнительной настройки нет ни для python3 не для библиотеки requests.

Денис, тогда можно в кратце, для каких сценариев модуль pycades нужен. Из описания применения модуля мне не очень понятно.

Да, для отправки запросов API через python3 по протокол https pycades не поможет.
pycades нужен для создания/проверки подписей формата CAdES/XAdES, шифрования/расшифрования данных в формате pkcs7 и сопутствующей работы с сертификатами.

В данной статье делается попытка ответить на вопрос: возможно ли использовать OpenSource библиотеки для работы с ГОСТовыми сертификатами?

Если коротко, то да.

Для проверки использовалась последняя на данный момент версия OpenSSL (1.0.1с), собранная из исходников с поддержкой gost engine

Для начала нужно установить КриптоПро CSP 3.6 R3, поскольку в нем реализована поддержка экспорта сертификатов в формате pfx. Эту часть работ нужно делать в операционной системе Windows. Не буду описывать подробно этот процесс, скажу лишь, что нужно сохранить приватный ключ в формате CryptoPro на флэшку и импортировать его в хранилище “Реестр”. Выгрузив сертификат в файл, например store.pfx (включая приватный ключ), можно вывести приватный ключ в stdout командой

/usr/local/ssl/bin/openssl pkcs12 -info -engine gost -nodes -in ~/store.pfx 

  • -info вывести информацию о содержимом файла в формате pkcs12 (.pfx)
  • -engine использовать указанный криптографический модуль
  • -nodes не нужно шифровать приватный ключ
  • -in входной файл

Если вы получаете ошибку вида “unknown PBE algorithm”

Enter Import Password:MAC Iteration 2000MAC verified OKPKCS7 DataShrouded Keybag: undefined, Iteration 2000Bag Attributes    Microsoft Local Key set:     localKeyID: 01 00 00 00     friendlyName: REGISTRY\\1ba6dcf8-b953-4774-8a9e-de98de071f24    Microsoft CSP Name: Crypto-Pro GOST R 34.10-2001 Cryptographic Service ProviderError outputting keys and certificates140669637789344:error:06074079:digital envelope routines:EVP_PBE_CipherInit:unknown pbe algorithm:evp_pbe.c:167:TYPE=1.2.840.113549.1.12.1.80140669637789344:error:23077073:PKCS12 routines:PKCS12_pbe_crypt:pkcs12 algor cipherinit error:p12_decr.c:83:140669637789344:error:2306A075:PKCS12 routines:PKCS12_item_decrypt_d2i:pkcs12 pbe crypt error:p12_decr.c:130:

То это означает, что вам потребуется другое средство для получения pfx файла, утилитка P12FromGostCSP.exe

    Если вы получаете ошибку вида “unknown digest algorithm”

    Enter Import Password:MAC Iteration 2048Mac verify error: invalid password?140572666472096:error:2306B076:PKCS12 routines:PKCS12_gen_mac:unknown digest algorithm:p12_mutl.c:88:140572666472096:error:2307E06D:PKCS12 routines:PKCS12_verify_mac:mac generation error:p12_mutl.c:122:
    то скорее всего в вашем openssl нет поддержки ГОСТовых алгоритмов либо вы используете не ту копию openssl.

    Если все прошло без ошибок, то в консоли вы получите приватный ключ и сертификат. Скопировав выведенный в консоль приватный ключ (вместе со словами
    —–BEGIN PRIVATE KEY—– и —–END PRIVATE KEY—–) в отдельный
    файл private.key мы сможем с его помощью создавать ЭЦП.

    Команда для генерации примерно следующая:

    /usr/local/ssl/bin/openssl cms -sign -inkey ~/private.key -in ~/file.txt -CAfile ~/CA.cer 
    -signer ~/client.cer -engine gost -out ~/test.sign -outform DER -noattr -binary
    

    • -sign генерация подписи
    • -inkey путь к приватному ключу
    • -in подписываемый файл
    • -CAfile файл УЦ
    • -signer файл с сертификатом, которым осуществляется подпись
    • -engine использовать указанный криптографический модуль
    • -out файл, в который будет записана ЭЦП
    • -outform формат подписи
    • -noattr не добавлять дополнительных аттрибутов в подпись
    • -binary считать подписываемый файл массивом байт, а не текстом

    К сожалению, Bouncy Castle (версии 1.46), хоть в нем и декларируется поддержка ГОСТовых алгоритмов, не может разобрать формат приватного ключа, так что использовать его для генерации ЭЦП на данный момент не представляется возможным.

    UPD:
    Bouncy Castle 1.55 уже умеет работать с такими приватными ключами


    Offline

    tarkhil

     

    Оставлено
    :

    13 января 2022 г. 13:39:31(UTC)

    Добрый день

    Пытаюсь экспортировать ключ+сертификат от Диадока, выданный ООО “ЦИБ-Сервис”.

    Экспортировал в .pfx и скоро вспомнил, что .pfx от КриптоПро несовместим с .pfx от OpenSSL

    Вытащил P12FromGostCSP, но и он не осилил экспорт, мотивировав тем, что

    Цитата:

    ————————————————————-
    P12FromGostCSP Thu Jan 13 13:33:25 2022
    ERROR
    importCSPPrivateKey(): key param: export disabled
    ————————————————————-

    Никто не напомнит, с каким бубном в этом сезоне подходят к вопросу совместимости?


    Offline

    Андрей *

     

    Оставлено
    :

    13 января 2022 г. 13:45:13(UTC)

    Автор: tarkhil Перейти к цитате

    Добрый день

    Пытаюсь экспортировать ключ+сертификат от Диадока, выданный ООО “ЦИБ-Сервис”.

    Не по теме, а зачем? Им нельзя ничего подписывать в 2022 году же…


    Offline

    tarkhil

     

    Оставлено
    :

    13 января 2022 г. 13:52:49(UTC)

    Нам этот ключ дали для работы с диадоком. А что в нем не так?


    Offline

    Андрей *

     

    Оставлено
    :

    13 января 2022 г. 13:59:32(UTC)

    Автор: tarkhil Перейти к цитате

    Нам этот ключ дали для работы с диадоком. А что в нем не так?

    Все УЦ, которые не получили аккредитацию по новым требования – аккредитация прекращена.
    476 ФЗ – если УЦ не получил аккредитацию по новым требованиям – сертификат нельзя использовать после 31.12.2021


    Offline

    tarkhil

     

    Оставлено
    :

    13 января 2022 г. 14:00:21(UTC)

    Каааааак интересно! Ну ок, спасибо, это я провентилирую, а ключ-то как вынуть?


    Offline

    tarkhil

     

    Оставлено
    :

    14 января 2022 г. 12:29:03(UTC)

    Автор: Андрей * Перейти к цитате

    Автор: tarkhil Перейти к цитате

    Добрый день

    Пытаюсь экспортировать ключ+сертификат от Диадока, выданный ООО “ЦИБ-Сервис”.

    Не по теме, а зачем? Им нельзя ничего подписывать в 2022 году же…

    Так, тут я ошибся. Речь о ДРУГОМ сертификате. От Контура.

    Цитата:

    =============================================================
    Trace file started on Fri Jan 14 12:27:23 2022
    =============================================================
    Revision info: ‘Revision number: 1226 Repository URL: lirssl/branches/1.0.2h’
    Initialization: path_lic = ‘C:\Users\tarkh/.P12FromGostCSP’
    Initialization: file path_lic = ‘C:\Users\tarkh/.P12FromGostCSP/LIC.DAT’
    Initialization: date OK
    Initialization: check license SN OK


    P12FromGostCSP Fri Jan 14 12:27:34 2022
    ERROR
    importCSPPrivateKey(): key param: export disabled


    ————————————————————-
    P12FromGostCSP Fri Jan 14 12:27:34 2022
    ERROR
    importCSPPrivateKey() failed for certificate


    Offline

    tarkhil

     

    Оставлено
    :

    14 января 2022 г. 13:36:33(UTC)

    Разобрался. На сегодня танец с бубном выглядит так:

    1. Импортируем сертификат на windows
    2. Где-то в процессе (в следующий раз погляжу) не забываем сделать ключ экспортируемым
    3. После этого p12fromgostcsp выдает .p12, с которым уже можно работать
    4. Задаемся риторическим вопросом “А почему панель КриптоПро не умеет в такое?”


    Offline

    two_oceans

     

    Оставлено
    :

    14 января 2022 г. 13:37:00(UTC)

    Ответ: штатных способов нет. Хотя есть некоторые способы вытаскивания вручную из pfx КриптоПро-стайл, но они и так рассказаны в каком-то из моих сообщений – поиск по форуму в помощь, зачем создавать миллион первую тему о том, что openssl “не понимайт” 1.2.840.113549.1.12.1.80.

    Через ту утилиту P12FromGostCSP можно попробовать, но надо на время экспорта убрать пинкод от контейнера – это сильно повышает вероятность экспорта сторонними утилитами (количество раундов хэширования защищающих ключ снижается с 2000 до 2). Потом можете вернуть пинкод обратно.

    Смущает, что судя по выводу утилиты ключ не экспортируемый? Как тогда экспортировали средствами КриптоПро? Или из pfx снова импортировали и забыли пометить как экспортируемый? в этом случае импортируйте снова и помечайте.

    Автор: tarkhil Перейти к цитате

    Задаемся риторическим вопросом “А почему панель КриптоПро не умеет в такое?”

    Требование к защите ключа такое. Никуда не отпущать.

    Отредактировано пользователем 14 января 2022 г. 13:38:40(UTC)
     | Причина: Не указана


    Offline

    Андрей *

     

    Оставлено
    :

    14 января 2022 г. 14:05:14(UTC)

    Автор: tarkhil Перейти к цитате

    Разобрался. На сегодня танец с бубном

    надеюсь сертификат не квалифицированный (шутка, конечно квал).. что там насчёт соблюдения требований ФЗ\ФСБ?


    Offline

    tarkhil

     

    Оставлено
    :

    14 января 2022 г. 15:32:36(UTC)

    Автор: Андрей * Перейти к цитате

    Автор: tarkhil Перейти к цитате

    Разобрался. На сегодня танец с бубном

    надеюсь сертификат не квалифицированный (шутка, конечно квал).. что там насчёт соблюдения требований ФЗ\ФСБ?

    Каких именно? По сертификации эмитента? Все ок, я не от того сертификата данные написал (и, чтоб два раза не вставать, уже его снес)

    Решения nginx и Apache HTTP Server (далее — Apache) — два самых широко распространенных веб-сервера с открытым исходным кодом в мире. Каждый из них обладает собственными преимуществами, при этом одной из основных функциональных возможностей обоих серверов является построение защищенного с использованием протокола TLS соединения между клиентом и сервером с обеспечением целостности и конфиденциальности передаваемых данных, в том числе с применением российских криптографических алгоритмов ГОСТ.

    Возможность использования TLS с ГОСТ обеспечивается с помощью вызова функций СКЗИ КриптоПро CSP (далее — СКЗИ):

    • в nginx — применением к исходным текстам специальных патчей, входящих в состав отдельных версий СКЗИ;
    • в Apache — использованием бинарного модуля mod_ssl из состава СКЗИ.

    Таким образом, СКЗИ можно эксплуатировать совместно с серверами nginx и Apache определенных версий для реализации TLS с ГОСТ без проведения исследований по оценке влияния указанных серверов на СКЗИ, что делает возможным использование данного решения для обеспечения криптографической защиты передаваемых между клиентом и сервером конфиденциальных данных (в том числе персональных данных) в соответствии с требованиями законодательства РФ по информационной безопасности. При эксплуатации иных версий nginx/Apache или СКЗИ проведение оценки влияния является обязательным во всех случаях, предусмотренных законодательством. Подробнее о работе TLS с ГОСТ можно ознакомиться в нашей статье.

    Процесс установки и настройки совместной работы СКЗИ с веб-серверами nginx описан в Руководстве администратора безопасности к соответствующей версии СКЗИ. Необходимые компоненты для работы решения можно скачать в составе СКЗИ. Программное обеспечение nginx и Apache не входит в комплект поставки СКЗИ. Исходные тексты nginx необходимо скачать с официального сайта с последующей проверкой контрольной суммы, а дистрибутив Apache обычно входит в состав ОС.

    По сравнению со штатным использованием серверов nginx и Apache, при реализации TLS с ГОСТ на nginx или Apache в качестве криптографического ядра вместо OpenSSL используется СКЗИ КриптоПро CSP и поэтому функциональность решения имеет некоторые особенности:

    • Общий кэш при работе в рабочих процессах отсутствует;
    • Поддержка директив конфигурации, указанных в файле конфигурации и относящихся к TLS, реализована частично.

    Для реализации TLS с ГОСТ на nginx или Apache необходимо приобрести годовую или бессрочную клиентскую лицензию (обязательно при реализации двухстороннего TLS с ГОСТ), специальную бессрочную серверную лицензию с поддержкой TLS и при необходимости сертификаты технической поддержки на указанные лицензии. С полным перечнем необходимых для реализации решения лицензий и сертификатов технической поддержки можно ознакомиться на нашем сайте.

    В настоящее время в состав СКЗИ КриптоПро CSP версий 5.0 R2 KC1 (исполнение 1-Base) и 5.0 R2 КС2 (исполнение 2-Base) входят следующие версии компонентов решения для ОС семейства Linux:

    • Патч для nginx версии 1.18.0;
    • Модуль mod_ssl для Apache версии 2.4.25+ (для ОС Astra Linux SE) и Apache 2.4.41+ (для других ОС семейства Linux).

    Отдельно стоит отметить возможность реализации TLS с ГОСТ на веб-сервере Apache Tomcat, используемом для исполнения веб-приложений, написанных на Java. Для решения данной задачи можно использовать криптопровайдер КриптоПро JCP, реализующий SSL и TLS протоколы на базе российских криптографических алгоритмов ГОСТ. При этом, в случае использования КриптоПро JCP 2.0 R4, проведение оценки влияния Apache Tomcat на СКЗИ не потребуется.

    В качестве альтернативы предлагаем также рассмотреть более функциональное и производительное решение — TLS-шлюз и VPN КриптоПро NGate, сертифицированный ФСБ России и позволяющий одновременно реализовать TLS с ГОСТ для большого количества веб-серверов, также без необходимости проведения оценки влияния среды функционирования.

    • Страница для печатиСтраница для печати

    Вариант 2: gost_capi.dll (для OpenSSL <1.1.0) или gostengy.dll (для OpenSSL >= 1.1.0) – библиотека от КриптоПро  для работы установленного КриптоПро CSP через интерфейсы OpenSSL (работает только при установленном КриптоПро CSP, т.к. вся работа с ГОСТ будет осуществляться КриптоПро CSP, но опосредованно через интерфейсы OpenSSL).

    Аналогично, как и с библиотекой gost.dll, версия библиотеки зависит от используемой версии OpenSSL:

    • для OpenSSL >= 1.1.0: необходимо использовать библиотеку gostengy, поддерживает ГОСТ 2012

    Скачать необходимые версии библиотеки можно на сайте КриптоПро . Более подробное описание использования можно найти у них же на форуме.

    Развертывание :

    1. Создать файл конфигурации OpenSSL:

      openssl_conf = openssl_def
      
      [openssl_def]
      engines = engine_section
      
      [engine_section]
      gost = gostengy_section
      
      [gostengy_section]
      engine_id = gostengy
      dynamic_path = ./gostengy.dll
      default_algorithms = CIPHERS, DIGESTS, PKEY, PKEY_CRYPTO, PKEY_ASN1
          

      В указанном примере файла конфигурации предполагается, что библиотека поддержки алгоритмов ГОСТ находится рядом с исполняемыми файлами. Но файл конфигурации может быть расположен в ином месте. В таком случае необходимо указать полный, а не относительный путь к библиотеке. Кстати, в качестве разделителя каталогов пути необходимо использовать прямой слэш “/” как в Unix, а не обратный, как в Windows, либо экранировать обратные слэши еще одним обратным слэшем – “\\”.

      В случае использования существующего файла конфигурации, например поставляемого с самим OpenSSL, необходимо 1-ю строчку (openssl_conf = openssl_def) вставить в начало этого файла, а остальные строки в самый конец файла.

      Указанный файл конфигурации является примером, и может быть изменен пользователем в зависимости от требуемых настроек.

    2. Установить системную переменную окружения ОС с именем OPENSSL_CONF и значением указывающим полный путь к файлу конфигурации OpenSSL.
    3. В связи с тем, что КриптоПро не работает с файлами закрытых ключей находящихся в файлах, необходимо использовать приватный ключ находящийся в одном из следующих мест где криптопровайдер КриптоПро сможет его найти и использовать:
      • системное хранилище сертификатов Windows (certmgr.msc) – необходимо предварительно импортировать сертификат содержащий приватный ключ одним из штатных способов
      • хранилища сертификатов самого КриптоПро – необходимо предварительно импортировать сертификат содержащий приватный ключ с помощью инструментов КриптоПро, наприме утилиты certmgr из штатной поставки КриптоПро
      • аппаратный носитель (USB токен, смарт карт) содержащий приватный ключ

      В любом из вышеперечисленном варианте, путь к закрытому ключу нужно указывать не как к файлу, а с помощью расширения для OpenSSL от КриптоПро (gost_capi или gostengy), например – , т.е. по шаблону engine:gost_capi или gostengy:FQDN указанное в сертификате (доменное имя). При непосредственном использовании этого ключа сам криптопровайдер определит его местонахождение, и при необходимости будет иницировать интерактивный процесс запроса разрешения на использование указанного ключа и его пароля. Но в любом случае, приватный ключ должен быть доступен КриптоПро и находиться в одном из вышеуказанных хранилищах, а не в файле.

    4. В файле конфигурации текущего сервиса MillAppServer.conf, который находится рядом с исполняемым файлом в зависимости от используемой разрядности, в элементе найти и изменить (или в случае его отсутствия, добавить) узел для поддержки всех версий ГОСТ – 2012, 2001 и 94, либо для поддержки только версии ГОСТ 2012.

    В случае проблем с использованием настроенного и запущенного сервиса, для проверки его работоспособности рекомендуется использовать утилиту openssl в режиме клиента TLS, с помощью команды openssl s_client -connect 127.0.0.1:443. В случае успешного соединения с сервером в выводе консоли будет указана вся информация об установленном соединении, такая как сертификат, версия протокола TLS, используемый шифр и многое другое. Перед использованием OpenSSL утилиты необходимо аналогично обеспечить настройку файла конфигурации OpenSSL, как указано в пункте 2 и установить системную переменную окружения ОС с именем OPENSSL_CONF, как указано в пункте 3.


    Offline

    kuvschin

     

    Оставлено
    :

    29 марта 2022 г. 16:28:46(UTC)

    Подскажите пожалуйста как получить папку (например, “MySite.001”), содержающую файлы header.key, masks.key, masks2.key, name.key, primary.key, primary2.key – из файлов .key + .crt?
    Есть сертификат с контейнером от минцифры сгенерированные openssl. Нужно чтобы их можно было использовать с криптопро.
    Пробовал конвертировать в .PFX и импортировать виндой 10 и криптопро 5. В винде просто ложится куда-то в винду минуя криптопро и не отображаясь в списке контейнеров. В криптопро выдаёт ошибку записи в контейнер и снова ложится в винду минуя криптопро.


    Offline

    Александр Лавник

     

    Оставлено
    :

    29 марта 2022 г. 19:43:45(UTC)

    Автор: kuvschin Перейти к цитате

    Подскажите пожалуйста как получить папку (например, “MySite.001”), содержающую файлы header.key, masks.key, masks2.key, name.key, primary.key, primary2.key – из файлов .key + .crt?
    Есть сертификат с контейнером от минцифры сгенерированные openssl. Нужно чтобы их можно было использовать с криптопро.
    Пробовал конвертировать в .PFX и импортировать виндой 10 и криптопро 5. В винде просто ложится куда-то в винду минуя криптопро и не отображаясь в списке контейнеров. В криптопро выдаёт ошибку записи в контейнер и снова ложится в винду минуя криптопро.

    Попробуйте так:

    Код:

    openssl pkcs12 -export -out gost.pfx -inkey gost.key -in gost.cer -keypbe gost89


    Offline

    kuvschin

     

    Оставлено
    :

    29 марта 2022 г. 21:18:09(UTC)

    Доброго.
    У меня не cer а crt, вот что получилось

    X:\1>”C:\Program Files\OpenSSL-Win64\bin\openssl.exe” pkcs12 -export -out bsoinsuronline.pfx -inkey bsoinsuronline.key -in bsoinsuronline.crt -keypbe gost89
    Enter Export Password:
    Verifying – Enter Export Password:
    Error creating PKCS12 structure for bsoinsuronline.pfx
    14200000:error:03000079:digital envelope routines:EVP_PBE_CipherInit_ex:unknown pbe algorithm:crypto\evp\evp_pbe.c:109:TYPE=GOST 28147-89
    14200000:error:11800067:PKCS12 routines:PKCS12_item_i2d_encrypt_ex:encrypt error:crypto\pkcs12\p12_decr.c:191:
    14200000:error:11800067:PKCS12 routines:PKCS8_set0_pbe_ex:encrypt error:crypto\pkcs12\p12_p8e.c:80:

    X:\1>


    Offline

    Андрей *

     

    Оставлено
    :

    29 марта 2022 г. 22:40:27(UTC)


    Offline

    kuvschin

     

    Оставлено
    :

    29 марта 2022 г. 23:15:24(UTC)

    OpenSSL-Win64
    TYPE=1.2.840.113549.1.12.1.80 Screenshot_2.jpg (98kb) загружен 16 раз(а).


    Offline

    kuvschin

     

    Оставлено
    :

    31 марта 2022 г. 14:07:02(UTC)

    Господа, что за тишина, вас оскорбила моя версия опенссл?


    Offline

    kuvschin

     

    Оставлено
    :

    1 апреля 2022 г. 17:10:09(UTC)

    Люди, помогите пожалуйста.


    Offline

    TolikTipaTut1

     

    Оставлено
    :

    1 апреля 2022 г. 19:40:16(UTC)

    Код:

    openssl pkcs12 -engine gost -export -inkey prk.pem -in crt.pem -out pfx.pfx -password pass:123 -keypbe gost89 -certpbe gost89 -macalg md_gost12_256
    p12util.x86.exe -p12tocp -rdrfolder .\123 -contname mycont -ex -passp12 123 -infile .\pfx.pfx -noMACVerify -noCPKM


    Offline

    kuvschin

     

    Оставлено
    :

    1 апреля 2022 г. 20:11:04(UTC)

    Доброго .pem у меня нет файлов с таким расширением, только .key и .crt

    Первая строка:

    C:\Users\CO09-3>x:

    X:\>cd 1

    X:\1>”C:\Program Files\OpenSSL-Win64\bin\openssl.exe” pkcs12 -engine gost -export -inkey bsoinsuronline.key -in bsoinsuronline.crt -out pfx.pfx -password pass:123 -keypbe gost89 -certpbe gost89 -macalg md_gost12_256
    Invalid engine “gost”
    18690000:error:12800067:DSO support routines:win32_load:could not load the shared library:crypto\dso\dso_win32.c:108:filename(C:\Program Files\OpenSSL\lib\engines-3\gost.dll)
    18690000:error:12800067:DSO support routines:DSO_load:could not load the shared library:crypto\dso\dso_lib.c:152:
    18690000:error:13000084:engine routines:dynamic_load:dso not found:crypto\engine\eng_dyn.c:422:
    18690000:error:13000074:engine routines:ENGINE_by_id:no such engine:crypto\engine\eng_list.c:430:id=gost
    18690000:error:12800067:DSO support routines:win32_load:could not load the shared library:crypto\dso\dso_win32.c:108:filename(gost.dll)
    18690000:error:12800067:DSO support routines:DSO_load:could not load the shared library:crypto\dso\dso_lib.c:152:
    18690000:error:13000084:engine routines:dynamic_load:dso not found:crypto\engine\eng_dyn.c:422:
    Error creating PKCS12 structure for pfx.pfx
    18690000:error:03000079:digital envelope routines:EVP_PBE_CipherInit_ex:unknown pbe algorithm:crypto\evp\evp_pbe.c:109:TYPE=GOST 28147-89
    18690000:error:11800067:PKCS12 routines:PKCS12_item_i2d_encrypt_ex:encrypt error:crypto\pkcs12\p12_decr.c:191:
    18690000:error:11800067:PKCS12 routines:PKCS12_pack_p7encdata_ex:encrypt error:crypto\pkcs12\p12_add.c:127:

    X:\1>

    До второй не дошло т.к. первая не сработала, да и нет у меня такого файла p12util.x86.exe


    Offline

    TolikTipaTut1

     

    Оставлено
    :

    1 апреля 2022 г. 20:46:41(UTC)

    Так, в сертификате какой алгоритм указан? Чтобы узнать, надо дважды кликнуть по сертификату, и в открывшемся окне выбрать вкладку “Состав”. Нужные поля называются: “Алгоритм подписи” и “Хэш-алгоритм подписи”.

    Отредактировано пользователем 1 апреля 2022 г. 20:47:30(UTC)
     | Причина: Не указана


    Offline

    kuvschin

     

    Оставлено
    :

    1 апреля 2022 г. 21:10:35(UTC)

    sha256RSA
    sha256TYPE=1.2.840.113549.1.12.1.80 Screenshot_1.jpg (18kb) загружен 5 раз(а).


    Offline

    TolikTipaTut1

     

    Оставлено
    :

    1 апреля 2022 г. 21:42:09(UTC)

    Тааааак…… А зачем вам КриптоПро для этого, если у вас RSA-шный серт?


    Offline

    kuvschin

     

    Оставлено
    :

    1 апреля 2022 г. 22:01:04(UTC)

    Ну как – эта хрень позволяет серверу себя удостоверить, я прикручу её к авторизации стуннель. Только мне надо чтобы оно в контейнере криптопро жило:)


    Offline

    TolikTipaTut1

     

    Оставлено
    :

    1 апреля 2022 г. 22:14:36(UTC)

    Мне даже интересно стало – а что вам раньше выдавало минцифры? Гостовые серты что-ли?

    Отредактировано пользователем 1 апреля 2022 г. 22:15:16(UTC)
     | Причина: Не указана


    Offline

    kuvschin

     

    Оставлено
    :

    1 апреля 2022 г. 22:29:06(UTC)

    Это выдано впервые, раньше ничего не выдавало минцифры.
    Так получится у нас или я не в ту степь полез?
    Просто я не разбираюсь в вопросе, уже много прочёл но в общем стало только хуже с пониманием:(


    Offline

    Андрей *

     

    Оставлено
    :

    1 апреля 2022 г. 23:10:08(UTC)

    Автор: kuvschin Перейти к цитате

    Это выдано впервые, раньше ничего не выдавало минцифры.
    Так получится у нас или я не в ту степь полез?
    Просто я не разбираюсь в вопросе, уже много прочёл но в общем стало только хуже с пониманием:(

    Ключ RSA,
    gost зачем указывается в параметрах?


    Offline

    kuvschin

     

    Оставлено
    :

    1 апреля 2022 г. 23:47:32(UTC)

    Мне так выше сказали сделать:

    Попробуйте так:
    Код:
    openssl pkcs12 -export -out gost.pfx -inkey gost.key -in gost.cer -keypbe gost89


    Offline

    TolikTipaTut1

     

    Оставлено
    :

    1 апреля 2022 г. 23:59:36(UTC)

    Автор: kuvschin Перейти к цитате

    Мне так выше сказали сделать:

    Попробуйте так:
    Код:
    openssl pkcs12 -export -out gost.pfx -inkey gost.key -in gost.cer -keypbe gost89

    Честно сказать, когда писал – не знал, что у вас rsa. Ранее же нигде вы об этом публично не заявляли вроде как…

    Удалите из команды все параметры, связанные с ГОСТ-ом.

    Отредактировано пользователем 2 апреля 2022 г. 0:10:16(UTC)
     | Причина: Не указана


    Offline

    kuvschin

     

    Оставлено
    :

    2 апреля 2022 г. 0:43:27(UTC)

    Автор: TolikTipaTut1 Перейти к цитате

    Автор: kuvschin Перейти к цитате

    Мне так выше сказали сделать:

    Попробуйте так:
    Код:
    openssl pkcs12 -export -out gost.pfx -inkey gost.key -in gost.cer -keypbe gost89

    Честно сказать, когда писал – не знал, что у вас rsa. Ранее же нигде вы об этом публично не заявляли вроде как…

    Удалите из команды все параметры, связанные с ГОСТ-ом.

    “C:\Program Files\OpenSSL-Win64\bin\openssl.exe” pkcs12 -export -out bsoinsurru.pfx -inkey bsoinsurru.key -in bsoinsurru.crt
    И ничего не выйдет, т.к. этой командой я сам делал и pfx генерился и пароль норм, только вот это дерьмо ведёт себя так как я и описал в стартовом сообщении – “Пробовал конвертировать в .PFX и импортировать виндой 10 и криптопро 5. В винде просто ложится куда-то в винду минуя криптопро и не отображаясь в списке контейнеров. В криптопро выдаёт ошибку записи в контейнер и снова ложится в винду минуя криптопро.”

    В том-то и вся беда, что мы зашли на круг.


    Offline

    Андрей *

     

    Оставлено
    :

    2 апреля 2022 г. 8:28:24(UTC)

    И зачем нужно, чтобы было в КриптоПро csp? (подразумевая реализацию с RSA)

    Конечная цель, чтобы приложение по сертификату получило доступ к ЗК. Проверили?


    Offline

    ILya D

     

    Оставлено
    :

    1 апреля 2021 г. 20:34:48(UTC)


    Offline

    two_oceans

     

    Оставлено
    :

    2 апреля 2021 г. 13:02:08(UTC)

    Добрый день.
    Про актуальность статей подсказать не могу, так как с nginx вплотную не работал. Однако там вроде как чем дальше тем проще все стало, часть того что в теме уже не нужна на новых версиях.

    Автор: ILya D Перейти к цитате

    есть таблица с браузерами, где указаны только: ИЕ, Спутник, Яндекс браузер и Хромиум-гост.

    Список может пополняться. Заявлено у этих браузеров, ИЕ и Хромиум-гост можно сказать имеют поддержку от разработчиков самого криптопровайдера, а Спутник и Яндекс – чего-то допиливали. Всегда могут появится еще желающие допилить, но Опера и Мозилла пока такого желания не высказывали.

    Автор: ILya D Перейти к цитате

    Правильно я понимаю, чтобы подключиться к серверу который работает по TLS GOST нужен обязательно один из этих браузеров + плагин крипто про + установленный серт УЦ выдавшего сертификаты установленные на сервер?

    Клиенту нужен браузер, поддерживающий TLS GOST; криптопровайдер (в теории любой с компонентой TLS ГОСТ-2012, самые популярные КриптоПро CSP или Vipnet CSP, на практике – из поддерживаемых браузером); корневой сертификат для цепочки сертификатов сервера (если ГУЦ или Минкомсвязь, то поставится с КриптоПро CSP). Сервер можно настроить на передачу клиенту и сертификата промежуточного УЦ и сертификата самого сервера, то есть сертификат промежуточного УЦ может отсутствовать у клиента и тогда будет прислан сервером. Если же сервер не присылает сертификат промежуточного УЦ, то сертификат промежуточного УЦ должен быть заранее установлен у клиента.


    Автор: ILya D Перейти к цитате

    И смогу ли я подключиться к серверу из других браузеров например из хрома, оперы или файр фокс используя шифрование TLS GOST?

    Из самого браузера, используя шифрование TLS GOST – нет, но можно приукрасить, разрешить без гост или вставить прослойку между браузером и nginx у клиента.

    Отредактировано пользователем 2 апреля 2021 г. 13:08:00(UTC)
     | Причина: Не указана


    Offline

    Андрей Русев

     

    Оставлено
    :

    27 июля 2021 г. 14:12:21(UTC)

    Правильно использовать только актуальную инструкцию: вместо openssl+gostengy надо использовать легализованный в КриптоПро CSP 5.0 R2 патч на nginx:
    https://support.cryptopr…-c-podderzhkojj-gost-tls
    Описанная инструкция позволяет устанавливать TLS-соединения одновременно как по ГОСТ TLS, так и по RSA TLS, не навязывая особых требований к браузеру клиента.


    Offline

    lab2

     

    Оставлено
    :

    5 октября 2021 г. 15:31:04(UTC)

    Автор: Андрей Русев Перейти к цитате

    вместо openssl+gostengy надо использовать легализованный в КриптоПро CSP 5.0 R2 патч на nginx:

    По текущим лицензиям на серверную CSP,
    “обычная” серверная лицензия будет действовать в связке openssl+gostengy, а для решения “КриптоПро CSP 5.0 R2 патч на nginx” необходим новый тип лицензии “Лицензия на право использования СКЗИ “КриптоПро CSP” версии 5.0 для одного TLS-сервера до 1000 одновременных подключений”

    все так?


    Offline

    alex_nur

     

    Оставлено
    :

    5 октября 2021 г. 17:56:56(UTC)

    В данный момент используем оба варианта.
    От первого варинта (gostengy) будем уходить, т.к. он не может быть сертифицирован в итоге, вдобавок не поддерживается больше. А по второму есть вопросы.
    Приобрели лицензию “TLS-сервер на 1000 подключений”. Установил и настроил по инструкции https://support.cryptopr…-c-podderzhkojj-gost-tls
    ГОСТ работает по новой настройке там же где и работал при gostengy: IE11, Gost Chromium. Остальные браузеры только через RSA.

    Вопрос такой. Установленный таким образом nginx позволяет осуществить подключение максимум TLS1.0. Устанавливал на Astra Linux SE Смоленск. Это проблема в КриптоПро CSP 5 R2 (нужно что-то дополнительно где-то указать?) или в ОС?
    Gostengy, по которому вопросов нет, работает TLS1.2 (но там на обычную astra linux установлено).


    Offline

    lab2

     

    Оставлено
    :

    5 октября 2021 г. 18:26:57(UTC)

    Автор: alex_nur Перейти к цитате

    В данный момент используем оба варианта.

    Как думаете по лицензиям, для gostengy достаточно обычной серверной лицензии? Вот если покупать сейчас для gostengy (несертифицируемый)+КриптоПро CSP 5 R2, с обычной серверной лицензией будет работать?

    Интересно и наоборот – лицензия “TLS-сервер на 1000 подключений” будет работать с gostengy ?


    Offline

    alex_nur

     

    Оставлено
    :

    5 октября 2021 г. 19:34:30(UTC)

    Автор: lab2 Перейти к цитате

    Как думаете по лицензиям, для gostengy достаточно обычной серверной лицензии? Вот если покупать сейчас для gostengy (несертифицируемый)+КриптоПро CSP 5 R2, с обычной серверной лицензией будет работать?

    Было достаточно. Но не исключено, что в будущих версиях CSP не поставят запрет на использование “обычной серверной” лицензии. Возможно, что в R2 уже нельзя (этот вопрос лучше в техподдержку адресуйте), ведь TLS дороже. Думаю что точно вполне реально, что если не на R2, то на какой-нибудь более старой версии CSP точно работать будет.
    У меня требование от безопасников, чтобы в дальнейшем проект подлежал сертификации. Я в этом не разбираюсь. Тут на форуме пояснили, что связку с gostengy никогда не удастся сертифицировать. Отсюда и приобретение TLS. Думаю, что безопасники и сами до конца не знают что там действительно нужно по ИБ в плане юридических вопросов. Сам я для себя уяснил, что если нет работы с гос.тайной, а просто используется обработка ПД, то необязательно вообще иметь сертификацию. На сайте ФСБ даже официальный ответ по этому поводу был: главное что защищено ГОСТом. Никто не будет штрафовать за то, что используются несертифицированные средства защиты. Но помимо требований законов РФ есть еще и внутренние ЛПА на предприятии, и вот там может быть ужесточение (хотя вроде никакой ЛПА не должен противоречить и ухудшать правовое положение в сравнении с ФЗ). Если бы мне лично (или моей фирме, в которой я был бы директором) необходим был бы SSL с ГОСТ, я бы использовал просто gostengy. Другое дело, что ничего не стоит на месте, и в будущем потребуется какая-либо фича, которой нет в связке с gostengy, и никто ее не реализует, т.к. эта связка больше не развивается.

    Автор: lab2 Перейти к цитате

    Интересно и наоборот – лицензия “TLS-сервер на 1000 подключений” будет работать с gostengy ?

    Точно будет. Проверено.


    Offline

    two_oceans

     

    Оставлено
    :

    6 октября 2021 г. 8:06:59(UTC)

    Цитата:

    Если бы мне лично … необходим был бы SSL с ГОСТ, я бы использовал просто gostengy. Другое дело, что ничего не стоит на месте, и в будущем потребуется какая-либо фича, которой нет в связке с gostengy, и никто ее не реализует, т.к. эта связка больше не развивается.

    Соглашусь полностью. Тут есть наверняка есть минимум 2 фактора изменений: 1) для использования TLS openssl (как сам openssl, так и его библиотеки в других продуктах nginx и т.д.) нужно поддерживать в актуальной версии, так как там все время находят уязвимости. Соответственно новая версия openssl может уже оказаться несовместимой с gostengy. Поэтому более перспективно использование gostengy с openssl только в качестве внутреннего УЦ – в этом случае уязвимости TLS значения не имеют и по сертификацию тоже речи не идет, обновлять openssl необходимости нет;
    2) поддержка гост-2015 – когда она будет внедряться, определенно gostengy уже не поспеет. End of Line.

    Цитата:

    Как думаете по лицензиям,

    Думаю, что gostengy продолжит работать, так как по сути может использоваться и в клиентском ПО, а поддержки новых алгоритмов там уже ожидать не приходится. Так этот путь будет просто временным отступлением от “генеральной линии партии”.

    Более интересно, что теперь еще и stunnel входит в состав сертифицированного СКЗИ. Так Вы можете и на клиентских ос снимать шифрование гост либо перешифровать на rsasha256 и использовать в браузерах без поддержки гост. Зачем какие-то патчи если можно сервер расположить за ним (разве что из-за возможности при патче принимать и гост и не-гост)? Вот с лицензией конечно вопрос – полагаю теперь на stunnel требуется отдельная (которая тут упоминается как вариант 2)?

    Отредактировано пользователем 6 октября 2021 г. 8:09:58(UTC)
     | Причина: Не указана


    Offline

    alex_nur

     

    Оставлено
    :

    6 октября 2021 г. 12:13:01(UTC)

    Автор: alex_nur Перейти к цитате

    В данный момент используем оба варианта.
    Установленный таким образом nginx позволяет осуществить подключение максимум TLS1.0. Устанавливал на Astra Linux SE Смоленск. Это проблема в КриптоПро CSP 5 R2 (нужно что-то дополнительно где-то указать?) или в ОС?
    Gostengy, по которому вопросов нет, работает TLS1.2 (но там на обычную astra linux установлено).

    Ответила техподдержка, что версии TLS регулируются директивой
    sspi_protocols TLSv1 TLSv1.1 TLSv1.2;

    Работает, подтверждаю.
    В инструкции https://support.cryptopr…-c-podderzhkojj-gost-tls директива sspi_protocols тоже указана, однако там она относится к комментарию:
    sspi_certificate 0x00E3CD25AA5310D07F; # RSA cert serial sspi_protocols TLSv1.2;

    Для меня из инструкции было неочевидным, что sspi_protocols TLSv1.2 является самостоятельной директивой, т.к. все сливалось в комментарий к директиве sspi_certificate.
    Попросил, чтобы в инструкцию внесли изменение.

    thanks 1 пользователь поблагодарил alex_nur за этот пост.


    Offline

    cps999

     

    Оставлено
    :

    9 июня 2022 г. 16:38:54(UTC)

    А где можно получить собственно сам ng-nginx.1.18.0.patch ?


    Offline

    lightness

     

    Оставлено
    :

    22 сентября 2021 г. 14:25:29(UTC)

    Здравствуйте!

    Помогите разобраться с вопросом импорта закрытого ключа из файла по ГОСТ Р 34.11-2012/34.10-2012 256 бит.
    Искал на форуме решения, но всё равно не понятно, почему ключ не читается?

    Использую следующее окружение:

    Код:

    Debian GNU/Linux 11
    openjdk version "1.8.0_302"
    OpenJDK Runtime Environment (build 1.8.0_302-b08)
    OpenJDK 64-Bit Server VM (build 25.302-b08, mixed mode)
    jcp-2.0.41789

    Например, получил ключ с помощью openssl, который настроен на ГОСТ.

    Код:

    # openssl ciphers | tr ':' '\n' | grep GOST
    GOST2012-GOST8912-GOST8912
    GOST2001-GOST89-GOST89
    // Создание ключей по алгоритму подписи 1.2.643.7.1.1.3.2 (ГОСТ Р 34.11-2012/34.10-2012 256 бит)
    # openssl req -x509 -newkey gost2012_256 -pkeyopt paramset:A -nodes -keyout keyA.pem -out certA.pem
    # openssl x509 -outform der -in certA.pem -out certA.crt
    

    Пытаюсь прочитать закрытый ключ keyA.pem из файла по алгоритму подписи ГОСТ Р 34.10-2012 с ключом 256 (1.2.643.7.1.1.1.1) с помощью провайдера BouncyCastle Security Provider v1.60.

    Код:

    # java -cp .:dependencies/* PKeyReader /distrib/cert/test/keyA.pem 1.2.643.7.1.1.1.1 BCTYPE=1.2.840.113549.1.12.1.80 certA.zip (2kb) загружен 0 раз(а).
    + key factory: java.security.KeyFactory@340f438e
     algorithm: 1.2.643.7.1.1.1.1
     provider: BC version 1.6
    + pkcs8 encoded key spec: java.security.spec.PKCS8EncodedKeySpec@30c7da1e
     format: PKCS#8
    Exception in thread "main" java.security.spec.InvalidKeySpecException: encoded key spec not recognized: DEF length 39 object truncated by 9
            at org.bouncycastle.jcajce.provider.asymmetric.util.BaseKeyFactorySpi.engineGeneratePrivate(Unknown Source)
            at org.bouncycastle.jcajce.provider.asymmetric.ecgost12.KeyFactorySpi.engineGeneratePrivate(Unknown Source)
            at java.security.KeyFactory.generatePrivate(KeyFactory.java:366)
            at PKeyReader.main(PKeyReader.java:62)
    

    Возможно ли прочитать ключ в PrivateKey таким образом?

    Код:

    
    import org.bouncycastle.jce.provider.BouncyCastleProvider;
    
    import java.io.IOException;
    import java.net.URISyntaxException;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    import java.security.Security;
    import java.security.KeyFactory;
    import java.security.NoSuchAlgorithmException;
    import java.security.PrivateKey;
    import java.security.interfaces.RSAPublicKey;
    import java.security.spec.InvalidKeySpecException;
    import java.security.spec.PKCS8EncodedKeySpec;
    import java.security.spec.X509EncodedKeySpec;
    import java.util.Base64;
    
    /**
     * Чтение закрытого ключа из файла.
     */
    public class PKeyReader {
    
        /**
        * Попытка прочитать закрытый ключ из файла
        * @param 	путь к ключу
        * @param	алгоритм
        * @param	провайдер (опциональный)
        */
      public static void main(String[] args) throws Exception {
        if (args.length < 2) {
          System.out.println("input error: skipped required parameters.");
          System.out.println("  java .:dependences/* Main [key path] [algorithm] {provider}");
          return;
        }
    
        Security.addProvider(new BouncyCastleProvider());
    
        String privateKeyPath = args[0];
        String algorithm = args[1];
        String provider = args.length > 2 ? args[2] : "";
    
        String privateKeyContent = new String(Files.readAllBytes(Paths.get(privateKeyPath)));
    
        privateKeyContent = privateKeyContent.replace("-----BEGIN PRIVATE KEY-----", "").replace("-----END PRIVATE KEY-----", "").replaceAll("\\s", "");
    
        System.out.println(privateKeyContent);
    
        KeyFactory kf = null;
        if (provider.isEmpty())
          kf = KeyFactory.getInstance(algorithm);
        else
          kf = KeyFactory.getInstance(algorithm, provider);
    
        System.out.println("+ key factory: " + kf);
        System.out.println(" algorithm: " + kf.getAlgorithm());
        System.out.println(" provider: " + kf.getProvider());
    
        byte[] privData = Base64.getDecoder().decode(privateKeyContent);
        PKCS8EncodedKeySpec keySpecPKCS8 = new PKCS8EncodedKeySpec(privData);
        System.out.println("+ pkcs8 encoded key spec: " + keySpecPKCS8);
        System.out.println(" format: " + keySpecPKCS8.getFormat());
    
        PrivateKey privKey = kf.generatePrivate(keySpecPKCS8);
    
        System.out.println("+ private key: " + privKey);
      }
    }
    


    Offline

    two_oceans

     

    Оставлено
    :

    4 октября 2021 г. 11:33:41(UTC)

    Добрый день.
    Что-то эту тему проглядел. Импорта куда? Опишите какую задачу решаете.

    Как я понимаю, импортировать таким способом ключ в КриптоПро невозможно. КриптоПро CSP не выпускает реальный ключ “наружу” (и через большинство интерфейсов не принимает реальный ключ “извне”) – при поиске контейнера КриптоПро по сертификату в результате в классе PrivateKey находится идентификатор закрытого ключа вместо реального закрытого ключа. Аналог как в раздевалке берется пальто с прилавка и дается в руки номерок вместо пальто. Соответственно при использовании класса PrivateKey для подписания/шифрования также расчет на то, что там идентификатор, а не сам ключ. По идентификатору КриптоПро находит у себя закрытый ключ (по номерку находится пальто). Импорт ключа из PrivateKey просто не поддерживается: выходит что вместо номерка пихаете еще одно пальто.

    В теории способ перенести ключ openssl в КриптоПро есть: средствами openssl нужно зашифровать ключ в формат P12/PFX, с алгоритмом шифрования гост-89 и маками гост-2012 512 бит (согласно рекомендациям ТК26), затем использовать p12utility для переноса ключа из pfx в контейнер КриптоПро. Один из JCP/JCSP к слову умеет читать PFX с ключами гост-2012, но мне сложно подсказать какие там алгоритмы обертки ключа принимаются.


    Offline

    lightness

     

    Оставлено
    :

    4 октября 2021 г. 14:18:14(UTC)

    Спасибо за ответ!

    Отличный пример с раздевалкой, сразу становится всё на свои места. )))
    Сразу было понятно, что импорт не поддерживается штатными средствами.

    Цитата:

    Импорта куда? Опишите какую задачу решаете.

    Задача решалась в рамках интеграции с адаптером СМЭВ, импорт ключей в JCP контейнер.
    Проблема решилась путём копирования Rutoken в HDImageStore в контрольной панели, для получения псевдонима подписи.


    Offline

    lightness

     

    Оставлено
    :

    4 октября 2021 г. 14:36:35(UTC)

    Ещё пару вопросов:

    – p12utility есть ли аналоги этой утилиты в Linux?

    – ошибка тестирования подписи закрытого ключа в настройках информационной системы (ИС) адаптера СМЭВ.
    Ситуация такая, скопировал каталог HDImageStore с 6 файлами в другой каталог docker контейнера, где настроил адаптер СМЭВ и Крипто Про JCP. Когда проверяю подпись в настройках ИС, получаю сообщение,
    Провайдер JCP – OK
    Открытый ключ – OK
    Тестирование подписи закрытого ключа – FAIL.
    При этом подпись работает на виртуалке, где есть Rutoken (который скопирован в HDImageStore).
    Копировал в каталог /var/opt/cprocsp/keys/root/TEST.000
    Это тоже связано с тем, что копируется ид закрытого ключа? d'oh!


    Offline

    two_oceans

     

    Оставлено
    :

    5 октября 2021 г. 13:23:10(UTC)

    Цитата:

    – p12utility есть ли аналоги этой утилиты в Linux?

    Мне не попадались на глаза. По внешнему анализу под Windows утилита самодостаточная (КриптоПро CSP не требуется), но запрашивает у Майкрософт КриптоАпи случайные данные, поэтому для портирования в Linux явно понадобится другой надежный источник случайных чисел. Скорее всего с этим проблем – к чему ее привязать на разномастных Linux тот еще вопросик.

    Автор: lightness Перейти к цитате

    – ошибка тестирования подписи закрытого ключа в настройках информационной системы (ИС) адаптера СМЭВ.
    Ситуация такая, скопировал каталог HDImageStore с 6 файлами в другой каталог docker контейнера, где настроил адаптер СМЭВ и Крипто Про JCP. Когда проверяю подпись в настройках ИС, получаю сообщение,
    Провайдер JCP – OK
    Открытый ключ – OK
    Тестирование подписи закрытого ключа – FAIL.
    При этом подпись работает на виртуалке, где есть Rutoken (который скопирован в HDImageStore).
    Копировал в каталог /var/opt/cprocsp/keys/root/TEST.000
    Это тоже связано с тем, что копируется ид закрытого ключа? d'oh!

    Про ид закрытого ключа скорее речи нет – в папке в файле name.key указывается дружественное имя контейнера и может фигурировать контрольная сумма от него, так что при копировании папки это должно сохранится. Для флешек может фигурировать метка флешки и volumeid. Для токена его серийный номер. Для двух HDIMAGE не припомню чтобы были какие отличия, но могу ошибаться.

    Можно сравнить какие fqcn у контейнера в одном месте и в другом. Если отличаются, то связка сертификата и контейнера после копирования стала неверна и нужно по-новой связать сертификат и контейнер. Правда, как это выглядит в JCP подсказать не смогу, другой alias это станет или что еще.

    Если вообще не видно контейнера… На первый взгляд путь правдоподобный. Может еще быть пользователь не тот (путь для root, а приложение от чьего имени выполняется? ), либо нет прав у пользователя на этот каталог.


    Offline

    lightness

     

    Оставлено
    :

    5 октября 2021 г. 13:54:23(UTC)

    Цитата:

    Может еще быть пользователь не тот (путь для root, а приложение от чьего имени выполняется? ), либо нет прав у пользователя на этот каталог

    Приложение адаптера запускаю под root, и криптоконтейнер настраивал для root.


    Offline

    lightness

     

    Оставлено
    :

    5 октября 2021 г. 13:55:13(UTC)

    Спасибо большое за развёрнутый ответ!

    Стало понятно, что подпись можно настроить в докер контейнере независимо от rutoken.

    Читайте также:  криптопро csp примеры
    Оцените статью
    ЭЦП Эксперт
    Добавить комментарий