Дерево страниц
Перейти к концу метаданных
Переход к началу метаданных

Сертификаты и ключи для сервиса OpenVPN

Список сертификатов и ключей

При организации удаленного доступа с помощью протокола OpenVPN на маршрутизаторах ESR в конфигурациях сервера и клиентов OpenVPN указывается некоторые сертификаты и ключи, необходимые для корректного поднятия и установления OpenVPN туннеля. Все служебные файлы, которые используются при работе с OpenVPN сервисами на ESR перечислены в таблице 1:


Таблица 1 - Список файлов сертификатов и ключей, используемых в сервисах OpenVPN

Название сертификата/ключаЧасто используемое имяНаличие на OpenVPN сервере (remote-access openvpn на ESR)Наличие на OpenVPN клиенте (tunnel openvpn на ESR)Совпадение данных на сервере и клиентеОписание
Общий секретный ключ OpenVPNta.keyДаДаОбязательноСекретный ключ OpenVPN, необходим для работы механизма tls-auth, который подписывает все SSL/TLS пакеты внутри сессии помощью механизма HMAC
Ключ Диффи-Хелманаdh.pemДаДаНеобязательноПсевдослучайная последовательность, необходима для работы механизма Диффи-Хелмана, позволяющего по незащищенному каналу связи согласовать общий секретный ключ между двумя клиентами
Сертификат удостоверяющего центра

ca.crt

ca-crt.pem

ДаДаОбязательноСертификат удостоверяющего центра, через который выписаны сертификаты для OpenVPN сервера и OpenVPN клиентов
Список сертификатов отозванных удостоверяющим центром

ca.crl

ca-crl.pem

ДаДаНеобязательноСписок отозванных удостоверяющим центром сертификатов, отозванные сертификаты не могут принимать участие в установлении OpenVPN туннеля
Приватный RSA ключ OpenVPN сервера

server.key

server-key.pem

ДаНетИсключеноПриватный RSA ключ OpenVPN сервера формата PKCS#8 в открытом (PEM) формате, используется в процессе установления TLS/SSL соединения
X.509 сертификат OpenVPN сервера

server.crt

server-crt.pem

ДаНетИсключеноСертификат X.509, содержащий публичный ключ и метаинформацию о OpenVPN сервере, используется в процессе установления TLS/SSL соединения
Приватный RSA ключ OpenVPN клиента

client.key

client-key.pem

НетДаИсключеноПриватный RSA ключ OpenVPN клиента формата PKCS#8 в открытом (PEM) формате, используется в процессе установления TLS/SSL соединения
X.509 сертификат OpenVPN клиента

client.crt

client-crt.pem

НетДаИсключеноСертификат X.509, содержащий публичный ключ и метаинформацию о OpenVPN клиенте, используется в процессе установления TLS/SSL соединения

Создание файлов сертификатов и ключей

Предварительная подготовка

Перед тем, как начать генерировать файлы для работы OpenVPN, необходимо выполнить следующие подготовительные действия:

1) Установить в ОС пакеты openssl и openvpn:

apt install openvpn openssl

2) Создать директорию, в которой будет удобно хранить сгенерированные сертификаты и ключи и перейти в неё:

mkdir ~/openssl-ca
cd ~/openssl-ca/

3) Создать в директории ряд служебных директорий и файлов:

# Директории под сертификаты, списки отозванных сертификатов, промежуточные сертификаты, приватные ключи, служебные файлы и запросы на сертификацию
mkdir certs crl newcerts private common csr

# Создадим пустой индекс, в него будет записываться информация о всех сертификатах, выпущенных УЦ
touch index.txt index.txt.attr
# Укажем серийный номер, с которого начнется индексация подписываемых УЦ сертификатов
echo 1000 > serial

# Укажем серийный номер, с которого начнется индексация списка отозванных сертификатов
echo 1000 > crlnumber

4) Создадим файл конфигурации openssl - openssl.cnf, необходимый для корректного создания и подписи сертификатов и ключей. Содержимое файла должно выглядеть следующим образом:

# Блок общих настроек УЦ
[ ca ]
default_ca = CA_default

# Блок настроек УЦ
[ CA_default ]
# Пути до различных служебных директорий и файлов
dir               = .
certs             = $dir/certs
crl_dir           = $dir/crl
new_certs_dir     = $dir/newcerts
database          = $dir/index.txt
serial            = $dir/serial
RANDFILE          = $dir/private/.rand

# Приватный ключ и сертификат УЦ. После их создания можно будет не указывать пути до них в команде "openssl ca"
private_key       = $dir/private/ca_key.pem
certificate       = $dir/certs/ca_crt.pem

# Файл, хранящий индекс последнего сгенерированного списка отозванных сертификатов
crlnumber         = $dir/crlnumber
# Путь к актуальному списку отозванных сертификатов
crl               = $dir/crl/ca_crl.pem
# Список расширений для списка отозванных сертификатов
crl_extensions    = crl_ext
# Время жизни списка отозванных сертификатов по умолчанию, по истечению времени жизни список необходимо считать неактуальным
default_crl_days  = 30

# Алгоритм взятия контролькой суммы от данных в сертификатах по умолчанию
default_md        = sha256

name_opt          = ca_default
cert_opt          = ca_default
default_days      = 375
preserve          = no
policy            = policy_strict

# Политика обязательности различных полей при создании запроса на сертификат или сам сертификат
[ policy_strict ]
countryName             = match
stateOrProvinceName     = match
organizationName        = match
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional

# Блок настроек запроса на сертификацию
[ req ]
default_bits        = 2048
distinguished_name  = req_distinguished_name
string_mask         = utf8only

default_md          = sha256

x509_extensions     = v3_ca

# Описания для полей при создании запроса на сертификат или сам сертификат
[ req_distinguished_name ]
countryName                     = Country Name (2 letter code)
stateOrProvinceName             = State or Province Name
localityName                    = Locality Name
0.organizationName              = Organization Name
organizationalUnitName          = Organizational Unit Name
commonName                      = Common Name
emailAddress                    = Email Address

# Значения по умолчанию для полей при создании запроса на сертификат или сам сертификат
countryName_default             = RU
stateOrProvinceName_default     = Russia
localityName_default            = Novosibirsk
0.organizationName_default      = Eltex
organizationalUnitName_default  = Eltex
emailAddress_default            = user@eltex.loc

# Блок с расширениями X.509 для сертификата УЦ
[ v3_ca ]
basicConstraints = critical, CA:true
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always, issuer:always
keyUsage = critical, digitalSignature, cRLSign, keyCertSign

# Блок с расширениями X.509 для сертификата OpenVPN сервера
[ v3_vpn_server ]
basicConstraints        = critical, CA:FALSE
subjectKeyIdentifier    = hash
authorityKeyIdentifier  = keyid:always, issuer:always
keyUsage                = critical, digitalSignature, keyEncipherment
extendedKeyUsage        = critical, serverAuth
subjectAltName          = email:copy

# Блок с расширениями X.509 для сертификата OpenVPN клиента
[ v3_vpn_client ]
basicConstraints        = critical, CA:FALSE
subjectKeyIdentifier    = hash
authorityKeyIdentifier  = keyid:always, issuer:always
keyUsage                = critical, digitalSignature, keyAgreement
extendedKeyUsage        = critical, clientAuth
subjectAltName          = email:copy

# Блок с расширениями X.509 для списка отозванных сертификатов УЦ
[ crl_ext ]
authorityKeyIdentifier=keyid:always

Подготовительные работы завершены.

Создание общего секретного ключа OpenVPN

Общий секретный ключ OpenVPN генерируется с помощью команды openvpn:

openvpn --genkey secret common/ta_key.pem

На более старых версиях openvpn работает команда:

openvpn --genkey --secret common/ta_key.pem


Просмотреть какой-то специфичной командой содержимое ключа нельзя, только вывести содержимое самого файла:

user@user:~/openssl-ca$ cat common/ta_key.pem
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
9193181c04a944fdf94413c9e25f705c
1ecb88ef8e7fe8647684a23e245a016e
0165181950008e17896c4abec5385cfb
968480171691d5aa55e851678dea7093
66fb13260b2e276a10b4d1cd4a7033b6
f6ec53f2f961c1132b0d6fc06b1d712b
47269a9a6acce7c4b14d45075319780d
568b3a3e2137d39564fcf3809abfdf80
afe1d51dda7b06af4de11df575afc037
ee466d496de1df79c28f6445acefd70b
cff9beb771423b5b3b2c5d974906a66a
270e99f8d62ed7633b5d91bbda198c7b
4cb28537fc08abb8ec5abe4e611b4c87
39af2eec0bcd7b69e737861053d7f22f
66b45d67ccb05e81c086903d142d4d11
027720a443e9ed554f055937a3ae349e
-----END OpenVPN Static key V1-----
user@user:~/certs$

Создание ключа Диффи-Хелмана

Ключ Диффи-Хелмана генерируется при помощи утилиты openssl. Для примера генерируется ключ длиной 4096 бит. Процедура генерации ключа занимает несколько минут:

openssl dhparam -out common/dh_key.pem 4096

Просмотреть содержимое ключа можно командой:

openssl dhparam -text -noout -in common/dh_key.pem
user@user:~/openssl-ca$ openssl dhparam -text -noout -in common/dh_key.pem
    DH Parameters: (4096 bit)
    P:   
        00:a5:ad:7e:65:d6:d4:cb:5c:6d:ef:bd:73:5a:74:
        f9:cd:03:00:e4:88:2c:75:19:2b:7d:33:48:b4:84:
        34:af:14:f1:f5:64:10:d6:67:f3:d4:dd:17:f4:9c:
        6d:ca:af:07:87:b3:ef:6a:1a:79:04:4d:3a:87:b4:
        1f:3b:4b:a2:a8:b0:e0:92:30:c0:a9:9d:3d:29:95:
        d0:a9:a8:be:4d:15:36:23:40:ac:fb:e8:c0:b0:e3:
        1a:5a:b6:60:64:6a:74:46:c9:bd:43:ce:cd:7e:e9:
        c0:ff:c4:54:09:ee:75:0f:ec:40:5f:8f:7b:db:85:
        e4:17:ce:39:1d:51:c5:64:c0:e4:1e:ea:1c:1a:3f:
        83:e2:72:14:5e:99:23:96:b2:d5:53:a3:13:95:0a:
        8f:db:f3:9b:29:25:87:dd:18:66:6c:d0:dd:04:db:
        9c:c8:9e:60:7e:3b:c7:b6:3e:f6:79:e2:78:88:79:
        c6:a0:97:aa:68:c5:7d:dc:3c:fd:49:f7:35:77:ee:
        a8:ea:dc:12:1e:73:69:5c:94:75:33:29:64:57:7f:
        bb:1c:ad:22:c0:4d:7b:a3:96:81:88:e1:3e:79:f3:
        3a:17:58:d6:d2:78:8c:ee:23:98:b0:b8:17:e5:5c:
        4f:1f:0d:0c:04:f4:53:44:d1:c0:ae:d1:db:0b:77:
        01:a5:c1:43:b5:00:9a:f7:d6:6f:b1:cb:8b:f9:c6:
        3f:b5:9b:ab:52:a2:b3:1c:99:84:85:8a:23:fb:61:
        7a:21:f9:7c:23:20:46:0a:d7:9e:8c:48:7a:af:fc:
        9b:89:83:4b:2d:6b:0a:f1:36:4f:13:36:a4:97:e2:
        9c:2d:9d:98:74:b1:db:b2:a5:e3:54:14:17:c9:65:
        d0:67:08:ae:f4:79:2e:e2:5f:8c:8c:8d:28:ae:d8:
        98:2d:84:66:90:18:5b:03:38:ff:54:e3:6e:62:45:
        6f:44:7d:cf:28:65:a7:aa:6c:64:02:51:f8:2b:fe:
        e8:04:f3:e3:48:39:7a:f1:ed:15:66:70:46:98:71:
        41:bd:ea:42:30:9c:8f:cc:55:ed:f0:58:4f:54:0e:
        d1:e5:b7:2d:06:11:f4:cc:f4:a4:81:f1:2e:ac:c8:
        c2:22:16:30:e5:77:de:e2:46:d5:91:96:95:21:4c:
        86:0f:f0:b6:d7:78:a4:f0:dd:18:8e:be:25:ff:13:
        1b:6f:8f:6f:8a:6a:e1:e3:4d:62:f8:1f:43:f3:20:
        42:d0:7e:24:21:3e:92:21:91:e5:4d:d6:c1:05:d8:
        85:e3:71:91:58:fa:97:de:81:a4:5b:a4:d7:30:23:
        09:77:8a:aa:7f:26:6a:f4:94:d7:10:53:23:4f:6b:
        5c:3b:2f
    G:    2 (0x2)
user@user:~/openssl-ca$

Создание приватного ключа и X.509 сертификата удостоверяющего центра

Создаем приватный RSA ключ УЦ в формате ключевого контейнера PKCS#8. В примере создается RSA ключ длиной 4096 бит. Алгоритм и опции для генерации можно менять в соответствии с поддержанными сочетаниями, которые можно посмотреть в "man openssl genpkey". Команда создания ключа выглядит следующим образом:

openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096 -out private/ca_key.pem

Просмотреть содержимое ключа можно командой:

openssl pkey -text -noout -in private/ca_key.pem
user@user:~/openssl-ca$ openssl pkey -text -noout -in private/ca_key.pem
Private-Key: (4096 bit, 2 primes)
modulus:
    00:bf:d9:e4:b9:63:f2:8a:8a:ef:30:7c:54:9a:78:
    cb:56:a6:7b:5e:39:7c:80:01:1f:db:cd:d6:08:69:
    7b:8e:ff:7d:6b:2f:53:23:a2:af:04:f5:51:6d:c5:
    86:a7:a7:88:ff:42:dd:e6:ed:84:56:6a:54:33:7c:
    b8:3e:cc:a4:98:50:60:f7:30:81:db:75:60:b3:ac:
    10:6f:c9:41:eb:cf:95:26:6b:9d:20:04:62:5b:a4:
    74:f0:5d:aa:5c:16:39:be:89:22:90:aa:b1:38:1b:
    ea:af:f4:f4:a0:51:30:ce:84:89:54:91:a5:fb:5d:
    4d:0f:38:be:af:69:2d:c0:81:ac:ce:a0:38:c2:f0:
    a0:33:79:71:ea:d8:b0:cf:85:1b:81:dd:c4:af:ec:
    ea:5d:49:9e:39:14:6d:44:3f:df:5b:11:44:9a:83:
    10:45:fa:3c:f2:8f:c0:53:32:cc:d9:d2:dc:0f:d7:
    d5:8b:eb:c4:73:e4:e1:92:51:61:c8:4d:3a:cc:22:
    34:62:00:c5:d7:53:e5:24:b1:95:a7:3a:81:27:1d:
    e8:7a:4a:1c:4a:8c:39:81:41:2f:12:f9:d3:fe:42:
    6f:f4:cd:3d:d7:23:54:32:61:10:47:82:d3:18:3d:
    f4:80:93:f6:b7:fa:d3:84:32:62:88:0d:81:7c:8a:
    ed:7a:56:6e:1f:9c:ee:ad:9e:e9:31:84:f7:fb:1f:
    9d:7e:03:e4:5a:4e:c7:16:83:b3:d0:b4:7c:db:fd:
    a7:38:aa:2e:f8:58:7c:d8:4b:4a:e3:0f:89:f8:01:
    25:2b:3f:69:ee:d3:15:64:7d:12:78:85:a4:e7:88:
    76:fc:b1:00:47:10:f1:3d:9c:53:55:49:72:80:c3:
    81:e6:f6:15:d3:04:af:32:c3:66:3b:ef:0a:2e:da:
    e3:19:3d:bc:b4:67:96:8e:10:e2:27:4f:a1:04:1b:
    18:ee:a7:4c:92:0a:54:d5:1b:f6:c8:e1:a8:31:89:
    a1:f2:25:c7:e7:20:0e:80:8a:b3:9c:d1:a4:2c:d5:
    b7:2c:c3:f7:cd:91:e1:0f:6a:29:18:ec:1d:ba:25:
    d1:78:98:84:f0:a4:2f:c7:75:4d:aa:a9:54:50:83:
    6b:9b:55:d1:c4:a8:06:d4:5b:a3:42:24:c2:af:19:
    89:66:a9:65:62:65:a8:17:c1:00:ee:4e:a4:92:15:
    61:0b:2e:5c:14:6f:fc:82:ef:81:88:1b:af:26:74:
    89:72:f5:5c:1b:bb:31:ac:30:fb:55:bf:3f:6d:80:
    2c:f6:dd:17:da:36:56:37:a6:67:68:4f:cd:f8:9d:
    34:cc:8d:32:82:cd:fe:86:9f:b0:a3:e1:01:7a:60:
    c6:81:83
publicExponent: 65537 (0x10001)
privateExponent:
    01:13:c8:25:02:5a:aa:4c:7d:6b:58:47:61:56:ac:
    4d:a0:41:b1:15:c1:8d:36:74:67:57:90:8c:1b:8b:
    86:12:09:32:40:e1:c6:a1:73:3a:23:e6:81:27:4a:
    ca:46:36:8e:b8:61:66:9a:8e:d3:ad:65:2b:a4:d7:
    a4:02:a2:29:f8:c9:92:99:c3:20:e8:57:d2:aa:74:
    ad:2c:04:22:be:d7:a7:8f:93:22:4a:e4:02:7f:b9:
    e8:5f:9e:45:46:1a:ac:e7:38:3a:77:ba:e7:05:c1:
    1b:9b:d4:83:d1:f0:e4:37:fa:4d:6f:43:ef:55:66:
    c9:5f:18:33:03:f4:2d:d0:8c:97:dc:6e:75:29:c4:
    bc:85:42:0e:7f:88:fe:a1:50:b6:39:f8:90:c4:53:
    cc:92:4d:41:24:cc:38:45:e3:8b:2f:5d:a3:40:79:
    26:eb:70:cc:2b:e2:78:95:20:71:58:ad:c3:a9:02:
    99:f6:88:f3:dd:a5:26:9d:2e:5f:61:8f:a2:f5:ce:
    35:7e:ab:9d:b9:ea:df:79:df:cd:40:96:d9:11:61:
    ec:cd:dd:ba:cd:6e:c5:3b:08:78:a2:ce:7d:ef:01:
    91:ee:55:1a:90:28:38:e0:32:a7:34:24:db:4d:fd:
    c1:7b:13:37:95:40:fa:cd:0d:a0:95:f2:d4:30:33:
    85:29:d9:3f:5d:c6:c4:56:ed:1a:5a:07:db:ab:8b:
    d0:28:e0:7b:6c:4a:db:bc:41:24:ce:98:2d:7e:9c:
    c7:d3:08:c4:80:70:ee:e3:0f:2c:ce:c5:ca:b4:78:
    c9:b2:8f:69:da:0f:92:65:ba:84:be:6c:3c:cc:10:
    0f:e6:5c:9b:2c:b0:61:6b:66:81:5b:9a:04:e4:50:
    90:bb:87:d3:19:bd:a6:71:b5:0a:80:c9:90:c5:8d:
    b5:42:ac:a4:5e:55:2a:a4:8b:95:36:39:7e:a0:e2:
    56:8a:88:94:fc:bb:5d:47:9b:3f:56:66:52:27:3d:
    41:4d:c2:bc:44:4b:b5:e5:bd:02:af:8b:85:76:cd:
    09:32:82:6c:bd:34:f9:02:6a:d4:e4:a2:a3:d6:f7:
    26:5a:e8:f8:c3:28:c6:d3:18:fd:5d:47:d9:88:87:
    cd:00:e1:cc:5a:d7:69:22:24:26:e9:b0:89:38:1b:
    16:56:6b:6f:d6:21:52:19:be:64:8b:ee:3e:82:0c:
    32:b0:ea:62:d6:41:aa:06:65:bf:e0:60:1a:f0:d3:
    da:61:d2:3a:0a:11:1e:df:35:ff:3a:8c:cb:33:db:
    a4:ea:e4:d2:70:4f:a0:5b:5b:01:ae:dc:a4:94:28:
    9b:7c:d0:2a:33:f2:bc:6b:16:68:4b:81:77:6e:84:
    5b:81
prime1:
    00:d3:93:b7:5e:5a:08:ea:2a:81:da:ad:be:e2:21:
    48:20:83:7a:2c:5d:7e:3b:66:ce:0b:7f:b8:96:33:
    d5:5d:32:c5:60:59:98:b5:ef:78:70:23:13:05:7d:
    85:c3:6e:8f:ac:ff:d4:7d:6e:81:4a:76:97:e2:3f:
    c0:4b:f9:e8:c2:87:6a:8b:b3:73:f7:6f:bf:7b:9a:
    70:1e:3c:17:05:ca:a6:ba:10:ac:5c:d2:ae:f5:ac:
    fc:c4:51:05:82:4a:88:b1:c9:97:06:91:d0:4b:e5:
    7a:a9:54:ee:14:55:79:59:4a:31:0e:7c:50:b2:a7:
    c8:e0:98:67:c6:94:9e:26:f7:8f:e9:c6:5b:49:ee:
    c3:20:8f:7a:ec:a2:c7:de:63:d3:d3:49:fb:eb:5f:
    85:0d:b5:db:d1:c1:05:41:9a:55:14:fc:79:85:13:
    69:33:1b:96:b0:9d:22:e2:b5:ce:18:9f:24:f0:e7:
    32:b0:4b:63:f5:2c:35:4b:38:84:d8:f7:1d:5d:1f:
    6c:23:ee:df:2d:94:1b:d7:50:44:81:b6:0b:22:7f:
    84:15:0d:8a:37:20:07:77:4c:15:62:37:2d:91:5e:
    6f:60:94:52:b5:6c:02:4f:af:83:0a:f5:f7:ff:bb:
    65:f5:44:4d:53:18:61:d0:55:7a:09:7d:93:fb:af:
    56:7d
prime2:
    00:e8:21:e8:ec:66:a6:4f:91:46:87:5c:87:c8:f9:
    a1:ee:0f:f8:a3:9b:a9:98:62:88:68:4d:c5:a3:15:
    dd:dd:44:de:a6:71:a0:fa:e1:13:01:c4:79:ab:4f:
    e0:5f:62:0a:a5:18:06:bf:00:da:c0:10:3e:be:a9:
    59:51:31:d2:46:60:02:85:8b:df:da:ca:c2:70:a1:
    2b:a5:60:40:78:ce:28:4f:41:ef:b0:c7:1c:55:92:
    c3:2a:2f:21:b2:24:62:ca:11:c6:ae:22:16:54:18:
    06:dd:2f:a0:43:aa:7b:15:c9:27:5f:ee:46:b5:ff:
    59:42:60:2c:8b:94:2f:4b:73:68:58:6b:07:95:2c:
    96:79:ee:69:29:9e:21:03:88:88:40:1b:c2:ad:3c:
    29:c2:ed:ea:fd:e2:3f:81:be:24:b2:1b:72:8e:1c:
    b1:a9:1c:46:90:9e:94:91:13:ad:33:7a:8f:47:07:
    75:b5:15:a4:4e:49:a3:1c:65:6d:68:9b:10:57:c3:
    e3:d4:ce:c5:82:0f:29:d5:91:12:d1:a3:52:52:e0:
    be:68:3b:2f:eb:9c:1e:ed:f3:1e:97:73:8d:64:7a:
    82:f0:2c:57:69:37:a8:22:4a:a6:c0:71:6f:5c:a6:
    2b:2b:a6:8b:a9:8c:d8:69:37:6b:4b:28:d0:25:3c:
    b7:ff
exponent1:
    77:1f:8d:37:97:53:bb:9c:31:3e:91:62:8e:e9:14:
    36:12:30:a0:78:07:51:a4:a1:50:02:1a:48:9f:68:
    7b:2f:d1:c7:5c:ca:c9:6c:ca:0f:c0:ff:bd:b0:9d:
    b6:9a:32:54:c2:39:be:61:90:73:ff:6f:a6:98:24:
    49:e2:ac:35:92:8e:df:97:2b:2c:de:83:1e:31:a6:
    fc:ae:f2:7b:75:4d:08:27:c9:13:fe:1f:39:fd:aa:
    d7:51:92:db:77:e1:9c:d0:16:b3:41:37:d8:f3:9c:
    6b:68:81:1f:7b:bc:76:14:7a:a8:60:40:03:46:ca:
    a8:01:c7:34:1c:8b:2a:ff:69:cc:c2:bc:b5:54:b4:
    12:4a:16:78:d3:71:da:f9:b3:d3:1b:ad:b6:29:32:
    bd:b4:6d:ce:9c:71:bc:2d:0b:c8:64:1a:7b:5d:a1:
    76:80:0b:08:e7:80:33:cb:0e:fd:f7:e4:91:aa:6a:
    74:ae:0d:da:85:88:80:10:93:63:a1:46:ac:1e:bc:
    01:43:45:ee:e0:9c:08:4f:8e:32:c5:ef:60:fe:10:
    bc:d5:c1:c3:25:ca:6e:55:ad:18:7e:5e:ae:a1:4f:
    ee:3d:b4:8f:a6:ff:6a:24:34:90:e0:4a:40:77:1f:
    81:c7:72:0d:de:05:7c:8a:13:ca:f2:24:76:a9:92:
    f5
exponent2:
    00:9a:93:a2:20:71:c6:83:ab:90:d4:a8:98:3f:0b:
    84:7a:1b:a6:8d:84:25:ae:34:c6:f2:f5:ff:0a:b7:
    8f:f3:3d:5e:2a:65:f6:35:b9:d5:47:53:07:56:3d:
    ad:82:b6:ad:b1:fc:4a:d9:bb:fe:ee:f0:a2:67:a2:
    2b:b8:f6:bd:38:61:cc:ac:13:55:b0:c3:5e:31:54:
    11:d5:61:3f:ed:72:12:c3:9c:7b:b9:33:0d:ba:2a:
    2d:ce:14:6e:92:ca:ca:02:17:4e:3f:3c:b1:b3:b4:
    00:36:1f:f5:cf:b9:61:97:43:48:f6:07:9c:8c:ab:
    0a:4c:39:f0:cf:cd:90:a4:e4:a7:f2:60:eb:3e:b9:
    df:46:38:ad:4c:aa:60:ff:92:56:70:a2:4b:c3:c2:
    11:69:1d:b7:62:f2:db:29:51:6d:ec:30:7c:db:07:
    5e:82:e7:32:52:31:57:6b:38:38:18:d4:9f:3e:44:
    48:6c:9a:89:bc:1c:2b:02:c8:c3:cf:69:9a:bb:66:
    d5:7b:2b:69:b8:4e:d2:a3:c5:a4:4b:77:3f:65:b3:
    04:f8:31:99:9a:82:6e:d2:33:18:06:f0:4a:92:43:
    46:98:1a:5e:e6:d0:ca:24:73:a3:90:f8:b8:98:70:
    8a:c4:d9:75:9d:25:0e:23:1a:65:57:3a:49:48:d2:
    a3:0f
coefficient:
    00:b7:a3:41:e7:4e:55:64:f1:b7:e5:38:dd:5a:87:
    63:48:37:dd:19:8a:ed:ab:3c:48:5b:76:50:e0:0f:
    8a:94:62:f6:45:35:89:b8:9a:f0:2e:89:f5:d4:69:
    e1:d0:76:66:91:0a:d6:bd:6a:7f:46:b0:9c:eb:94:
    67:26:db:2a:78:4c:77:9e:f2:9d:5f:36:11:0e:ed:
    e4:f6:8c:df:a4:b9:9f:22:d7:dd:79:f9:59:5e:5d:
    de:f8:ef:5d:ba:d4:90:3b:a7:89:99:da:19:58:d3:
    6e:bd:2d:e2:91:e0:ef:bb:b7:80:1b:71:63:01:f0:
    96:6b:4b:0c:7e:94:cc:76:a9:45:e9:75:5a:5f:d6:
    fd:b5:fd:a9:1f:25:7d:26:01:33:42:ce:5d:d2:5c:
    14:9f:56:77:1e:c8:bc:83:a2:16:8c:fe:b6:e1:52:
    e2:b6:03:25:81:a5:ac:d6:5e:f1:76:4b:71:90:eb:
    e2:32:31:40:9c:3e:0f:3e:7b:82:ed:04:9f:fb:fa:
    26:71:06:69:f0:da:c5:a2:c1:1f:72:2a:f7:e7:b5:
    3e:c7:67:3c:cb:a4:86:9a:97:3a:84:6c:bb:b4:62:
    2f:fd:47:55:51:3b:91:bf:df:a5:81:c8:a5:ff:a0:
    c9:5e:ab:6f:40:7b:d0:f0:6d:41:3e:ca:f7:a8:cf:
    0a:82
user@user:~/openssl-ca$

После чего создадим из данного приватного ключа создадим запрос на сертификацию и подпишем его этим же ключом, тем самым создав самоподписанный сертификат УЦ. Пояснения по аргументам:

  • ключ -days задает время жизни сертификата в днях;
  • ключ -nodes отключает шифрование итогового файла сертификата и защиты его при помощи пароля;
  • ключ -config ссылается на используемый файл конфигурации openssl, в нашем случае на тот, что расположен в текущей директории;
  • ключ -extensions указывает на секцию v3_ca в файле конфигурации openssl.cnf. В используемом нами openssl.cnf в этой секции описан набор расширений X.509, характерных для сертификатов УЦ;
  • ключ -subj содержит метаинформацию о владельце сертификата. При остуствии данного ключа ввод данных полей будет осуществляться в интерактивном режиме.
openssl req -config openssl.cnf -key private/ca_key.pem -new -x509 -days 3650 -sha256 -nodes -extensions v3_ca -subj "/C=RU/ST=Siberia/L=Novosibirsk/O=Eltex/OU=Eltex SC/CN=ca.test.loc/emailAddress=ca@test.loc" -out certs/ca_crt.pem

Просмотреть содержимое сертификата можно командой:

openssl x509 -text -noout -in certs/ca_crt.pem
user@user:~/openssl-ca$ openssl x509 -text -noout -in certs/ca_crt.pem
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            18:cb:d7:1d:4f:af:1f:10:cf:19:51:4b:71:5a:91:b7:b3:d4:6b:35
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = RU, ST = Siberia, L = Novosibirsk, O = Eltex, OU = Eltex SC, CN = ca.test.loc, emailAddress = ca@test.loc
        Validity
            Not Before: Oct  4 03:36:06 2022 GMT
            Not After : Oct  1 03:36:06 2032 GMT
        Subject: C = RU, ST = Siberia, L = Novosibirsk, O = Eltex, OU = Eltex SC, CN = ca.test.loc, emailAddress = ca@test.loc
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (4096 bit)
                Modulus:
                    00:bf:d9:e4:b9:63:f2:8a:8a:ef:30:7c:54:9a:78:
                    cb:56:a6:7b:5e:39:7c:80:01:1f:db:cd:d6:08:69:
                    7b:8e:ff:7d:6b:2f:53:23:a2:af:04:f5:51:6d:c5:
                    86:a7:a7:88:ff:42:dd:e6:ed:84:56:6a:54:33:7c:
                    b8:3e:cc:a4:98:50:60:f7:30:81:db:75:60:b3:ac:
                    10:6f:c9:41:eb:cf:95:26:6b:9d:20:04:62:5b:a4:
                    74:f0:5d:aa:5c:16:39:be:89:22:90:aa:b1:38:1b:
                    ea:af:f4:f4:a0:51:30:ce:84:89:54:91:a5:fb:5d:
                    4d:0f:38:be:af:69:2d:c0:81:ac:ce:a0:38:c2:f0:
                    a0:33:79:71:ea:d8:b0:cf:85:1b:81:dd:c4:af:ec:
                    ea:5d:49:9e:39:14:6d:44:3f:df:5b:11:44:9a:83:
                    10:45:fa:3c:f2:8f:c0:53:32:cc:d9:d2:dc:0f:d7:
                    d5:8b:eb:c4:73:e4:e1:92:51:61:c8:4d:3a:cc:22:
                    34:62:00:c5:d7:53:e5:24:b1:95:a7:3a:81:27:1d:
                    e8:7a:4a:1c:4a:8c:39:81:41:2f:12:f9:d3:fe:42:
                    6f:f4:cd:3d:d7:23:54:32:61:10:47:82:d3:18:3d:
                    f4:80:93:f6:b7:fa:d3:84:32:62:88:0d:81:7c:8a:
                    ed:7a:56:6e:1f:9c:ee:ad:9e:e9:31:84:f7:fb:1f:
                    9d:7e:03:e4:5a:4e:c7:16:83:b3:d0:b4:7c:db:fd:
                    a7:38:aa:2e:f8:58:7c:d8:4b:4a:e3:0f:89:f8:01:
                    25:2b:3f:69:ee:d3:15:64:7d:12:78:85:a4:e7:88:
                    76:fc:b1:00:47:10:f1:3d:9c:53:55:49:72:80:c3:
                    81:e6:f6:15:d3:04:af:32:c3:66:3b:ef:0a:2e:da:
                    e3:19:3d:bc:b4:67:96:8e:10:e2:27:4f:a1:04:1b:
                    18:ee:a7:4c:92:0a:54:d5:1b:f6:c8:e1:a8:31:89:
                    a1:f2:25:c7:e7:20:0e:80:8a:b3:9c:d1:a4:2c:d5:
                    b7:2c:c3:f7:cd:91:e1:0f:6a:29:18:ec:1d:ba:25:
                    d1:78:98:84:f0:a4:2f:c7:75:4d:aa:a9:54:50:83:
                    6b:9b:55:d1:c4:a8:06:d4:5b:a3:42:24:c2:af:19:
                    89:66:a9:65:62:65:a8:17:c1:00:ee:4e:a4:92:15:
                    61:0b:2e:5c:14:6f:fc:82:ef:81:88:1b:af:26:74:
                    89:72:f5:5c:1b:bb:31:ac:30:fb:55:bf:3f:6d:80:
                    2c:f6:dd:17:da:36:56:37:a6:67:68:4f:cd:f8:9d:
                    34:cc:8d:32:82:cd:fe:86:9f:b0:a3:e1:01:7a:60:
                    c6:81:83
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Subject Key Identifier: 
                4E:98:32:4C:18:FE:FB:B9:D3:8E:7B:68:E0:9E:E6:6F:FA:C7:C7:2F
            X509v3 Authority Key Identifier: 
                keyid:4E:98:32:4C:18:FE:FB:B9:D3:8E:7B:68:E0:9E:E6:6F:FA:C7:C7:2F
                DirName:/C=RU/ST=Siberia/L=Novosibirsk/O=Eltex/OU=Eltex SC/CN=ca.test.loc/emailAddress=ca@test.loc
                serial:18:CB:D7:1D:4F:AF:1F:10:CF:19:51:4B:71:5A:91:B7:B3:D4:6B:35
            X509v3 Key Usage: critical
                Digital Signature, Certificate Sign, CRL Sign
    Signature Algorithm: sha256WithRSAEncryption
    Signature Value:
        b9:2c:4b:bc:e3:44:b6:49:d8:47:e4:6f:cc:36:31:a5:ab:57:
        cf:1d:9c:65:76:94:ec:f0:3e:c8:de:2a:3c:af:be:b2:5b:b6:
        76:fd:84:2f:64:31:32:b1:cb:12:6b:58:48:75:59:b6:ad:66:
        1d:39:a2:a9:8e:7a:26:b5:94:71:e5:f4:f0:6a:7f:8d:57:4b:
        41:da:3e:2e:2a:e0:6e:d1:d7:d7:0b:6b:7b:55:15:47:20:cd:
        f4:b9:8c:bd:06:41:7b:e4:85:8c:f1:df:52:48:c5:ea:ba:0f:
        31:1a:0d:ba:de:6a:87:d2:9c:a1:cf:60:d1:43:e0:78:a4:69:
        1c:e0:34:3a:06:ac:0b:23:ea:e0:44:c5:3a:7a:8f:e6:eb:ef:
        c8:16:08:89:95:b8:fe:04:f4:db:8b:bd:53:e4:a5:1a:0b:68:
        7f:0d:de:6d:c2:54:39:f6:13:d5:46:08:b5:30:43:8e:00:f0:
        5b:21:9e:45:30:df:24:48:15:46:00:50:63:f8:f8:ef:bf:ce:
        3c:61:db:c4:78:c4:d4:5c:83:d6:a5:82:88:5d:2c:49:4b:1e:
        8f:7d:5a:28:50:37:fa:17:42:f2:6e:f6:17:23:a1:a6:c6:83:
        d1:99:98:fa:82:66:2d:c6:dd:b6:66:07:25:f9:9b:ae:22:f8:
        45:91:9f:e7:9d:2a:70:ca:69:f8:4b:04:07:08:3b:cc:19:6e:
        35:1b:43:74:d2:27:a8:72:6f:a7:6a:1e:79:68:b0:34:9d:1e:
        7a:2f:03:ff:38:02:9c:26:bb:49:5f:b4:44:3c:72:50:09:72:
        0e:01:50:4b:a6:46:1e:63:99:5d:d9:79:8a:42:c6:35:19:94:
        73:19:8d:53:15:72:93:1f:a2:4f:45:84:6b:5c:13:b7:dc:79:
        af:4e:b4:69:65:d9:25:77:41:4d:94:41:2f:64:3f:47:df:80:
        6e:49:2e:ce:2d:37:c8:10:e4:96:21:d8:b8:53:50:27:b0:f8:
        9f:c1:3d:dc:71:f9:12:d8:fb:a0:d0:39:79:cb:1c:27:a2:b8:
        61:d1:2c:cd:ff:70:d7:91:37:7c:8b:68:0b:4c:af:4d:a2:2e:
        ec:94:55:74:0b:f5:e8:2e:a9:83:11:4d:a7:9b:8e:03:dd:ac:
        72:da:ff:bc:6a:bc:3a:af:72:3a:23:f2:28:0e:a1:af:fb:49:
        04:72:e8:f6:94:18:dd:24:12:d1:78:bf:18:78:b4:14:8d:b7:
        d0:2a:80:ec:fd:6b:5e:07:a4:12:c5:c6:1f:6a:2b:18:0c:a0:
        6c:a8:4c:d0:f8:f0:1e:f5:96:7e:8e:b6:94:39:89:b1:4d:1b:
        47:4a:21:c5:4f:a5:b7:3f
