ГОСТ в OpenSSL: различия между версиями
м (Добавлена ссылка на баг) |
Bircoph (обсуждение | вклад) (скрипт в пакете уже исправлен, начиная с alt3) |
||
(не показано 13 промежуточных версий 5 участников) | |||
Строка 3: | Строка 3: | ||
Поддержка ГОСТ была добавлена в OpenSSL 1.0.0 сотрудниками "Криптоком".<ref>[https://archive.fo/sVgC http://www.cryptocom.ru/opensource/openssl100.html ГОСТ в OpenSSL 1.0.0]</ref> | Поддержка ГОСТ была добавлена в OpenSSL 1.0.0 сотрудниками "Криптоком".<ref>[https://archive.fo/sVgC http://www.cryptocom.ru/opensource/openssl100.html ГОСТ в OpenSSL 1.0.0]</ref> | ||
1. Установите пакет | 1. Установите пакет с поддержкой ГОСТ: | ||
Для OpenSSL 1.0: | |||
apt-get install openssl-engines | apt-get install openssl-engines | ||
2. Измените конфигурационный файл OpenSSL. Для этого создайте скрипт {{path|gost-for-openssl}} следующего содержания: | Для OpenSSL 1.1: | ||
apt-get install openssl-gost-engine | |||
2. Измените конфигурационный файл OpenSSL. | |||
Начиная с версии {{term|1.1.0.3.0.255.ge3af41d.p1-alt3}} в пакете {{pkg|openssl-gost-engine}} доступен и корректно работает control-скрипт для включения и выключения поддержки ГОСТ. Для включения достаточно ввести (от суперпользователя) команду: | |||
control openssl-gost enabled | |||
В раннем релизе {{term|1.1.0.3.0.255.ge3af41d.p1-alt2}} была [https://bugzilla.altlinux.org/show_bug.cgi?id=37922 ошибка] | |||
=== Старый способ === | |||
Для этого создайте скрипт {{path|gost-for-openssl}} следующего содержания: | |||
<source lang="Bash"># Adapt OpenSSL for GOST cryptography support | <source lang="Bash"># Adapt OpenSSL for GOST cryptography support | ||
# See http://www.cryptocom.ru/products/openssl-1-config-en.html | # See http://www.cryptocom.ru/products/openssl-1-config-en.html | ||
Строка 54: | Строка 68: | ||
== Создание ключей == | == Создание ключей == | ||
1. Создаём | {{Note|Инструкция рассчитана на openssl1.1 (начиная с [[Branches/p9|p9]])}} | ||
1. Создаём закрытый ключ с алгоритмом ГОСТ-2012 ({{path|ca.key}}): | |||
<source lang="text" highlight="1">$ openssl genpkey -algorithm | <source lang="text" highlight="1">$ openssl genpkey -algorithm gost2012_256 -pkeyopt paramset:TCB -out ca.key</source> | ||
2. Создаём сертификат на 365 дней ({{path|ca.cer}}): | 2. Создаём сертификат на 365 дней ({{path|ca.cer}}): | ||
<source lang="text" highlight="1-2">$ openssl req -new -x509 -days 365 -key ca.key -out ca.cer \ | <source lang="text" highlight="1-2">$ openssl req -new -x509 -md_gost12_256 -days 365 -key ca.key -out ca.cer \ | ||
-subj "/C=RU/ST=Russia/L=Moscow/O=SuperPlat/OU=SuperPlat CA/CN=SuperPlat CA Root"</source> | -subj "/C=RU/ST=Russia/L=Moscow/O=SuperPlat/OU=SuperPlat CA/CN=SuperPlat CA Root"</source> | ||
Строка 70: | Строка 86: | ||
Version: 3 (0x2) | Version: 3 (0x2) | ||
Serial Number: | Serial Number: | ||
17:47:3b:c0:e1:9a:34:02:a6:b5:ea:5e:77:80:c1:c0:8a:6f:2e:a6 | |||
Signature Algorithm: GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit) | |||
Issuer: C=RU, ST=Russia, L=Moscow, O=SuperPlat, OU=SuperPlat CA, CN=SuperPlat | Issuer: C = RU, ST = Russia, L = Moscow, O = SuperPlat, OU = SuperPlat CA, CN = SuperPlat Root | ||
Validity | Validity | ||
Not Before: | Not Before: Apr 14 11:39:25 2020 GMT | ||
Not After : | Not After : Apr 14 11:39:25 2021 GMT | ||
Subject: C=RU, ST=Russia, L=Moscow, O=SuperPlat, OU=SuperPlat CA, CN=SuperPlat | Subject: C = RU, ST = Russia, L = Moscow, O = SuperPlat, OU = SuperPlat CA, CN = SuperPlat Root | ||
Subject Public Key Info: | Subject Public Key Info: | ||
Public Key Algorithm: GOST R 34.10- | Public Key Algorithm: GOST R 34.10-2012 with 256 bit modulus | ||
Public key: | Public key: | ||
X: | X:80FA69630DB1F99175D4659917082F1A85E49241C7CC3F406B25E42CCB53F875 | ||
Y: | Y:9AF4A5003B0E73055CEB6DC2D5B325EA16E7CE852CE5D8A479683EBAFC1F54D9 | ||
Parameter set: | Parameter set: GOST R 34.10-2012 (256 bit) ParamSet B | ||
X509v3 extensions: | X509v3 extensions: | ||
X509v3 Subject Key Identifier: | X509v3 Subject Key Identifier: | ||
63:29:DA:30:84:00:C3:7D:B5:F8:43:2F:A6:80:C7:A3:E1:B9:27:8C | |||
X509v3 Authority Key Identifier: | X509v3 Authority Key Identifier: | ||
keyid: | keyid:63:29:DA:30:84:00:C3:7D:B5:F8:43:2F:A6:80:C7:A3:E1:B9:27:8C | ||
X509v3 Basic Constraints: | X509v3 Basic Constraints: | ||
CA:TRUE | CA:TRUE | ||
Signature Algorithm: GOST R 34. | Signature Algorithm: GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit) | ||
71:73:29:32:b6:6e:9f:cc:22:30:5a:5b:60:4e:0d:41:5f:5d: | |||
02:57:33:a8:0e:4f:b9:26:53:ce:9b:e7:25:12:ec:b6:c3:bf: | |||
fc:93:57:db:82:82:3d:fe:8c:ac:db:95:9e:45:ab:21:63:53: | |||
4c:0c:ed:c0:b8:bd:da:f5:0f:7a | |||
</source> | |||
== Используемая литература == | == Используемая литература == | ||
Строка 106: | Строка 123: | ||
== Ссылки == | == Ссылки == | ||
{{altbug|24587}} | # https://habr.com/post/306544/ Настройка TLS с поддержкой сертификатов ГОСТ и RSA на nginx | ||
# {{altbug|24587}} | |||
# https://habr.com/ru/post/353534/ | |||
<references/> | |||
{{Category navigation|title=ПО уровня предприятия|category=Enterprise Software|sortkey={{SUBPAGENAME}}}} | {{Category navigation|title=ПО уровня предприятия|category=Enterprise Software|sortkey={{SUBPAGENAME}}}} | ||
{{Category navigation|title=HOWTO|category=HOWTO|sortkey={{SUBPAGENAME}}}} | {{Category navigation|title=HOWTO|category=HOWTO|sortkey={{SUBPAGENAME}}}} |
Текущая версия от 16:43, 1 октября 2022
Поддержка шифрования по ГОСТ в 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.1.0.3.0.255.ge3af41d.p1-alt2 была ошибка
Старый способ
Для этого создайте скрипт gost-for-openssl следующего содержания:
# Adapt OpenSSL for GOST cryptography support
# See http://www.cryptocom.ru/products/openssl-1-config-en.html
. shell-version
. shell-ini-config
shell_ini_config_prefix=""
cfg="/etc/openssl/openssl.cnf"
grep -q '^openssl_conf' $cfg || sed -i '1iopenssl_conf = openssl_def' $cfg
subst 's/^default_md/#default_md/g' $cfg
if [ $libshell_version -ge 3 ] ; then
ini_config_set $cfg openssl_def engines engine_section
ini_config_set $cfg engine_section gost gost_section
ini_config_set $cfg gost_section engine_id gost
ini_config_set $cfg gost_section default_algorithms ALL
ini_config_set $cfg gost_section CRYPT_PARAMS id-Gost28147-89-CryptoPro-A-ParamSet
else
grep -q 'Gost' $cfg && exit
cat >> $cfg << _EOF_
[openssl_def]
engines = engine_section
[engine_section]
gost = gost_section
[gost_section]
engine_id = gost
default_algorithms = ALL
CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet
_EOF_
fi
Запустите скрипт (под правами root):
sh gost-for-openssl
3. Проверьте, доступны ли шифры ГОСТ для OpenSSL:
$ openssl ciphers|tr ':' '\n'|grep GOST
GOST2001-GOST89-GOST89
GOST94-GOST89-GOST89
Создание ключей
1. Создаём закрытый ключ с алгоритмом ГОСТ-2012 (ca.key):
$ openssl genpkey -algorithm gost2012_256 -pkeyopt paramset:TCB -out ca.key
2. Создаём сертификат на 365 дней (ca.cer):
$ openssl req -new -x509 -md_gost12_256 -days 365 -key ca.key -out ca.cer \
-subj "/C=RU/ST=Russia/L=Moscow/O=SuperPlat/OU=SuperPlat CA/CN=SuperPlat CA Root"
3. Проверка сертификата (ca.cer):
$ openssl x509 -in ca.cer -text -noout
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
17:47:3b:c0:e1:9a:34:02:a6:b5:ea:5e:77:80:c1:c0:8a:6f:2e:a6
Signature Algorithm: GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)
Issuer: C = RU, ST = Russia, L = Moscow, O = SuperPlat, OU = SuperPlat CA, CN = SuperPlat Root
Validity
Not Before: Apr 14 11:39:25 2020 GMT
Not After : Apr 14 11:39:25 2021 GMT
Subject: C = RU, ST = Russia, L = Moscow, O = SuperPlat, OU = SuperPlat CA, CN = SuperPlat Root
Subject Public Key Info:
Public Key Algorithm: GOST R 34.10-2012 with 256 bit modulus
Public key:
X:80FA69630DB1F99175D4659917082F1A85E49241C7CC3F406B25E42CCB53F875
Y:9AF4A5003B0E73055CEB6DC2D5B325EA16E7CE852CE5D8A479683EBAFC1F54D9
Parameter set: GOST R 34.10-2012 (256 bit) ParamSet B
X509v3 extensions:
X509v3 Subject Key Identifier:
63:29:DA:30:84:00:C3:7D:B5:F8:43:2F:A6:80:C7:A3:E1:B9:27:8C
X509v3 Authority Key Identifier:
keyid:63:29:DA:30:84:00:C3:7D:B5:F8:43:2F:A6:80:C7:A3:E1:B9:27:8C
X509v3 Basic Constraints:
CA:TRUE
Signature Algorithm: GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)
71:73:29:32:b6:6e:9f:cc:22:30:5a:5b:60:4e:0d:41:5f:5d:
02:57:33:a8:0e:4f:b9:26:53:ce:9b:e7:25:12:ec:b6:c3:bf:
fc:93:57:db:82:82:3d:fe:8c:ac:db:95:9e:45:ab:21:63:53:
4c:0c:ed:c0:b8:bd:da:f5:0f:7a
Используемая литература
- http://habrahabr.ru/post/189352/
- http://ali47802.blogspot.ru/2012/11/openssl-gost-42-gost.html
- https://habrahabr.ru/post/192446/
- http://lists.altlinux.org/pipermail/devel/2017-August/202929.html
Ссылки
- https://habr.com/post/306544/ Настройка TLS с поддержкой сертификатов ГОСТ и RSA на nginx
- altbug #24587
- https://habr.com/ru/post/353534/