Назад | Перейти на главную страницу

Как создать ssl-сертификат для нескольких доменов, для которого требуется корневой ключ CA в Linux

У меня есть почтовый сервер. На нем размещены могут быть домены. Я развертываю на нем сертификат ssl. Я хочу, чтобы при доступе пользователя к почтовой учетной записи с помощью браузера https должен был отображаться, что сертификат является доверенным (в Chrome он должен показывать зеленый https, а не красный в адресной строке).

Я обнаружил:
Сначала мне нужно создать сертификат CA.

openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -days 1024 -out rootCA.pem

Скопируйте его на рабочее место пользователя.

Затем создайте файл ключа, используя следующую команду.

openssl genrsa -out device.key 2048

и файл csr, используя этот ключевой файл, используя команду:

openssl req -new -key device.key -out device.csr

Как только это будет сделано, подпишите CSR, для которого требуется корневой ключ CA.

openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 500

Используя вышеуказанный метод, я могу создать сертификат только для одного домена.
Как создать его для нескольких доменов.

SSL VirtualHosts на основе имен

Эта проблема возникает, если вы используете несколько виртуальных хостов на основе имен и SSL на одном IP-адресе. Веб-сервер не знает имени запрошенного хоста до тех пор, пока не будет выполнено квитирование SSL, потому что заголовки HTTP-запроса являются частью зашифрованного содержимого.

В действительности веб-сервер, такой как Apache, позволит вам настраивать виртуальные хосты SSL на основе имен, но он всегда будет использовать конфигурацию виртуального хоста, указанного первым (на выбранном IP-адресе и порту), для настройки уровня шифрования. Видеть https://wiki.apache.org/httpd/NameBasedSSLVHosts Чтобы получить больше информации.

Вы можете использовать один сертификат для нескольких виртуальных хостов, если они находятся в одном домене, используя подстановочный сертификат, например *.example.com, который будет работать для one.example.com и two.example.com.

SSL VirtualHosts на основе имен с SNI

Решение представляет собой расширение протокола SSL под названием Server Name Indication (SNI), которое позволяет клиенту включать запрошенное имя хоста в первое сообщение своего подтверждения SSL. Видеть https://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI Чтобы получить больше информации.

Apache должен быть собран с OpenSSL (с опцией TLS Extensions enable-tlsext включен; В OpenSSL 0.9.8k и более поздних версиях это включено по умолчанию)

Чтобы проверить, поддерживает ли ваша установка Apache SNI, выполните следующие действия:

Включить NameVirtualHost для SSL в /etc/apache2/ports.conf:

<IfModule mod_ssl.c>
  NameVirtualHost *:443
  Listen 443
</IfModule>

Создайте два виртуальных хоста SSL в /etc/apache2/sites-available/default-ssl

<VirtualHost *:443>
  ServerName www.example1.com
  DocumentRoot /var/www/example1
  SSLEngine on
  SSLCertificateFile    /etc/apache2/example1.com.cert
  SSLCertificateKeyFile /etc/apache2/example1.com.key
</VirtualHost>

<VirtualHost *:443>
  ServerName www.example2.com
  DocumentRoot /var/www/example2
  SSLEngine on
  SSLCertificateFile    /etc/apache2/example2.com.cert
  SSLCertificateKeyFile /etc/apache2/example2.com.key
</VirtualHost>

Включите mod_ssl:

# a2enmod ssl

Включите сайт SSL:

# a2ensite default-ssl

Перезагрузите Apache:

# /etc/init.d/apache2 restart

Теперь, если вы просматриваете журнал ошибок Apache и видите следующее сообщение, это означает, что SNI встроен.

[warn] Init: Name-based SSL virtual hosts only work for clients with \
       TLS server name indication support (RFC 4366)

В противном случае вы увидите при запуске Apache сообщение типа You should not use name-based virtual hosts in conjunction with SSL!!

Теперь, если вы подписали свои два сертификата example1.com.cert и example2.com.cert с вашим сертификатом CA, добавил его в список доверенных вашего браузера, и ваш браузер поддерживает SNI, вы должны иметь доступ https://www.example1.com и https://www.example2.com без каких-либо жалоб со стороны вашего браузера.

SSL VirtualHosts на основе имен с GnuTLS

GnuTLS - это реализация Transport Layer Security по лицензии LGPL, преемника SSL. С помощью GnuTLS вы можете создать один сертификат, действительный для нескольких доменов и доменов с подстановочными знаками, например:

DNS Name: example1.com
DNS Name: *.example1.com
DNS Name: example2.com
DNS Name: *.example2.com
DNS Name: example3.com
DNS Name: *.example3.com

Видеть https://help.ubuntu.com/community/GnuTLS для подробного руководства по использованию GnuTLS.