user@user:~/openssl-ca$

Создание приватного ключа и сертификата X.509 УЦ завершено.

Создание списка отозванных сертификатов удостоверяющего центра

Список отозванных сертификатов УЦ создается после генерации приватного ключа и X.509 сертификата УЦ. Команда генерации списка выглядит следующим образом:

openssl ca -config openssl.cnf -gencrl -out crl/ca_crl.pem

Просмотреть содержимое списка отозванных сертификатов можно командой:

openssl crl -text -noout -in crl/ca_crl.pem
user@user:~/openssl-ca$ openssl crl -text -noout -in crl/ca_crl.pem
Certificate Revocation List (CRL):
        Version 2 (0x1)
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = RU, ST = Siberia, L = Novosibirsk, O = Eltex, OU = Eltex SC, CN = ca.test.loc, emailAddress = ca@test.loc
        Last Update: Oct  4 03:43:16 2022 GMT
        Next Update: Nov  3 03:43:16 2022 GMT
        CRL extensions:
            X509v3 Authority Key Identifier: 
                4E:98:32:4C:18:FE:FB:B9:D3:8E:7B:68:E0:9E:E6:6F:FA:C7:C7:2F
            X509v3 CRL Number: 
                4096
No Revoked Certificates.
    Signature Algorithm: sha256WithRSAEncryption
    Signature Value:
        82:cb:fa:d8:88:53:99:15:34:7b:9d:f2:3f:07:0f:92:2f:35:
        cd:24:0c:c2:ef:44:f4:ba:1c:14:ce:6e:50:69:b2:54:5e:8c:
        44:63:bd:df:ef:5f:1e:ba:bf:5e:86:39:9a:a7:2b:ce:ae:52:
        fc:60:74:43:5c:98:7b:37:01:92:3b:4b:e8:78:f6:43:19:82:
        c1:16:c7:eb:c9:10:62:b6:82:a4:f9:f7:3d:dd:b8:a4:0f:b1:
        b3:50:eb:b5:35:bc:66:66:87:b3:bf:35:9d:f9:63:e4:ef:de:
        de:c1:48:54:a7:55:32:65:dd:c1:67:29:de:fa:6f:e1:11:69:
        0d:e2:1d:63:5d:f0:f9:5c:08:24:37:f0:3f:3a:be:b6:70:13:
        f6:eb:d6:ba:0e:e2:ce:a5:7f:4f:58:6d:4f:48:e1:9a:19:31:
        4c:51:94:54:8f:5a:46:01:91:86:c7:ee:75:fd:a7:2d:a5:5f:
        99:e0:7a:a2:f4:82:97:db:89:7f:cd:d3:4b:27:7d:6d:cd:e8:
        3d:87:a3:9b:c7:b4:14:36:cc:34:9c:0f:ad:30:f0:88:1d:08:
        df:02:6d:35:71:17:e2:4c:b1:b7:6a:bf:63:6a:b2:39:fc:21:
        0e:47:19:70:f9:04:f8:cf:d3:eb:f7:0a:63:67:6a:14:69:3b:
        44:c2:7b:18:0a:87:0d:90:c6:da:81:b0:03:3a:8d:69:b3:f5:
        8f:6c:89:29:b5:a8:9b:70:85:03:00:f5:c2:6f:d9:18:18:f6:
        ab:6a:33:63:98:9d:0e:de:6d:e3:58:2b:9a:01:a7:76:c4:e6:
        63:b1:5f:72:f8:ff:9d:01:5e:1a:85:63:79:46:ee:01:98:5a:
        99:7e:65:62:0a:48:0d:e1:0a:36:d4:c1:fe:e0:61:b4:b0:70:
        2f:a6:f7:7a:38:29:73:bd:84:00:ae:94:60:94:97:60:6c:56:
        ee:77:fa:8f:a4:d4:b7:fd:1d:4f:4c:41:8f:01:68:ef:8d:2c:
        e3:66:46:66:17:a9:72:e9:7f:47:c4:64:22:8b:b1:ee:66:24:
        a0:8b:ee:e1:25:5e:0e:7a:0e:fe:09:19:c1:c2:f9:2a:72:35:
        4b:62:20:dd:3b:46:89:10:ce:60:24:9f:af:81:68:38:f0:9c:
        3b:d5:cc:95:da:34:9b:0c:19:f0:b0:3a:93:f7:20:b8:c7:dc:
        df:ce:15:c8:9a:ce:9b:e9:81:61:df:3b:7d:c7:43:25:82:b0:
        78:a6:42:63:14:3e:03:a7:e0:59:16:99:20:75:82:8e:2b:10:
        ae:fc:43:19:ab:67:80:18:c4:27:e9:08:74:b1:d7:1c:13:49:
        31:97:49:f9:1b:45:71:0e
user@user:~/openssl-ca$

Поскольку отзывов сертификатов еще не проводилось - список отозванных сертификатов будет пуст, на что в явном виде намекает надпись "No Revoked Certificates".

Создание списка отозванных сертификатов успешно завершено. Процедура отзыва сертификата описана в одном из следующих пунктов.

Создание приватного ключа и X.509 сертификата для OpenVPN сервера

Создаем приватный RSA ключ для OpenVPN сервера в формате ключевого контейнера PKCS#8. В примере создается RSA ключ длиной 2048 бит. Алгоритм и опции для генерации можно менять в соответствии с поддержанными сочетаниями, которые можно посмотреть в "man openssl genpkey". Команда создания ключа выглядит следующим образом:

openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out private/server_key.pem

Просмотреть содержимое ключа можно командой:

openssl pkey -text -noout -in private/server_key.pem
user@user:~/openssl-ca$ openssl pkey -text -noout -in private/server_key.pem
Private-Key: (2048 bit, 2 primes)
modulus:
    00:b0:5d:21:33:73:2b:51:64:13:1c:4d:59:f7:07:
    e1:ed:8c:1e:41:74:96:31:b6:b3:96:08:9a:7b:57:
    73:4a:47:0a:a0:35:69:e0:51:7f:bf:3c:5a:8b:54:
    dc:be:2c:22:05:bf:cb:66:a3:db:b8:2b:8f:35:8f:
    1b:34:42:62:7b:a2:37:6d:82:2b:e2:78:25:00:b1:
    64:8e:da:31:fe:6c:ae:54:72:df:5e:a5:44:ee:8f:
    05:9b:2c:ff:b7:75:15:82:06:70:88:c2:76:0e:e9:
    73:1b:88:3c:0b:7b:7e:e6:ea:69:00:3d:a0:14:43:
    20:88:ec:e6:a8:60:5c:cd:e8:7c:8f:66:a8:2e:58:
    a4:ba:1a:dc:78:05:9c:ef:1a:79:d7:bb:55:22:85:
    aa:cd:dd:ba:82:e8:81:19:90:bc:08:5a:8b:3e:77:
    5d:c9:95:0d:05:1a:ff:3c:7f:fa:91:6e:1c:da:16:
    d6:a3:7c:84:ae:fd:4c:91:fa:b0:ae:c8:08:15:96:
    ed:6a:8e:15:22:ce:c9:32:dc:ef:0e:a4:25:f4:9c:
    7f:1c:e5:eb:cc:28:25:a1:12:b3:54:31:45:ed:e6:
    d7:43:38:f9:28:4c:91:fb:a3:29:83:f5:9e:54:02:
    fa:0a:d0:91:2f:02:71:5b:16:d0:7c:29:3a:f5:b7:
    0a:61
