У меня есть массовый виртуальный хостинг, настроенный на одном из наших серверов, что позволяет мне в основном создавать символическую ссылку в определенном каталоге и сразу же иметь этот хост, доступный как по http, так и по https. Это отлично работает, если все имена хостов находятся в одном домене (подстановочный сертификат), но не иначе. Позвольте мне показать вам мой контейнер VirtualHost:
<VirtualHost 1.2.3.4:443>
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
### Mass SSL Vhosts ###
RewriteEngine on
# define two maps: one for fixing the URL and one which defines
# the available virtual hosts with their corresponding
# DocumentRoot.
RewriteMap lowercase int:tolower
# 2. make sure we have a Host header
RewriteCond %{HTTP_HOST} !^$
# 3. lowercase the hostname
RewriteCond ${lowercase:%{HTTP_HOST}|NONE} ^(.+)$
# 5. finally we can map the URL to its docroot location
# and remember the virtual host for logging puposes
RewriteRule ^/(.*)$ /wwwroot/vhosts/%{HTTP_HOST}/$1 [E=VHOST:${lowercase:%{HTTP_HOST}}]
<Directory "/wwwroot/vhosts/">
Options FollowSymLinks
AllowOverride All
</Directory>
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
ErrorLog /var/log/httpd/ssl_error_log
TransferLog /var/log/httpd/ssl_access_log
LogLevel warn
SSLCertificateFile /etc/pki/tls/certs/wildcard.foo.com.crt
SSLCACertificateFile /etc/pki/tls/certs/wildcard.foo.com.intermediate.crt
SSLCertificateKeyFile /etc/pki/tls/private/www.foo.com.key
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
Эта установка работает в любое время, когда я хочу создать домен something.foo.com. Я просто создаю символическую ссылку в / wwwroot / vhosts на каталог пользователя, и все работает. Теперь я хочу создать домен something.bar.com. Еще раз, я могу просто создать его, бросить и http://something.bar.com буду работать. Однако я не могу работать https://something.bar.com из-за явно определенных сертификатов выше.
Есть ли способ ветвления внутри контейнера VirtualHost для использования разных сертификатов SSL в зависимости от имени хоста?
Вы изучали SNI (указание имени сервера)? Например. с mod_ssl или mod_gnutls: