Як створити багатодоменний самопідписаний сертифікат для Apache2?


15

У мене є невеликий приватний веб-сервер, де у мене кілька віртуальних хостів. Я знаю, що неможливо призначити сертифікат кожному окремому віртуальному хосту, тому що сервер з'ясовує, до якого віртуального хоста було запрошено лише ПІСЛЯ встановлення з'єднання SSL. Але чи можливо мати один сертифікат SSL, який містить декілька доменів? Або, принаймні, підстановочний домен, наприклад * .example.com. Якщо так, то які команди Linux мені потрібно написати, щоб зробити такий самопідписаний сертифікат?

Додано: Для уточнення - у мене лише одна IP-адреса для всіх віртуальних хостів.

Відповіді:


11

Для вас повинно працювати наступне:

cp /etc/ssl/openssl.cnf /tmp/
echo '[ subject_alt_name ]' >> /tmp/openssl.cnf
echo 'subjectAltName = DNS:www.example.com, DNS:site1.example.com, DNS:site2.example.com' >> /tmp/openssl.cnf

openssl req -x509 -nodes -newkey rsa:2048 \
  -config /tmp/openssl.cnf \
  -extensions subject_alt_name \
  -keyout www.example.com.key \
  -out www.example.com.pem \
  -subj '/C=XX/ST=XXXX/L=XXXX/O=XXXX/OU=XXXX/CN=www.example.com/emailAddress=postmaster@example.com'

Результат:

$ openssl x509 -in www.example.com.pem -text -noout
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 17965603478303142689 (0xf952a52d7bc7f321)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=XX, ST=XXXX, L=XXXX, O=XXXX, OU=XXXX, CN=www.example.com/emailAddress=flb.helpdesk@morpho.com
        Validity
            Not Before: Apr  3 15:34:27 2015 GMT
            Not After : May  3 15:34:27 2015 GMT
        Subject: C=XX, ST=XXXX, L=XXXX, O=XXXX, OU=XXXX, CN=www.example.com/emailAddress=flb.helpdesk@morpho.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:c6:e8:17:93:a4:8f:08:11:61:11:1b:cc:17:52:
                    b6:33:39:33:0e:94:3f:ac:ae:dd:70:4b:e6:d6:b0:
                    11:f1:93:b4:3d:dc:34:99:27:b6:45:4b:13:0c:69:
                    1e:11:d2:b9:38:5f:e0:d1:b0:58:e4:3c:c0:9f:58:
                    3d:5d:fa:67:3e:3c:05:1b:e3:86:20:18:d5:d7:83:
                    77:b5:0c:1d:9a:26:96:10:3f:2c:e5:ce:ed:6e:99:
                    5a:35:3e:06:f0:52:aa:72:5e:c0:33:7c:c8:16:f9:
                    6b:3e:7d:7e:5a:1f:cf:11:63:4d:ad:bf:77:bd:e3:
                    0f:8f:24:1d:f5:c8:06:ab:d9:62:8d:13:56:62:a9:
                    b8:77:c0:11:b6:ff:a7:63:93:a7:22:c2:41:48:6f:
                    bd:42:10:00:33:14:da:3b:ca:e0:07:c2:b6:50:55:
                    f0:4d:6b:0d:eb:87:a8:bd:4d:c6:1b:20:d8:27:68:
                    d0:e2:3b:32:91:b8:8e:cf:25:06:bf:43:fd:8f:96:
                    fa:eb:af:0f:e1:5c:47:06:84:8b:f4:35:0a:a8:f3:
                    7e:af:34:50:7f:62:bc:5e:53:09:90:97:27:cf:9a:
                    56:d7:f6:af:32:92:c4:c9:ab:90:6e:a6:09:20:0b:
                    46:28:22:0b:45:71:b9:17:77:d8:da:63:24:27:5c:
                    60:a5
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Alternative Name: 
                DNS:www.example.com, DNS:site1.example.com, DNS:site2.example.com
    Signature Algorithm: sha256WithRSAEncryption
         83:ce:18:74:f9:17:92:91:bd:82:13:ac:64:e7:de:9e:38:d7:
         26:0f:2d:3e:8f:f2:17:c5:fc:17:06:fb:27:e7:0a:b7:f2:8e:
         bb:18:6e:f4:4c:17:e8:8d:dc:51:d5:d2:e6:1c:72:e4:28:75:
         a2:79:ae:b6:b6:8c:ec:08:08:4d:73:79:b7:22:26:40:ac:38:
         5c:f2:2b:4f:44:60:55:db:90:b3:63:74:ad:e7:26:12:ad:0d:
         ec:4a:cd:4f:7a:a0:54:62:f5:a7:bc:80:c2:fa:34:43:3c:f1:
         aa:f7:6e:4e:e1:80:fb:c7:cc:44:3a:2b:a4:6c:5b:0f:3f:83:
         6e:8d:d5:28:cf:6c:f0:c6:40:4d:c4:d4:3f:9c:9d:a4:47:a7:
         27:d1:5b:2b:5f:0d:bd:3f:7c:2e:19:fa:bc:24:bd:1f:64:81:
         8b:a4:e3:33:10:35:55:f9:73:2d:8b:e8:b8:d7:e3:49:0c:35:
         af:53:df:48:d8:df:ce:b1:5f:6c:74:1c:74:89:45:2e:28:2c:
         1f:fe:d8:a4:44:9c:c7:bc:d8:6a:46:38:df:e3:d0:05:37:27:
         d0:08:e5:93:b8:0e:d9:d9:dd:7c:28:75:18:27:be:4e:72:47:
         13:b9:a2:93:0e:83:e9:b8:49:f4:75:ad:e0:0f:9b:e5:96:4f:
         33:33:f1:27

Якщо ви хочете запит замість самопідписаного, просто замініть -x509 на -new та -extensions на -reqexts.


Якщо хтось потребує більш тривалого терміну дії, наприклад, 10 років, додайте-days 3650
Маріс Б.

3

Створіть сертифікат з domain.com як CN та * .domain.com у полі subjectAltName: dNSName імена - це працює.

В openssl, додайте в розширеннях:

subjectAltName          = DNS:*.domain.com

Як це зробити без використання CSR?
Walf

3

Щоб розширити відповідь AlberT:

http://blog.loftninjas.org/2008/11/11/configuring-ssl-requests-with-subjectaltname-with-openssl/

Вам не доведеться використовувати доменні символи. Ви можете просто перерахувати всі імена хостів, які вам потрібні як імена alt, і вони повинні працювати у всіх основних браузерах.


2
На жаль, ця посилання мертва. У WayBackMachine досі є записи про те, що проводяться в блозі .
Jpsy

Під час цього листа, посилання вище loftninjas.org активний (знову).
Михайло Т.

0

Перш за все - ви можете призначити сертифікат для кожного окремого віртуального хоста - ключ полягає в тому, щоб зробити різні приватні (і зовнішні / загальнодоступні, якщо ви хочете зробити його доступними у всьому світі) ip-адресу для кожного віртуального хоста.

Але тоді так - альтернативно, ви можете призначити сертифікат підстановки, якщо вашими віртуальними хостами є просто * .example.com.

Для команди - у Google є багато результатів - я просто наведу приклад звідси :

http://www.justinsamuel.com/2006/03/11/howto-create-a-self-signed-wildcard-ssl-certificate/

І обов’язково введіть * .example.com для загальної назви.


1
Це справа - у мене є лише одна IP-адреса. Здогадуюсь, мені це було незрозуміло.
Vilx-

@coolwater - Гарна порада, якщо я буду налаштовувати виробничий сервер на роботі, який би знаходився в нашому / 16 блоці . Для тих, хто має малі бізнес-зв’язки, які надають лише п’ять статичних IP-адрес, насправді це не варіант. Я вирішив це, обмежившись п'ятьма SSL Vhosts, один на IP.
Джейсон Ентман
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.