Участник:Petr-akhlamov/Создание самоподписанных сертификатов ГОСТ

Материал из ALT Linux Wiki
Примечание: Обратите внимение, что это не официальная документация, а попытка начинающего админа объяснить материал начинающим админам.


Понятия SSL-сертификатов:

  • .pem, .crt, .cer - готовый, подписанный центром сертификации сертификат, расширения разные, но означают одно и то же. Если совсем просто, то сертификат, это подписанный открытый ключ, плюс немного информации о вашей организаци;
  • .key - закрытый или открытый ключ;
  • .csr - запрос на подпись сертификата, в этом файле хранится ваш открытый ключ плюс информация, об организации и домене, которую вы указали.

В этой статье мы сгенерируем сертификат по алгоритму ГОСТ-2012. Для генерации мы воспользуемся OpenSSL.

Поддержка шифрования по ГОСТ в OpenSSL

Поддержка ГОСТ была добавлена в OpenSSL 1.0.0 сотрудниками "Криптоком".[1]

1. Установите пакет с поддержкой ГОСТ:

Для OpenSSL 1.0:

# apt-get install openssl-engines

Для OpenSSL 1.1:

# apt-get install openssl-gost-engine

2. Измените конфигурационный файл OpenSSL.

Начиная с версии 1.1.0.3.0.255.ge3af41d.p1-alt3 в пакете openssl-gost-engine доступен и корректно работает control-скрипт для включения и выключения поддержки ГОСТ. Для включения достаточно ввести (от суперпользователя) команду:

  1. control openssl-gost enabled

Генерация сертификата

1. Создаём закрытый, "корневой", ключ с алгоритмом ГОСТ-2012 (ca.key):

$ openssl genpkey -algorithm gost2012_256 -pkeyopt paramset:TCB -out ca.key
  • genpkey - указывает генерацию приватного ключа или пары ключей
  • -algorithm gost2012_256 - указывает на алгоритм для генерации сертификата ГОСТ 2012 с длиной ключа 256 бит
  • -pkeyopt paramset:TCB - устанавливает параметры OID для алгоритма шифрования при генерации ключевой пары или запроса на сертификат с помощью OpenSSL
  • -out ca.key - выходной файл

Получим файл: ca.key

2. Создаем корневой сертификат с использованием сгенерированого ключа:

openssl req -x509 -new -nodes -key ca.key -sha256 -days 1024 -out ca.pem
  • ca.key - ключик, который мы сгенеририровали на прошлом шаге
  • 1024 - количество дней, сколько будет действовать корневой сертификат
  • rootCA.pem - файл корневого сертификата
  • days - количество дней действия

Получим файл: ca.pem

И тут возникает ошибка:

$ openssl req -x509 -new -nodes -key ca.key -days 1024 -out ca.pem
Country Name (2 letter code) [RU]:
State or Province Name (full name) []:Moscow
Locality Name (eg, city) []:Moscow
Organization Name (eg, company) []:Papa Karlo and Co 
Organizational Unit Name (eg, section) []:host1
Common Name (e.g., your name or your server's hostname) []:host1
Email Address []:stolar1@karlo.ru
140404764854080:error:8007A070:lib(128):pkey_gost_ctrl:invalid digest type:/usr/src/RPM/BUILD/openssl-gost-engine-1.1.0.3.0.255.ge3af41d.p1/gost_pmeth.c:124:

3. Пробуем создать запрос на сертификат (CSR)

CSR - обычно это та информация, которая отправляется в УЦ, но в нашем случае мы подписываем сертификат самостоятельно.

openssl req -new -key ca.key -out request.csr
  • req - создать запрос на подпись
  • new - новый запрос
  • key - путь к закрытому ключу
  • out - выходной файл
Country Name (2 letter code) [RU]:
State or Province Name (full name) []:Moscow
Locality Name (eg, city) []:Moscow
Organization Name (eg, company) []:Papa Karlo and Co
Organizational Unit Name (eg, section) []:Stolyari
Common Name (e.g., your name or your server's hostname) []:host1
Email Address []:stolar1@karlo.ru

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
140462595991360:error:8007A070:lib(128):pkey_gost_ctrl:invalid digest type:/usr/src/RPM/BUILD/openssl-gost-engine-1.1.0.3.0.255.ge3af41d.p1/gost_pmeth.c:124: