Конвертация сертификата с ГОСТ2012
Есть
1 Сертифиакт с контейнером закрытого ключа(header.key, masks.key, masks2.key, name.key, primary.key, primary2.key)
2. Он с поддержкой ГОСТ шифрования (2001 и 2012)
Чего хочется
хочу создать файл закрытого ключа (в формате RSA или PEM) и подписывать командами OPENSSL
Краткий план
- Нужно установить исходный сертификат (я использовала КриптоПРО)
- Выгружаем сертификат в формате pfx
Используем программу P12FromGostCSP, для получения контйнера PKCS#12
Дальше обновим openssl до версии > 1.1.1 и настроим на поддержку
- ГОСТ
- Теперь можем конвертировать, к примеру в pem
Настройка системы
важно!: для работы с GOST2012, версия openssl >=1.1.1
# источник (https://gist.github.com/shadz3rg/7badec13e154751116a6446fe9f61906) # Ubuntu 18.04.1 LTS (GNU/Linux 4.15.0-36-generic x86_64) # (из коробки) OpenSSL 1.1.0g 2 Nov 2017 # (из коробки) curl 7.58.0 (x86_64-pc-linux-gnu) # PHP 7.2.10-0ubuntu0.18.04.1 (cli) (built: Sep 13 2018 13:45:02) ( NTS ) # Компилим GOST-engine sudo apt install cmake libssl-dev git clone --branch=openssl_1_1_0 https://github.com/gost-engine/engine.git gost-engine/engine cd gost-engine/engine cmake . make # узнаем нужную директорию, копируем туда openssl version -e cp bin/gost.so /usr/lib/x86_64-linux-gnu/engines-1.1 # конфиг cp /etc/ssl/openssl.cnf /etc/ssl/openssl_custom.cnf nano /etc/ssl/openssl_custom.cnf # в начало файла openssl_conf = openssl_def # в конец [openssl_def] engines = engine_section [engine_section] gost = gost_section [gost_section] engine_id = gost dynamic_path = /usr/lib/x86_64-linux-gnu/engines-1.1/gost.so default_algorithms = ALL CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet # включаем новый конфиг export OPENSSL_CONF=/etc/ssl/openssl_custom.cnf openssl s_client -connect service.rosminzdrav.ru:443 curl https://service.rosminzdrav.ru
Проверка поддержки ГОСТ
командой:
openssl engine
результат:
SUSE:/root # openssl engine (dynamic) Dynamic engine loading support (gost) Reference implementation of GOST engine
посмотреть есть ли ГОСТ шифры
openssl ciphers|tr ':' '\n'|grep GOST GOST2001-GOST89-GOST89 GOST94-GOST89-GOST89
Команды конвертации openssl
Результат работы утилиты P12FromGostCSP, должен содержать сертификат и закрытый ключ. Проверить это можно командой:
openssl.exe pkcs12 -in C:/key.pfx -nodes
Для преобразования контейнера в формат pem можно воспользоваться командой:
openssl.exe pkcs12 -in C:/key.pfx -out C:/key.pem -nodes -clcerts
или
openssl pkcs12 -in path.p12 -out newfile.crt.pem -clcerts -nokeys openssl pkcs12 -in path.p12 -out newfile.key.pem -nocerts -nodes
о командах openssl
Извление данных из контейнера
Извлечения Закрытого ключа из контейнера PFX:
openssl pkcs12 -in container.pfx -nocerts -out key2019.pem –nodes
или
openssl pkcs12 -nodes -in dev-with- cert.pfx -nocerts -out private.key
Извлечения файла сертификата из контейнера PFX:
openssl pkcs12 -in container.pfx -nokeys -out cert2019.pem
или
openssl pkcs12 -nokeys -in dev-with-priv.pfx -out cert.pem
Удаление парольной фразы из контейнера PFX:
openssl rsa -in key2017.pem -out serverkey2019.key
Просмотр содержимого private key:
openssl pkcs12 -in test_file.pfx -passin pass:{пароль} -nocerts -nodes
Сборка контейнера PFX:
openssl pkcs12 -export -out container.pfx -inkey serverkey2019.key -in cert2019.pem -certfile CA.crt
We can extract the private key form a PFX to a PEM file with this command:
openssl pkcs12 -in filename.pfx -nocerts -out key.pem
Exporting the certificate only:
openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem
Removing the password from the extracted private key:
openssl rsa -in key.pem -out server.key
Ссылки