publicExponent: 65537 (0x10001)
privateExponent:
    37:94:c2:17:e2:dd:ee:02:a9:fb:2b:6d:84:ea:d9:
    0a:f2:33:be:d1:2d:5c:71:85:db:6c:ce:b2:bc:76:
    bb:1b:f4:7f:55:16:0e:f9:e0:56:b6:80:9a:94:9e:
    14:d8:f7:c7:f4:0f:f8:42:ff:c5:e5:04:77:0e:a8:
    b6:29:8d:bc:04:fd:8e:e7:8d:49:0c:30:2d:2d:ba:
    d1:42:76:ab:06:39:52:a7:f9:39:6c:c0:72:a6:64:
    4f:e9:38:95:ea:b2:62:8e:00:fd:38:bb:d8:2b:3e:
    79:98:cf:c3:96:a2:01:c8:32:5b:3f:10:aa:12:15:
    b8:d1:60:48:04:46:7b:25:99:4a:79:44:f7:d0:f5:
    07:8f:a2:53:7b:5c:70:89:7d:bf:d9:f3:d3:57:71:
    5f:1a:fc:7a:11:ce:9b:b7:db:ac:2c:63:b7:19:69:
    c2:21:76:10:62:a7:66:e9:de:a2:19:00:46:f8:e8:
    ab:12:bc:5c:a0:45:c7:a6:93:da:fd:07:11:0a:fa:
    5e:8a:a0:36:4b:16:e9:00:46:06:49:39:65:d5:91:
    4a:12:c0:8e:63:ff:32:34:41:b3:db:38:7e:f9:29:
    16:ae:cf:5f:97:e7:b2:0c:4b:bb:51:97:1e:26:d9:
    fa:28:b4:76:49:92:66:28:f5:41:29:61:ac:48:76:
    b9
prime1:
    00:c1:ae:bb:84:86:4e:4f:f6:81:57:ce:03:f8:26:
    fe:bf:af:51:32:d8:e3:94:49:a6:da:30:c8:2d:49:
    63:5e:0d:4f:9e:67:95:9a:d2:69:70:39:d1:bb:d2:
    12:b1:58:1b:9e:ce:72:7b:4b:2e:72:9e:49:aa:f9:
    cc:33:e4:16:a6:06:6f:33:e3:e8:e2:a1:0d:ce:d7:
    e6:62:d1:09:53:87:ba:1b:90:dc:4f:fb:f4:0a:33:
    86:29:d4:60:29:4b:7e:e9:98:66:61:1c:7c:08:c9:
    eb:e2:b1:00:02:c5:60:77:4d:be:a4:56:37:98:ae:
    c1:aa:27:2c:10:d6:84:29:c7
prime2:
    00:e9:1b:e2:27:62:da:a6:90:07:8f:48:ef:5f:f7:
    b4:6d:1e:df:d6:83:e5:b4:5e:54:ed:19:5a:e5:74:
    eb:f4:99:be:5a:24:62:62:11:c7:6f:a7:8e:47:95:
    f0:f9:0e:31:77:df:8d:41:ef:a0:73:e4:5e:d2:5b:
    2b:a4:8f:2f:fb:54:c3:62:72:61:4a:31:b1:58:81:
    19:69:ec:d9:aa:bf:ca:f9:47:84:e7:3b:b5:50:86:
    38:a0:4d:da:d3:2e:58:a8:48:a2:14:95:41:82:8d:
    1d:50:00:3b:b4:e5:26:70:2e:fe:5b:d1:0e:c2:c3:
    3e:f8:72:02:68:d7:da:6a:97
exponent1:
    00:9b:3e:25:0b:9a:63:56:f0:ac:c7:e6:57:84:26:
    2d:77:13:5d:30:36:6c:63:c5:8d:39:c2:74:10:e8:
    8b:ff:2d:08:2e:5d:b4:aa:7e:11:09:65:2e:d9:2f:
    0e:d0:9b:60:b8:2f:9d:cf:79:79:67:61:bc:86:90:
    e6:be:89:0a:26:55:6d:f8:d7:ab:29:4c:12:37:43:
    12:65:0e:4c:3d:69:c3:20:a9:42:0d:d2:53:cf:81:
    70:fe:42:3e:39:9b:4b:c4:8c:e5:32:dd:94:05:af:
    63:a5:36:5e:5d:da:3a:f2:25:9c:b3:38:70:23:af:
    9f:87:75:12:7b:04:96:b6:ad
exponent2:
    00:b9:03:2f:70:91:2d:f7:0a:d3:65:2e:bf:06:4d:
    04:3f:a3:44:86:ee:72:6e:c0:7b:e9:1e:b9:9c:ea:
    3a:a8:0d:2a:1e:43:48:6e:8b:ab:dd:7b:80:1a:62:
    f0:39:cb:c1:09:62:3d:ab:fa:73:3f:e8:1e:36:18:
    b4:3f:cc:81:89:99:d1:e5:1d:e1:07:d0:fe:ef:be:
    af:1b:fa:27:1c:35:52:f4:9c:85:e8:3c:e4:80:3f:
    b7:4b:cb:df:04:c3:81:0c:37:71:a4:a2:7d:b7:0f:
    27:17:aa:c7:b8:a0:32:ec:d0:ef:82:92:1f:84:07:
    10:c0:81:44:56:50:13:83:8b
coefficient:
    00:b6:74:0f:f2:53:af:d5:ba:e8:e5:3a:65:b4:20:
    0c:1b:80:d4:c1:3f:fd:5f:17:2d:eb:96:88:ea:f6:
    8e:90:55:a3:74:5d:eb:8d:2a:d1:8b:55:a7:9d:8b:
    cd:29:1c:a5:5f:ab:d9:60:04:ba:3a:f8:71:06:3b:
    2f:06:08:16:34:c6:d7:47:0b:68:0e:d6:56:d6:22:
    85:3d:b8:de:73:bc:af:13:dd:10:81:0b:76:7d:7d:
    0e:22:07:58:15:4f:1b:13:64:42:33:c4:52:67:ef:
    ae:51:66:07:f2:34:cf:1f:d8:57:1d:03:89:86:9c:
    cd:a8:37:2e:38:b3:e9:88:62
user@user:~/openssl-ca$

После чего создадим из данного приватного ключа создадим запрос на сертификацию. Пояснения по аргументам:

  • ключ -config ссылается на используемый файл конфигурации openssl, в нашем случае на тот, что расположен в текущей директории;
  • ключ -subj содержит метаинформацию о владельце запроса на сертификацию. При остуствии данного ключа ввод данных полей будет осуществляться в интерактивном режиме.
openssl req -config openssl.cnf -key private/server_key.pem -new -sha256 -subj "/C=RU/ST=Siberia/L=Novosibirsk/O=Eltex/OU=Eltex SC/CN=server.esr-test.loc/emailAddress=server@esr-test.loc" -out csr/server_req.pem

Просмотреть содержимое запроса на сертификацию можно командой:

openssl req -text -noout -in csr/server_req.pem
user@user:~/openssl-ca$ openssl req -text -noout -in csr/server_req.pem
Certificate Request:
    Data:
        Version: 1 (0x0)
        Subject: C = RU, ST = Siberia, L = Novosibirsk, O = Eltex, OU = Eltex SC, CN = server.esr-test.loc, emailAddress = server@esr-test.loc
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:b0:5d:21:33:73:2b:51:64:13:1c:4d:59:f7:07:
                    e1:ed:8c:1e:41:74:96:31:b6:b3:96:08:9a:7b:57:
                    73:4a:47:0a:a0:35:69:e0:51:7f:bf:3c:5a:8b:54:
                    dc:be:2c:22:05:bf:cb:66:a3:db:b8:2b:8f:35:8f:
                    1b:34:42:62:7b:a2:37:6d:82:2b:e2:78:25:00:b1:
                    64:8e:da:31:fe:6c:ae:54:72:df:5e:a5:44:ee:8f:
                    05:9b:2c:ff:b7:75:15:82:06:70:88:c2:76:0e:e9:
                    73:1b:88:3c:0b:7b:7e:e6:ea:69:00:3d:a0:14:43:
                    20:88:ec:e6:a8:60:5c:cd:e8:7c:8f:66:a8:2e:58:
                    a4:ba:1a:dc:78:05:9c:ef:1a:79:d7:bb:55:22:85:
                    aa:cd:dd:ba:82:e8:81:19:90:bc:08:5a:8b:3e:77:
                    5d:c9:95:0d:05:1a:ff:3c:7f:fa:91:6e:1c:da:16:
                    d6:a3:7c:84:ae:fd:4c:91:fa:b0:ae:c8:08:15:96:
                    ed:6a:8e:15:22:ce:c9:32:dc:ef:0e:a4:25:f4:9c:
                    7f:1c:e5:eb:cc:28:25:a1:12:b3:54:31:45:ed:e6:
                    d7:43:38:f9:28:4c:91:fb:a3:29:83:f5:9e:54:02:
                    fa:0a:d0:91:2f:02:71:5b:16:d0:7c:29:3a:f5:b7:
                    0a:61
                Exponent: 65537 (0x10001)
        Attributes:
            (none)
            Requested Extensions:
    Signature Algorithm: sha256WithRSAEncryption
    Signature Value:
        6c:e9:f9:e2:24:ce:e7:24:92:0f:a9:98:0f:b0:01:8b:a7:41:
        b9:c9:25:5a:b9:ba:99:b0:a4:7f:8a:bd:e1:38:c7:7f:2d:2c:
        fc:09:fd:ea:18:4e:4f:cc:f7:72:d6:00:ea:3b:69:77:7e:a6:
        4f:b8:ae:45:7c:5f:3e:a7:cb:fa:1a:c7:ce:98:94:74:1b:6e:
        59:c6:51:28:e4:7c:69:cc:0e:2d:a5:98:2e:51:3e:f3:f3:b8:
        8f:09:2d:d8:12:37:83:6e:c9:a6:93:ec:43:1f:fa:f8:4c:78:
        59:1d:92:8f:14:27:12:d1:47:91:68:72:59:02:5c:43:cb:b4:
        58:4e:3c:43:c6:63:22:b8:ae:57:aa:5e:ca:65:cf:23:2a:0d:
        13:f9:c1:d3:bf:62:d6:21:fe:a3:24:c3:b7:00:0e:c4:c2:ed:
        19:ab:4c:e7:cc:e3:d9:e5:36:56:64:1c:f4:84:66:5f:52:ea:
        b5:0a:7d:3e:67:db:89:9b:33:4d:7b:23:b4:90:a6:c8:84:48:
        8a:75:5c:68:d3:ce:b0:85:ae:7b:11:16:36:fd:52:e5:b0:c5:
        6b:86:c3:3f:41:64:9b:cd:41:c1:41:96:94:de:6f:a9:27:35:
        42:56:19:f7:ba:1b:c5:05:3b:ed:d8:ab:dd:9a:ab:81:03:25:
        f6:1e:79:f9
user@user:~/openssl-ca$

Теперь запрос на сертификацию необходимо подписать приватным ключом УЦ, сформировав сертификат X.509 для OpenVPN сервера.  Пояснения по аргументам:

  • ключ -days задает время жизни сертификата в днях;
  • ключ -nodes отключает шифрование итогового файла сертификата и защиты его при помощи пароля;
  • ключ -config ссылается на используемый файл конфигурации openssl, в нашем случае на тот, что расположен в текущей директории;
  • ключ -extensions указывает на секцию v3_vpn_server в файле конфигурации openssl.cnf. В используемом нами openssl.cnf в этой секции описан набор расширений X.509, характерных для OpenVPN сервера, производящего аутентификацию подключащихся клиентов.
openssl ca -config openssl.cnf -extensions v3_vpn_server -days 365 -notext -md sha256 -in csr/server_req.pem -out certs/server_crt.pem
user@user:~/openssl-ca$ openssl ca -config openssl.cnf -extensions v3_vpn_server -days 365 -notext -md sha256 -in csr/server_req.pem -out certs/server_crt.pem
Using configuration from openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 4096 (0x1000)
        Validity
            Not Before: Oct  4 04:01:33 2022 GMT
            Not After : Oct  4 04:01:33 2023 GMT
        Subject:
            countryName               = RU
            stateOrProvinceName       = Siberia
            organizationName          = Eltex
            organizationalUnitName    = Eltex SC
            commonName                = server.esr-test.loc
            emailAddress              = server@esr-test.loc
        X509v3 extensions:
            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Subject Key Identifier: 
                56:B0:FB:D5:5C:E5:BB:E1:01:63:34:85:D9:4F:17:22:36:D0:9D:F7
            X509v3 Authority Key Identifier: 
                keyid:AD:46:E5:08:C6:C1:26:DE:B0:52:2D:36:49:06:4F:23:92:95:BA:67
                DirName:/C=RU/ST=Siberia/L=Novosibirsk/O=Eltex/OU=Eltex SC/CN=ca.test.loc/emailAddress=ca@test.loc
                serial:57:60:24:BC:F9:D0:4E:25:32:D2:BD:20:EC:56:BF:A5:0C:C7:9A:40
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Extended Key Usage: critical
                TLS Web Server Authentication
            X509v3 Subject Alternative Name: 
                email:server@esr-test.loc
