ГОСТ в OpenSSL: различия между версиями

Материал из ALT Linux Wiki
(скрипт в пакете уже исправлен, начиная с alt3)
 
(не показано 17 промежуточных версий 9 участников)
Строка 1: Строка 1:
== Поддержка шифрования по ГОСТ в OpenSSL ==
== Поддержка шифрования по ГОСТ в OpenSSL ==


Поддержка ГОСТ была добавлена в OpenSSL 1.0.0 сотрудниками "Криптоком".<ref>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. Установите пакет {{pkg|openssl-engines}}:
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. Создаём 1024-битный закрытый ключ с алгоритмом ГОСТ-2001 ({{path|ca.key}}):
{{Note|Инструкция рассчитана на openssl1.1 (начиная с [[Branches/p9|p9]])}}
 
1. Создаём закрытый ключ с алгоритмом ГОСТ-2012 ({{path|ca.key}}):


<source lang="text" highlight="1">$ openssl genpkey -algorithm gost2001 -pkeyopt paramset:A -out ca.key 1024</source>
<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:
             cc:54:ca:0b:b6:db:b0:3c
             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.11-94 with GOST R 34.10-2001
        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 CA Root
         Issuer: C = RU, ST = Russia, L = Moscow, O = SuperPlat, OU = SuperPlat CA, CN = SuperPlat Root
         Validity
         Validity
             Not Before: Oct 10 11:37:49 2016 GMT
             Not Before: Apr 14 11:39:25 2020 GMT
             Not After : Oct 10 11:37:49 2017 GMT
             Not After : Apr 14 11:39:25 2021 GMT
         Subject: C=RU, ST=Russia, L=Moscow, O=SuperPlat, OU=SuperPlat CA, CN=SuperPlat CA Root
         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-2001
             Public Key Algorithm: GOST R 34.10-2012 with 256 bit modulus
                 Public key:
                 Public key:
                   X:F02426CE38041BC250153A86DB138FB6B7CCBF6C0D220314D3FF3CA38490083
                   X:80FA69630DB1F99175D4659917082F1A85E49241C7CC3F406B25E42CCB53F875
                   Y:FC5E3F8D99D2EA6ED51CC014E92E617CB32CAEBCB5B7D4FAA0CC9B0702CD0B6A
                   Y:9AF4A5003B0E73055CEB6DC2D5B325EA16E7CE852CE5D8A479683EBAFC1F54D9
                 Parameter set: id-GostR3410-2001-CryptoPro-A-ParamSet
                 Parameter set: GOST R 34.10-2012 (256 bit) ParamSet B
         X509v3 extensions:
         X509v3 extensions:
             X509v3 Subject Key Identifier:  
             X509v3 Subject Key Identifier:  
                 38:17:87:F5:DF:60:3D:90:8A:41:D6:96:E0:F8:BD:DD:18:A8:A7:0D
                 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:38:17:87:F5:DF:60:3D:90:8A:41:D6:96:E0:F8:BD:DD:18:A8:A7:0D
                 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.11-94 with GOST R 34.10-2001
     Signature Algorithm: GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)
         a4:12:d4:6c:d5:75:20:08:1e:a8:8d:9c:08:02:78:8a:f3:b6:
         71:73:29:32:b6:6e:9f:cc:22:30:5a:5b:60:4e:0d:41:5f:5d:
         e7:d5:54:44:ea:e3:8d:35:61:5a:d9:50:fe:3b:fb:ec:9d:5d:
         02:57:33:a8:0e:4f:b9:26:53:ce:9b:e7:25:12:ec:b6:c3:bf:
         78:62:a2:fd:a6:3a:23:92:3d:b9:d3:12:d9:97:df:dd:8b:3b:
         fc:93:57:db:82:82:3d:fe:8c:ac:db:95:9e:45:ab:21:63:53:
         de:0b:c7:47:30:b2:34:1d:ec:0b</source>
         4c:0c:ed:c0:b8:bd:da:f5:0f:7a
</source>


== Используемая литература ==
== Используемая литература ==
Строка 101: Строка 118:
* http://ali47802.blogspot.ru/2012/11/openssl-gost-42-gost.html
* http://ali47802.blogspot.ru/2012/11/openssl-gost-42-gost.html
* https://habrahabr.ru/post/192446/
* 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/
<references/>


<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

Создание ключей

Примечание: Инструкция рассчитана на openssl1.1 (начиная с p9)


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

Используемая литература

Ссылки

  1. https://habr.com/post/306544/ Настройка TLS с поддержкой сертификатов ГОСТ и RSA на nginx
  2. altbug #24587
  3. https://habr.com/ru/post/353534/