Контейнеры PKCS#12/PFX с ГОСТ¶
Контейнер PFX объединяет закрытый ключ, сертификат и при необходимости цепочку удостоверяющих центров. В НАЙС.ОС работать с ним можно через openssl pkcs12. Пароль PFX защищает контейнер при хранении и переносе; после импорта ключ должен находиться в защищённом хранилище.
1. Подготовить входные файлы¶
В примерах используются:
private.pem— закрытый ГОСТ-ключ;certificate.crt— сертификат этого ключа;ca-chain.crt— цепочка УЦ при необходимости.
Создайте файлы по инструкции PKI, затем убедитесь, что открытый ключ сертификата совпадает с открытой частью закрытого ключа.
2. Экспорт контейнера с запросом пароля¶
umask 077
openssl pkcs12 -export \
-inkey private.pem \
-in certificate.crt \
-out certificate.p12 \
-name 'NiceOS GOST certificate'
chmod 600 certificate.p12
Программа запросит пароль интерактивно; не передавайте действующий пароль как pass:secret в аргументах командной строки.
3. Контейнер с цепочкой сертификатов¶
openssl pkcs12 -export \
-inkey private.pem -in certificate.crt \
-certfile ca-chain.crt \
-name 'NiceOS service certificate' \
-out service-chain.p12
4. Контейнер с ГОСТ 28147-89 (legacy PBE)¶
openssl pkcs12 -export \
-inkey private.pem -in certificate.crt \
-keypbe gost89 -certpbe gost89 \
-macalg md_gost94 \
-out legacy-gost.p12
Такой вариант относится к совместимости с историческими механизмами PBE. Применяйте его при обмене с системой, ожидающей именно такой профиль.
5. Контейнер современного формата ТК-26¶
В upstream gost-engine реализованы варианты PKCS#12 по RFC 9337/9548 с шифрами «Кузнечик» и «Магма» в режиме CTR-ACPKM. Используйте подходящий криптографический профиль НАЙС.ОС для нужного контейнера:
openssl pkcs12 -export \
-inkey private.pem -in certificate.crt \
-keypbe kuznyechik-ctr-acpkm \
-certpbe kuznyechik-ctr-acpkm \
-macalg md_gost12_512 \
-out gost-tk26.p12
Другой вариант:
openssl pkcs12 -export \
-inkey private.pem -in certificate.crt \
-keypbe magma-ctr-acpkm \
-certpbe magma-ctr-acpkm \
-macalg md_gost12_256 \
-out gost-magma.p12
Имена с -omac обозначают отдельные варианты режима, их совместимость с получателем нужно согласовывать:
Форматы развиваются
Разработчики gost-engine расширяют поддержку PFX, кодировок PBE и взаимодействия с КриптоПро. Для новой интеграции выберите целевой формат по требованиям получателя и обновите криптографические пакеты НАЙС.ОС перед проверкой совместимости. При ошибке cipher has no object identifier смотрите диагностику контейнеров: эта операция зависит от поддержки PBE в OpenSSL и режиме Provider.
6. Просмотреть контейнер, не извлекая ключ¶
По выводу определяются криптографический алгоритм защиты ключа, MAC и типы содержимого.
7. Выгрузить только сертификаты¶
8. Экспортировать закрытый ключ для переноса¶
Извлечение нешифрованного ключа допустимо только в закрытом каталоге лабораторного стенда:
umask 077
openssl pkcs12 -in certificate.p12 -nocerts -noenc \
-out recovered-private.pem
chmod 600 recovered-private.pem
В некоторых режимах OpenSSL используется эквивалентная историческая опция -nodes. После процедуры защитите или уничтожьте промежуточный файл по утверждённому регламенту.
9. Сверить ключи до и после переноса¶
openssl pkey -in private.pem -pubout -outform DER > before.der
openssl pkey -in recovered-private.pem -pubout -outform DER > after.der
cmp before.der after.der && echo 'Ключ после экспорта не изменился'
10. Управление PRF и внешней проверкой MAC¶
В gost-engine для профиля RFC 9337/9548 предусмотрен выбор PRF:
GOST_PBE_HMAC=md_gost12_256 \
openssl pkcs12 -export \
-inkey private.pem -in certificate.crt \
-keypbe kuznyechik-ctr-acpkm \
-certpbe kuznyechik-ctr-acpkm \
-macalg md_gost12_512 \
-out gost-prf256.p12
Для совместимости с читателями, использующими прежний KDF внешней имитовставки, upstream предусматривает:
LEGACY_GOST_PKCS12=1 \
openssl pkcs12 -export \
-inkey private.pem -in certificate.crt \
-keypbe kuznyechik-ctr-acpkm \
-certpbe kuznyechik-ctr-acpkm \
-macalg md_gost12_512 \
-out gost-legacy-kdf.p12
Используйте такие переключатели только как часть согласованного профиля совместимости.
11. Контроль ASN.1 и OID¶
openssl asn1parse -inform DER -in gost-tk26.p12 -i | head -80
openssl pkcs12 -info -noout -in gost-tk26.p12
12. Что делать при импорте¶
Получатель должен проверить пароль PFX, MAC, наличие сертификата и закрытого ключа, соответствие открытых частей, назначение сертификата, OID алгоритмов и доверенную цепочку. Для КриптоПро выделено отдельное руководство.
Документация разработчиков: PKCS#12 upstream, RFC 9337, RFC 9548.