Certificate is to be certified until Oct  4 04:01:33 2023 GMT (365 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
user@user:~/openssl-ca$

Просмотреть содержимое полученного сертификата можно командой:

openssl x509 -text -noout -in certs/server_crt.pem
user@user:~/openssl-ca$ openssl x509 -text -noout -in certs/server_crt.pem
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 4096 (0x1000)
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = RU, ST = Siberia, L = Novosibirsk, O = Eltex, OU = Eltex SC, CN = ca.test.loc, emailAddress = ca@test.loc
        Validity
            Not Before: Oct  4 04:01:33 2022 GMT
            Not After : Oct  4 04:01:33 2023 GMT
        Subject: C = RU, ST = Siberia, O = Eltex, OU = Eltex SC, CN = server.esr-test.loc, emailAddress = server@esr-test.loc
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:b0:5d:21:33:73:2b:51:64:13:1c:4d:59:f7:07:
                    e1:ed:8c:1e:41:74:96:31:b6:b3:96:08:9a:7b:57:
                    73:4a:47:0a:a0:35:69:e0:51:7f:bf:3c:5a:8b:54:
                    dc:be:2c:22:05:bf:cb:66:a3:db:b8:2b:8f:35:8f:
                    1b:34:42:62:7b:a2:37:6d:82:2b:e2:78:25:00:b1:
                    64:8e:da:31:fe:6c:ae:54:72:df:5e:a5:44:ee:8f:
                    05:9b:2c:ff:b7:75:15:82:06:70:88:c2:76:0e:e9:
                    73:1b:88:3c:0b:7b:7e:e6:ea:69:00:3d:a0:14:43:
                    20:88:ec:e6:a8:60:5c:cd:e8:7c:8f:66:a8:2e:58:
                    a4:ba:1a:dc:78:05:9c:ef:1a:79:d7:bb:55:22:85:
                    aa:cd:dd:ba:82:e8:81:19:90:bc:08:5a:8b:3e:77:
                    5d:c9:95:0d:05:1a:ff:3c:7f:fa:91:6e:1c:da:16:
                    d6:a3:7c:84:ae:fd:4c:91:fa:b0:ae:c8:08:15:96:
                    ed:6a:8e:15:22:ce:c9:32:dc:ef:0e:a4:25:f4:9c:
                    7f:1c:e5:eb:cc:28:25:a1:12:b3:54:31:45:ed:e6:
                    d7:43:38:f9:28:4c:91:fb:a3:29:83:f5:9e:54:02:
                    fa:0a:d0:91:2f:02:71:5b:16:d0:7c:29:3a:f5:b7:
                    0a:61
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Subject Key Identifier: 
                56:B0:FB:D5:5C:E5:BB:E1:01:63:34:85:D9:4F:17:22:36:D0:9D:F7
            X509v3 Authority Key Identifier: 
                keyid:AD:46:E5:08:C6:C1:26:DE:B0:52:2D:36:49:06:4F:23:92:95:BA:67
                DirName:/C=RU/ST=Siberia/L=Novosibirsk/O=Eltex/OU=Eltex SC/CN=ca.test.loc/emailAddress=ca@test.loc
                serial:57:60:24:BC:F9:D0:4E:25:32:D2:BD:20:EC:56:BF:A5:0C:C7:9A:40
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Extended Key Usage: critical
                TLS Web Server Authentication
            X509v3 Subject Alternative Name: 
                email:server@esr-test.loc
    Signature Algorithm: sha256WithRSAEncryption
    Signature Value:
        5a:67:c5:2e:aa:c9:87:df:0f:f8:7f:8c:09:78:4f:60:b0:92:
        21:3f:f4:b1:d5:2f:97:76:54:06:fa:ad:85:26:36:a0:72:39:
        c3:2b:07:f8:13:8a:1a:fa:24:a7:25:8a:40:f9:11:b2:98:ac:
        66:f9:8a:f3:1f:75:bb:d1:d7:a8:52:b0:30:dd:c1:f0:8c:e6:
        38:4a:d5:4d:65:32:66:09:ef:22:e9:09:fb:29:43:0d:f6:36:
        0f:f8:34:89:0b:bc:0d:53:4b:84:7a:f7:0f:0c:14:ed:41:e0:
        8d:0f:76:cd:2e:7e:1a:43:76:f1:e0:d9:d9:1e:be:3c:ae:19:
        b9:df:39:11:76:cd:29:ea:7e:75:18:9c:24:da:a3:6e:bb:3e:
        3a:65:1a:05:40:16:a3:55:19:a6:ee:40:53:a0:98:0d:28:88:
        14:e1:88:cb:6e:40:2a:61:bb:84:d7:6d:ec:0c:cb:27:02:fe:
        21:ba:37:ba:30:d2:c7:6d:de:55:24:e3:97:b3:50:d2:eb:43:
        f9:78:71:4c:e3:6b:20:d2:ab:bf:9c:50:84:a5:f1:a0:4e:6b:
        fd:fc:9b:ad:0a:a7:48:e5:7f:37:95:cd:e3:a9:b1:c3:b6:da:
        f0:14:30:19:fb:8d:e5:e0:8b:0b:4e:62:96:c3:d0:b8:f6:70:
        47:97:4a:6c:d3:f1:66:5b:56:f9:13:2f:4c:03:e5:f8:f0:49:
        75:17:7a:48:19:f1:5a:ac:66:19:24:9e:a4:d0:60:93:da:20:
        34:1c:76:4b:ef:1b:00:e2:3a:3b:70:4c:33:a4:f8:14:4b:82:
        59:5d:bf:09:c4:ad:a9:a9:33:c7:ea:76:dc:e9:b6:6d:e5:43:
        20:ef:30:4a:17:2d:7d:2d:58:6f:bd:06:ee:64:37:2d:45:73:
        23:76:a4:65:25:ae:12:19:1c:e5:37:8a:76:cc:09:78:7c:d8:
        f7:16:be:cc:49:8e:ac:de:df:bb:b6:ce:b6:73:7c:09:d5:42:
        1d:d9:0b:87:69:9d:cd:7e:37:7e:84:0f:b1:99:93:02:47:b0:
        a4:74:5f:e0:dd:77:10:38:6a:08:80:bd:9d:3c:a2:f4:4a:f7:
        16:95:a3:b2:25:e8:cf:1b:34:5e:e8:fb:b3:4a:89:93:c9:d0:
        e8:c7:19:1e:e7:1b:27:e2:11:46:27:1e:2c:0c:12:cd:ed:1a:
        01:73:9b:2c:5e:e7:2d:8c:bd:27:37:da:ee:2b:f5:74:eb:e4:
        34:e1:31:ad:48:fe:a8:40:97:04:cd:59:93:2e:8e:89:72:47:
        58:ae:98:b1:7f:70:cf:57:e2:42:15:75:ee:a5:a7:19:ca:7d:
        3c:e7:c1:db:37:26:13:f1
user@user:~/openssl-ca$

Создание приватного ключа и сертификата X.509 для OpenVPN сервера завершено.

Создание приватного ключа и X.509 сертификата для OpenVPN клиента

Создаем приватный RSA ключ для OpenVPN клиента в формате ключевого контейнера PKCS#8. В примере создается RSA ключ длиной 2048 бит. Алгоритм и опции для генерации можно менять в соответствии с поддержанными сочетаниями, которые можно посмотреть в "man openssl genpkey". Команда создания ключа выглядит следующим образом:

openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out private/client_key.pem

Просмотреть содержимое ключа можно командой:

openssl pkey -text -noout -in private/client_key.pem
user@user:~/openssl-ca$ openssl pkey -text -noout -in private/client_key.pem
Private-Key: (2048 bit, 2 primes)
modulus:
    00:c8:6f:fa:a2:3a:c1:dc:64:ec:ad:f7:53:55:b9:
    24:da:5d:bd:e5:6c:ea:12:5a:72:bd:b6:98:fe:86:
    74:e5:a8:11:9c:21:fa:f5:c3:bb:7d:19:73:72:41:
    bf:db:6b:b5:e7:89:bc:b1:b9:65:55:25:26:72:ab:
    4b:14:d1:58:e4:10:75:3c:e7:fd:94:7d:da:e6:71:
    55:85:7f:a4:99:5c:64:6d:88:30:59:e4:9f:e7:f9:
    55:09:c1:cc:49:43:99:3c:c8:0a:56:e1:68:75:5e:
    03:a6:3a:fe:a3:b6:bf:59:51:15:18:71:b5:82:c0:
    90:16:86:98:e8:55:24:14:3b:fa:08:1e:6e:3c:2b:
    79:75:25:45:fa:01:56:df:86:6c:2c:53:11:dc:f2:
    bd:af:8b:9a:72:1b:5e:a6:35:37:f3:2d:bc:d3:4d:
    8f:e5:91:cc:b1:5f:5d:54:9f:8a:1e:c4:4b:3c:dd:
    fe:21:a4:43:d7:d6:52:cf:26:39:a3:02:dc:4d:6d:
    f5:b8:b1:cf:de:e0:8e:5c:b8:62:36:45:3d:84:26:
    fb:b3:f5:ad:03:4f:c7:2e:37:d4:a2:72:36:70:3e:
    23:2c:f9:27:7f:2d:f8:8d:13:71:04:07:1c:db:00:
    d3:e8:e8:71:df:34:79:1e:51:a1:16:21:21:9a:99:
    1e:d9
publicExponent: 65537 (0x10001)
privateExponent:
    2a:47:74:96:c3:ce:20:af:29:3d:88:ee:0b:27:02:
    9f:0d:27:01:3d:f8:21:e6:f2:4d:12:37:33:79:29:
    2f:48:44:6e:aa:bc:45:1b:04:71:5e:ec:fb:2c:e3:
    4b:65:6c:f9:6a:14:63:68:b7:f7:3d:de:de:51:43:
    85:20:a3:9f:77:d9:42:ff:ac:7d:a6:0e:86:8d:61:
    7c:c7:6f:f0:e9:8c:45:8e:74:a4:81:95:39:59:5e:
    96:b0:4a:67:29:db:28:f7:09:37:4a:54:be:6d:16:
    57:fa:19:bc:6e:cf:ee:07:2c:6b:fb:90:4e:04:50:
    60:70:03:d0:fe:24:9e:1f:a9:04:d6:ed:58:79:50:
    38:98:05:4e:8b:12:0c:3d:0f:19:b7:01:bc:90:b0:
    ee:14:f7:60:8f:b6:a8:fc:9a:6b:01:1c:ca:ae:ce:
    2c:e4:fb:03:d1:d4:70:36:f6:d4:cf:1a:47:85:84:
    1e:79:e4:dc:1d:cc:ce:57:db:b1:9a:6f:c2:30:45:
    ac:9c:5f:bb:3f:50:6b:5c:f5:7c:43:2d:bd:79:b0:
    0a:32:e8:39:bc:5e:c2:ad:ec:a8:98:8d:8e:09:fd:
    83:fa:17:51:c0:0c:4a:4c:ea:85:9b:9a:43:1a:9a:
    36:49:be:08:8f:2a:d4:eb:6a:20:90:3b:11:e3:f9
prime1:
    00:e8:b6:57:5e:f0:06:3f:c5:00:18:06:13:a2:cd:
    9e:2a:0c:ac:e0:d6:64:c7:e3:86:89:52:d9:48:50:
    c5:1c:9b:38:6d:a0:78:0b:61:2d:98:40:47:b8:cd:
    f0:34:40:fa:fa:dd:b9:a0:6b:9b:29:a6:ee:fb:92:
    f4:9d:f2:89:72:5a:40:d4:06:eb:e8:c8:8b:02:93:
    6c:bf:4c:8d:9c:7f:22:f0:f3:79:a4:e1:b1:7d:8d:
    9b:da:27:59:55:41:b5:53:9e:85:ae:c0:40:2e:2e:
    35:9b:c9:e0:33:17:ad:a2:e0:3e:37:96:48:05:f6:
    68:dc:da:0e:00:85:46:c3:27
prime2:
    00:dc:7e:d0:cc:0c:9d:5c:51:c5:37:e7:c5:fd:1e:
    aa:1f:54:de:92:70:e1:44:0a:b9:b4:df:20:78:d6:
    db:e5:46:db:17:46:c4:76:f7:97:9d:2a:ed:b6:44:
    1a:76:d5:61:54:b1:84:26:86:aa:39:c8:8e:e1:15:
    96:c1:70:a8:34:16:23:81:28:d8:a3:18:21:2e:8d:
    32:23:a1:8e:8e:0b:65:91:ca:81:06:1e:91:fb:6c:
    39:ea:a8:09:a7:94:06:39:f6:e7:1d:44:6c:0c:8c:
    9f:39:9f:f6:ea:61:29:2a:cb:8d:ff:df:32:9b:f8:
    17:01:a4:79:ba:86:86:4d:ff
exponent1:
    5c:47:92:35:ef:70:4a:f1:4f:ac:37:1c:aa:3e:67:
    2d:bd:81:00:57:83:f7:4f:de:15:ae:68:c3:28:64:
    41:87:bb:c4:9d:11:7d:51:b7:c6:dc:16:94:cd:f5:
    26:83:6e:02:f4:d1:9b:2f:90:83:df:d2:7c:a8:35:
    a0:3c:81:0c:7b:85:a1:8e:6d:16:0e:10:31:a1:4c:
    4a:3f:8d:18:35:c2:21:52:2b:36:9a:d8:cb:34:d0:
    4c:9d:b5:ea:fc:f7:6e:85:39:f5:a5:fe:cd:51:3d:
    a8:dd:50:ae:72:01:44:c9:2f:62:d3:91:13:ec:36:
    80:fd:66:f8:05:e1:9d:99
exponent2:
    00:b2:7f:3f:0c:50:91:fb:30:7f:15:78:dd:c0:c1:
    58:3b:30:fb:55:55:68:27:2a:ff:97:3a:a2:10:f0:
    ee:e6:b6:eb:99:f6:42:09:84:fa:09:d3:bc:c8:36:
    6d:ae:11:a3:4f:6a:bd:6e:6a:c9:d7:29:52:f1:48:
    06:d8:e6:18:64:c2:1f:4f:e9:ff:26:58:dc:53:d1:
    1d:eb:d6:57:8f:0a:0e:d9:6d:33:f1:fe:41:73:65:
    f3:a4:d1:0f:af:c7:97:1a:c9:93:e3:0f:86:e0:c9:
    de:04:4a:49:1b:08:38:c9:5a:2b:c4:1d:ad:dc:b1:
    83:fe:62:65:e0:e8:12:45:85
coefficient:
    00:b9:5c:04:45:e5:3f:ce:52:a1:20:d9:20:67:2b:
    66:6b:98:4c:4a:a9:14:fe:9d:08:69:5b:5b:c2:84:
    b4:5a:5b:46:e8:59:46:d8:df:1a:46:ed:7e:58:d4:
    d2:b7:db:ec:c9:ec:f3:37:9a:e1:25:db:28:2e:df:
    13:59:d7:fc:b3:68:56:c8:60:11:91:6a:fc:83:97:
    84:5d:fe:5f:f0:bc:c0:bd:36:2a:2e:a5:ad:6e:0d:
    ee:5f:41:e5:ca:cf:e9:9e:1f:f0:6f:3d:6b:14:8d:
    65:c7:95:d7:92:89:61:03:5a:81:52:ca:c3:f4:e2:
    8b:4b:2c:7b:9e:45:19:8f:7e
user@user:~/openssl-ca$

После чего создадим из данного приватного ключа создадим запрос на сертификацию. Пояснения по аргументам:

  • ключ -config ссылается на используемый файл конфигурации openssl, в нашем случае на тот, что расположен в текущей директории;
  • ключ -subj содержит метаинформацию о владельце запроса на сертификацию. При остуствии данного ключа ввод данных полей будет осуществляться в интерактивном режиме.
openssl req -config openssl.cnf -key private/client_key.pem -new -sha256 -subj "/C=RU/ST=Siberia/L=Novosibirsk/O=Eltex/OU=Eltex SC/CN=client.esr-test.loc/emailAddress=client@esr-test.loc" -out csr/client_req.pem

Просмотреть содержимое запроса на сертификацию можно командой:

openssl req -text -noout -in csr/client_req.pem
user@user:~/openssl-ca$ openssl req -text -noout -in csr/client_req.pem
Certificate Request:
    Data:
        Version: 1 (0x0)
        Subject: C = RU, ST = Siberia, L = Novosibirsk, O = Eltex, OU = Eltex SC, CN = client.esr-test.loc, emailAddress = client@esr-test.loc
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:c8:6f:fa:a2:3a:c1:dc:64:ec:ad:f7:53:55:b9:
                    24:da:5d:bd:e5:6c:ea:12:5a:72:bd:b6:98:fe:86:
                    74:e5:a8:11:9c:21:fa:f5:c3:bb:7d:19:73:72:41:
                    bf:db:6b:b5:e7:89:bc:b1:b9:65:55:25:26:72:ab:
                    4b:14:d1:58:e4:10:75:3c:e7:fd:94:7d:da:e6:71:
                    55:85:7f:a4:99:5c:64:6d:88:30:59:e4:9f:e7:f9:
                    55:09:c1:cc:49:43:99:3c:c8:0a:56:e1:68:75:5e:
                    03:a6:3a:fe:a3:b6:bf:59:51:15:18:71:b5:82:c0:
                    90:16:86:98:e8:55:24:14:3b:fa:08:1e:6e:3c:2b:
                    79:75:25:45:fa:01:56:df:86:6c:2c:53:11:dc:f2:
                    bd:af:8b:9a:72:1b:5e:a6:35:37:f3:2d:bc:d3:4d:
                    8f:e5:91:cc:b1:5f:5d:54:9f:8a:1e:c4:4b:3c:dd:
                    fe:21:a4:43:d7:d6:52:cf:26:39:a3:02:dc:4d:6d:
                    f5:b8:b1:cf:de:e0:8e:5c:b8:62:36:45:3d:84:26:
                    fb:b3:f5:ad:03:4f:c7:2e:37:d4:a2:72:36:70:3e:
                    23:2c:f9:27:7f:2d:f8:8d:13:71:04:07:1c:db:00:
                    d3:e8:e8:71:df:34:79:1e:51:a1:16:21:21:9a:99:
                    1e:d9
                Exponent: 65537 (0x10001)
        Attributes:
            (none)
            Requested Extensions:
    Signature Algorithm: sha256WithRSAEncryption
    Signature Value:
        27:2e:02:70:06:f6:d3:f1:4a:79:16:44:e0:aa:c9:69:81:ed:
        5b:c0:a7:7d:92:dd:44:c1:24:80:55:2e:ad:88:61:30:22:9d:
        4e:7f:9b:bf:05:53:cf:25:c3:ae:20:ea:ca:c2:4d:e1:37:af:
        99:dc:35:4b:e9:da:2b:40:81:5f:28:bc:00:05:69:64:ba:1e:
        93:58:e3:18:20:f7:de:0a:81:94:21:1b:88:35:19:84:4b:61:
        d9:f3:55:1d:73:9c:99:1d:5a:16:f9:69:e4:fd:d2:6e:13:87:
        26:0d:58:76:34:bc:2f:bd:f2:52:a9:15:ad:91:80:db:7e:90:
        7f:61:73:cd:8b:f2:e9:33:f4:ba:78:cf:56:96:86:67:03:20:
        cb:05:d2:a2:dc:8a:56:45:b9:eb:83:cf:90:54:5b:87:3d:12:
        07:84:2d:93:fd:c3:fa:0f:18:a8:77:36:3d:bb:6b:27:23:ba:
        b3:aa:d3:0b:2a:cd:62:40:3d:5c:6d:2a:1a:7a:45:23:00:92:
        bd:51:13:7b:dd:be:fb:a7:fc:38:08:54:38:60:7e:9b:cf:01:
        bb:78:ec:5a:8d:99:f6:1e:a0:58:d6:d5:ae:85:f7:a4:d9:1a:
        b7:94:e5:45:97:2b:a7:a7:8b:14:72:29:1d:02:1c:20:30:86:
        3f:57:0c:fd
user@user:~/openssl-ca$

Теперь запрос на сертификацию необходимо подписать приватным ключом УЦ, сформировав сертификат X.509 для OpenVPN клиента.  Пояснения по аргументам:

  • ключ -days задает время жизни сертификата в днях;
  • ключ -nodes отключает шифрование итогового файла сертификата и защиты его при помощи пароля;
  • ключ -config ссылается на используемый файл конфигурации openssl, в нашем случае на тот, что расположен в текущей директории;
  • ключ -extensions указывает на секцию v3_vpn_client в файле конфигурации openssl.cnf. В используемом нами openssl.cnf в этой секции описан набор расширений X.509, характерных для OpenVPN клиента, проверящего при подключении подлинность OpenVPN сервера.
openssl ca -config openssl.cnf -extensions v3_vpn_client -days 365 -notext -md sha256 -in csr/client_req.pem -out certs/client_crt.pem
user@user:~/openssl-ca$ openssl ca -config openssl.cnf -extensions v3_vpn_client -days 365 -notext -md sha256 -in csr/client_req.pem -out certs/client_crt.pem
Using configuration from openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 4097 (0x1001)
        Validity
            Not Before: Oct  4 04:06:56 2022 GMT
            Not After : Oct  4 04:06:56 2023 GMT
        Subject:
            countryName               = RU
            stateOrProvinceName       = Siberia
            organizationName          = Eltex
            organizationalUnitName    = Eltex SC
            commonName                = client.esr-test.loc
            emailAddress              = client@esr-test.loc
        X509v3 extensions:
            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Subject Key Identifier: 
                92:8B:E0:DD:F5:5C:B2:50:04:0F:D0:5E:0A:13:6D:D0:61:B8:35:D5
            X509v3 Authority Key Identifier: 
                keyid:AD:46:E5:08:C6:C1:26:DE:B0:52:2D:36:49:06:4F:23:92:95:BA:67
                DirName:/C=RU/ST=Siberia/L=Novosibirsk/O=Eltex/OU=Eltex SC/CN=ca.test.loc/emailAddress=ca@test.loc
                serial:57:60:24:BC:F9:D0:4E:25:32:D2:BD:20:EC:56:BF:A5:0C:C7:9A:40
            X509v3 Key Usage: critical
                Digital Signature, Key Agreement
            X509v3 Extended Key Usage: critical
                TLS Web Client Authentication
            X509v3 Subject Alternative Name: 
                email:client@esr-test.loc
Certificate is to be certified until Oct  4 04:06:56 2023 GMT (365 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
user@user:~/openssl-ca$

Просмотреть содержимое полученного сертификата можно командой:

openssl x509 -text -noout -in certs/client_crt.pem
user@user:~/openssl-ca$ openssl x509 -text -noout -in certs/client_crt.pem
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 4097 (0x1001)
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = RU, ST = Siberia, L = Novosibirsk, O = Eltex, OU = Eltex SC, CN = ca.test.loc, emailAddress = ca@test.loc
        Validity
            Not Before: Oct  4 04:06:56 2022 GMT
            Not After : Oct  4 04:06:56 2023 GMT
        Subject: C = RU, ST = Siberia, O = Eltex, OU = Eltex SC, CN = client.esr-test.loc, emailAddress = client@esr-test.loc
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:c8:6f:fa:a2:3a:c1:dc:64:ec:ad:f7:53:55:b9:
                    24:da:5d:bd:e5:6c:ea:12:5a:72:bd:b6:98:fe:86:
                    74:e5:a8:11:9c:21:fa:f5:c3:bb:7d:19:73:72:41:
                    bf:db:6b:b5:e7:89:bc:b1:b9:65:55:25:26:72:ab:
                    4b:14:d1:58:e4:10:75:3c:e7:fd:94:7d:da:e6:71:
                    55:85:7f:a4:99:5c:64:6d:88:30:59:e4:9f:e7:f9:
                    55:09:c1:cc:49:43:99:3c:c8:0a:56:e1:68:75:5e:
                    03:a6:3a:fe:a3:b6:bf:59:51:15:18:71:b5:82:c0:
                    90:16:86:98:e8:55:24:14:3b:fa:08:1e:6e:3c:2b:
                    79:75:25:45:fa:01:56:df:86:6c:2c:53:11:dc:f2:
                    bd:af:8b:9a:72:1b:5e:a6:35:37:f3:2d:bc:d3:4d:
                    8f:e5:91:cc:b1:5f:5d:54:9f:8a:1e:c4:4b:3c:dd:
                    fe:21:a4:43:d7:d6:52:cf:26:39:a3:02:dc:4d:6d:
                    f5:b8:b1:cf:de:e0:8e:5c:b8:62:36:45:3d:84:26:
                    fb:b3:f5:ad:03:4f:c7:2e:37:d4:a2:72:36:70:3e:
                    23:2c:f9:27:7f:2d:f8:8d:13:71:04:07:1c:db:00:
                    d3:e8:e8:71:df:34:79:1e:51:a1:16:21:21:9a:99:
                    1e:d9
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Subject Key Identifier: 
                92:8B:E0:DD:F5:5C:B2:50:04:0F:D0:5E:0A:13:6D:D0:61:B8:35:D5
            X509v3 Authority Key Identifier: 
                keyid:AD:46:E5:08:C6:C1:26:DE:B0:52:2D:36:49:06:4F:23:92:95:BA:67
                DirName:/C=RU/ST=Siberia/L=Novosibirsk/O=Eltex/OU=Eltex SC/CN=ca.test.loc/emailAddress=ca@test.loc
                serial:57:60:24:BC:F9:D0:4E:25:32:D2:BD:20:EC:56:BF:A5:0C:C7:9A:40
            X509v3 Key Usage: critical
                Digital Signature, Key Agreement
            X509v3 Extended Key Usage: critical
                TLS Web Client Authentication
            X509v3 Subject Alternative Name: 
                email:client@esr-test.loc
    Signature Algorithm: sha256WithRSAEncryption
    Signature Value:
        7b:e1:62:a8:bd:27:be:b8:f8:39:46:3d:05:8a:3a:34:5e:2f:
        8a:95:f4:9f:d0:2b:21:45:84:41:71:66:27:fd:dc:f9:7e:19:
        5f:33:63:14:79:20:1d:f6:b6:c4:f1:3a:02:ce:4f:24:25:4b:
        83:ab:7d:02:49:33:2d:8f:dc:72:0e:c3:f2:19:6d:bb:df:ad:
        73:42:a5:4c:63:6a:ea:93:91:af:81:75:7b:31:07:ef:44:af:
        3c:6e:5a:a2:83:df:7a:a7:f6:bc:7d:03:82:65:44:dc:f0:0a:
        8f:32:e9:6b:04:ab:e5:2c:2e:c8:c7:d8:5f:bd:ba:8f:40:9d:
        0a:ff:67:39:78:ba:f7:92:66:17:01:71:e3:57:4f:ec:f5:04:
        bd:18:66:aa:f6:85:56:96:b9:15:01:3d:2e:25:67:73:d8:28:
        8e:cb:5b:f3:32:ae:f4:d1:7e:7d:32:d5:dd:18:42:90:36:f7:
        5d:43:79:fc:45:5c:fd:93:2b:5d:4d:4f:66:d3:aa:fc:a0:4d:
        25:b3:a6:c0:18:a8:f2:eb:82:37:d6:df:69:71:d5:0c:6b:f8:
        cc:ac:71:0e:c9:15:85:32:1c:39:5c:44:9c:15:6d:5d:24:6e:
        72:48:25:57:72:92:fc:ab:f0:45:db:b4:40:8b:bf:a3:04:2e:
        38:14:52:9e:97:31:56:58:a4:ba:fd:6d:1a:2c:c9:43:24:a7:
        6a:fd:bb:e7:c1:7c:a9:30:a7:44:86:d6:d5:0a:be:e1:21:e4:
        95:1b:94:e7:cb:10:28:44:07:5a:ca:ae:fe:f2:24:6c:46:70:
        ba:5e:23:0d:f6:66:40:96:dc:cd:86:ce:09:22:f7:9d:0e:3e:
        df:3d:14:38:d9:83:83:8b:2f:6d:e0:23:ec:58:e8:e2:e7:70:
        7c:0a:04:97:9b:98:df:e0:de:54:e0:a4:13:d8:4d:1c:dc:14:
        f6:6e:46:65:fe:6d:ec:fc:70:bb:90:01:58:e8:b7:f2:cc:0d:
        bf:43:10:12:1b:df:3e:f0:1c:26:0b:f0:65:c9:95:a1:96:f2:
        d3:57:84:6a:2b:c1:97:cb:d4:9b:9f:4b:32:9b:fa:f5:23:31:
        ec:b5:ef:1f:63:81:4d:5c:f9:25:2d:6b:34:0a:12:c4:02:39:
        a0:9c:1d:61:e3:52:76:66:1e:6b:e7:9c:80:14:07:57:d8:3d:
        f5:3e:f0:da:2a:72:ba:98:63:25:5a:32:f6:55:90:61:a6:78:
        ef:6d:64:e7:1d:00:09:48:ad:4e:20:bc:9c:e5:61:bf:57:09:
        18:65:ab:42:42:2c:17:b1:32:41:be:bf:f0:f4:2e:0e:25:f4:
        6d:8c:f8:94:77:b6:3d:cb
user@user:~/openssl-ca$

Создание приватного ключа и сертификата X.509 для OpenVPN клиента завершено.

Отзыв сертификата X.509

Процедура отзыва сертификата X.509, подписанного УЦ выполняется в два этапа. Сначала производится отзыв сертификата (для примера отзовем клиентский сертификат):

openssl ca -config openssl.cnf -revoke certs/client_crt.pem
user@user:~/openssl-ca$ openssl ca -config openssl.cnf -revoke certs/client_crt.pem
Using configuration from openssl.cnf
Revoking Certificate 1001.
Data Base Updated
user@user:~/openssl-ca$

После чего список отозванных сертификатов перегенерируется:

openssl ca -config openssl.cnf -gencrl -out crl/ca_crl.pem

Просмотрим список отозванных сертификатов и обнаружим в нем клиентский сертификат:

openssl crl -text -noout -in crl/ca_crl.pem
user@user:~/openssl-ca$ openssl crl -text -noout -in crl/ca_crl.pem
Certificate Revocation List (CRL):
        Version 2 (0x1)
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = RU, ST = Siberia, L = Novosibirsk, O = Eltex, OU = Eltex SC, CN = ca.test.loc, emailAddress = ca@test.loc
        Last Update: Oct  4 04:18:58 2022 GMT
        Next Update: Nov  3 04:18:58 2022 GMT
        CRL extensions:
            X509v3 Authority Key Identifier: 
                AD:46:E5:08:C6:C1:26:DE:B0:52:2D:36:49:06:4F:23:92:95:BA:67
            X509v3 CRL Number: 
                4097
Revoked Certificates:
    Serial Number: 1001
        Revocation Date: Oct  4 04:17:14 2022 GMT
    Signature Algorithm: sha256WithRSAEncryption
    Signature Value:
        80:4a:a4:91:11:ba:cd:9a:46:f8:c9:21:11:3f:2f:a8:f0:03:
        03:7b:c9:36:12:c4:02:28:4e:be:d1:73:ff:03:3f:17:90:3b:
        c6:7f:fb:e7:ac:42:d4:8e:35:ef:5c:5a:e6:9a:6d:89:b3:78:
        ca:f5:8b:4c:c9:9b:0f:98:27:1d:06:ee:8b:f3:84:3e:72:88:
        0e:49:98:d5:bf:96:13:00:1e:a8:8f:54:6f:00:67:29:6e:c8:
        06:e4:5b:89:28:75:25:df:8c:35:a2:5e:18:5e:00:a8:9c:09:
        6d:f7:a8:59:4f:14:a7:be:28:92:5a:65:06:33:ea:68:db:0c:
        bb:ea:02:35:61:a1:44:1f:09:b3:be:da:2e:21:2c:10:69:df:
        ac:4e:c9:7b:48:0c:2c:ef:36:fd:e1:57:2a:e0:b4:cb:c1:dd:
        ef:33:f9:4a:e9:7e:c2:d0:84:61:5c:b3:43:c7:42:40:21:0f:
        ce:d4:43:2f:9d:c1:45:3f:33:42:a4:15:c9:73:ec:21:08:f7:
        e7:1a:ad:03:7d:80:f5:ca:fc:d2:97:72:08:b7:92:5d:80:72:
        0a:5e:84:b4:95:2e:e1:20:48:29:ea:59:47:66:04:dd:fd:2b:
        06:ba:d6:d4:04:5a:ac:d6:62:eb:6d:d1:fe:3e:e2:be:9d:2e:
        93:c4:66:de:ba:6c:5e:34:02:30:4c:53:de:c2:1b:87:55:b7:
        89:c4:7f:a8:4d:a0:94:0b:68:42:74:24:a2:fe:d8:62:82:91:
        6f:19:ba:26:47:4e:d8:79:42:e3:f0:5b:54:f9:7e:00:5b:2a:
        88:c1:27:e3:d4:b0:7b:3a:92:d6:eb:54:fe:1f:02:99:a4:bc:
        03:f6:3b:32:aa:78:8e:5a:e5:50:fa:c7:35:a2:6f:98:28:6f:
        b2:65:37:62:f7:40:aa:f8:36:ac:3c:4a:d4:d2:e0:c9:bc:20:
        68:2e:7c:e3:6e:e8:6a:51:26:59:86:71:8c:43:0f:6c:47:58:
        33:26:a5:be:11:80:80:32:6e:1f:56:f4:4b:9c:99:14:7d:d1:
        32:58:79:b9:3c:28:81:8d:40:d4:ba:3f:1a:4e:db:8e:e6:bb:
        22:d3:4b:90:c9:37:d5:71:15:c4:13:79:07:4c:a5:26:46:7b:
        cb:22:2e:b7:83:ed:39:d5:30:79:95:69:a9:3c:3a:81:49:83:
        d1:15:d9:1c:70:ba:12:dc:38:f7:3f:3a:f8:f4:75:62:4f:a5:
        fb:7f:72:10:7e:a7:5c:05:0f:c8:54:3a:44:9e:3b:d8:74:2e:
        9d:9c:95:3b:b8:7b:35:26:9f:d8:78:be:18:d1:be:80:70:f8:
        0f:ad:b4:4a:b5:40:66:13
user@user:~/openssl-ca$

Отзыв сертификата успешно завершен.

  • Нет меток