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

Материал из ALT Linux Wiki
(→‎Поддержка шифрования по ГОСТ в OpenSSL: Отключение дайджеста sha1 по умолчанию)
Строка 54: Строка 54:
== Создание ключей ==
== Создание ключей ==


<source lang="text" highlight="1">openssl genpkey -algorithm gost2001 -pkeyopt paramset:A -out ca.key 1024</source>
1. Создаём 1024-битный закрытый ключ ({{path|ca.key}}):


<source lang="text" highlight="1-2"># openssl req -new -x509 -days 365 -key ca.key -out ca.cer \
<source lang="text" highlight="1">$ openssl genpkey -algorithm gost2001 -pkeyopt paramset:A -out ca.key 1024</source>
   -subj "/C=RU/ST=Russia/L=Moscow/O=SuperPlat/OU=SuperPlat CA/CN=SuperPlat CA Root"
 
139647379359656:error:8007D06C:lib(128):PKEY_GOST_CTRL:invalid digest type:gost_pmeth.c:82:</source>
2. Создаём сертификат на 365 дней ({{path|ca.cer}}):
 
<source lang="text" highlight="1-2">$ openssl req -new -x509 -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>
 
3. Проверка сертификата ({{path|ca.cer}}):
 
<source lang="text" highlight="1">$ openssl x509 -in ca.cer -text -noout
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            cc:54:ca:0b:b6:db:b0:3c
    Signature Algorithm: GOST R 34.11-94 with GOST R 34.10-2001
        Issuer: C=RU, ST=Russia, L=Moscow, O=SuperPlat, OU=SuperPlat CA, CN=SuperPlat CA Root
        Validity
            Not Before: Oct 10 11:37:49 2016 GMT
            Not After : Oct 10 11:37:49 2017 GMT
        Subject: C=RU, ST=Russia, L=Moscow, O=SuperPlat, OU=SuperPlat CA, CN=SuperPlat CA Root
        Subject Public Key Info:
            Public Key Algorithm: GOST R 34.10-2001
                Public key:
                  X:F02426CE38041BC250153A86DB138FB6B7CCBF6C0D220314D3FF3CA38490083
                  Y:FC5E3F8D99D2EA6ED51CC014E92E617CB32CAEBCB5B7D4FAA0CC9B0702CD0B6A
                Parameter set: id-GostR3410-2001-CryptoPro-A-ParamSet
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                38:17:87:F5:DF:60:3D:90:8A:41:D6:96:E0:F8:BD:DD:18:A8:A7:0D
            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
 
            X509v3 Basic Constraints:
                CA:TRUE
    Signature Algorithm: GOST R 34.11-94 with GOST R 34.10-2001
        a4:12:d4:6c:d5:75:20:08:1e:a8:8d:9c:08:02:78:8a:f3:b6:
        e7:d5:54:44:ea:e3:8d:35:61:5a:d9:50:fe:3b:fb:ec:9d:5d:
        78:62:a2:fd:a6:3a:23:92:3d:b9:d3:12:d9:97:df:dd:8b:3b:
        de:0b:c7:47:30:b2:34:1d:ec:0b</source>


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

Версия от 14:49, 10 октября 2016

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

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

1. Установите пакет openssl-engines:

apt-get install openssl-engines

2. Измените конфигурационный файл OpenSSL. Для этого создайте скрипт 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. Создаём 1024-битный закрытый ключ (ca.key):

$ openssl genpkey -algorithm gost2001 -pkeyopt paramset:A -out ca.key 1024

2. Создаём сертификат на 365 дней (ca.cer):

$ openssl req -new -x509 -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:
            cc:54:ca:0b:b6:db:b0:3c
    Signature Algorithm: GOST R 34.11-94 with GOST R 34.10-2001
        Issuer: C=RU, ST=Russia, L=Moscow, O=SuperPlat, OU=SuperPlat CA, CN=SuperPlat CA Root
        Validity
            Not Before: Oct 10 11:37:49 2016 GMT
            Not After : Oct 10 11:37:49 2017 GMT
        Subject: C=RU, ST=Russia, L=Moscow, O=SuperPlat, OU=SuperPlat CA, CN=SuperPlat CA Root
        Subject Public Key Info:
            Public Key Algorithm: GOST R 34.10-2001
                Public key:
                   X:F02426CE38041BC250153A86DB138FB6B7CCBF6C0D220314D3FF3CA38490083
                   Y:FC5E3F8D99D2EA6ED51CC014E92E617CB32CAEBCB5B7D4FAA0CC9B0702CD0B6A
                Parameter set: id-GostR3410-2001-CryptoPro-A-ParamSet
        X509v3 extensions:
            X509v3 Subject Key Identifier: 
                38:17:87:F5:DF:60:3D:90:8A:41:D6:96:E0:F8:BD:DD:18:A8:A7:0D
            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

            X509v3 Basic Constraints: 
                CA:TRUE
    Signature Algorithm: GOST R 34.11-94 with GOST R 34.10-2001
         a4:12:d4:6c:d5:75:20:08:1e:a8:8d:9c:08:02:78:8a:f3:b6:
         e7:d5:54:44:ea:e3:8d:35:61:5a:d9:50:fe:3b:fb:ec:9d:5d:
         78:62:a2:fd:a6:3a:23:92:3d:b9:d3:12:d9:97:df:dd:8b:3b:
         de:0b:c7:47:30:b2:34:1d:ec:0b

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

Ссылки