У меня есть почтовый сервер. На нем размещены могут быть домены. Я развертываю на нем сертификат 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.