Участник:Petr-akhlamov/Создание самоподписанных сертификатов ГОСТ
Понятия 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-скрипт для включения и выключения поддержки ГОСТ. Для включения достаточно ввести (от суперпользователя) команду:
- 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: