TLS/SSL: создание CSR для мульдоменного сертификата

Автор: | 12/01/2015
 

ssl_logoВ связи с продлением нашего wildcard-сертификата — необходимо создать CSR из старых сертификатов на некоторых серверах.

Кроме того — в сертификате используются SAN (Subject Alternative Name) — и их требуется перечислить при создании запроса.

Есть два варианта: передать параметры из командной строки — либо настроить OpenSSL.

Вариант первый

# openssl req -new -out apache.csr -key /etc/apache2/ssl/apache.key -subj "/C=GB/ST=London/L=Westminster/O=COMPANY LIMITED/OU=company/CN=*.domain.com/subjectAltName=DNS.1=domain.net,DNS.2=dev.author.mini.domain.net,DNS.3=dev.publish.mini.domain.net,DNS.4=qa.author.mini.domain.net,DNS.5=uat.author.mini.domain.net,DNS.6=uat.publish.mini.domain.net,DNS.7=vmu-mini-pub2.domain.net,DNS.8=vmu-mini-auth2.domain.net"

Вариант второй

Редактируем файл /etc/ssl/openssl.cnf, в котором находим блок [req], в котором указываются настрйоки для создания CSR:

...
[ req ]
default_bits            = 1024
default_keyfile         = privkey.pem
distinguished_name      = req_distinguished_name
attributes              = req_attributes
x509_extensions = v3_ca # The extentions to add to the self signed cert
...

В конце блока добавляем строку:

req_extensions = v3_req

Так мы указали OpenSSL включать блок [v3_req] при создании CSR.

Находим его:

[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment

Добавляем:

subjectAltName = @alt_names

И в блоке [alt_names] перечисляем SAN-ы:

[alt_names]
DNS.1 = kb.domain.com
DNS.2 = helpdesk.domain.org
DNS.3 = systems.domain.net

Теперь генерируем ключ (или используем имеющийся, как в первом варианте):

# openssl genrsa -out apachem.key 2048
Generating RSA private key, 2048 bit long modulus
.+++
....................+++
e is 65537 (0x10001)

Создаём сам CSR:

# openssl req -new -out apache.csr -key example_com.key -config /etc/ssl/openssl.cnf
You are about to be asked to enter information that will be incorporated
into your certificate request.
...
A challenge password []:
An optional company name []:

Файлы готовы:

# ls -l | grep example_com.
-rw-r--r-- 1 root             root               1106 Nov 19 12:34 apache.csr
-rw-r--r-- 1 root             root               1675 Nov 19 12:33 apache.key

Проверяем CSR:

# openssl req -text -noout -in apache.csr
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:92:5f:33:97:3d:b9:63:29:6f:72:86:e3:a8:77:
                    ...
                    50:1d:7e:a7:6f:0c:df:84:46:0a:41:1a:11:d1:da:
                    47:4f
                Exponent: 65537 (0x10001)
        Attributes:
        Requested Extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            X509v3 Key Usage:
                Digital Signature, Non Repudiation, Key Encipherment
            X509v3 Subject Alternative Name:
                DNS:kb.domain.com, DNS:helpdesk.domain.org, DNS:systems.domain.net
    Signature Algorithm: sha1WithRSAEncryption
         1c:85:df:24:cb:b2:9c:0b:74:61:bb:af:f9:63:40:5f:0e:44:
         ...
         73:88:bd:ef:f9:84:a8:db:b0:23:f0:45:dd:7b:52:b1:c1:18:
         3c:62:aa:ec

Главное для нас тут — строки с перечислением имён:

...
            X509v3 Subject Alternative Name:
                DNS:kb.domain.com, DNS:helpdesk.domain.org, DNS:systems.domain.net
...

Готово.

Ссылки по теме

http://apetec.com