Перейти к содержанию

Контейнеры 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 обозначают отдельные варианты режима, их совместимость с получателем нужно согласовывать:

kuznyechik-ctr-acpkm
kuznyechik-ctr-acpkm-omac
magma-ctr-acpkm
magma-ctr-acpkm-omac

Форматы развиваются

Разработчики gost-engine расширяют поддержку PFX, кодировок PBE и взаимодействия с КриптоПро. Для новой интеграции выберите целевой формат по требованиям получателя и обновите криптографические пакеты НАЙС.ОС перед проверкой совместимости. При ошибке cipher has no object identifier смотрите диагностику контейнеров: эта операция зависит от поддержки PBE в OpenSSL и режиме Provider.

6. Просмотреть контейнер, не извлекая ключ

openssl pkcs12 -info -noout -in certificate.p12

По выводу определяются криптографический алгоритм защиты ключа, MAC и типы содержимого.

7. Выгрузить только сертификаты

openssl pkcs12 -in certificate.p12 -nokeys \
  -out extracted-certs.pem

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.