В настоящее время я следую следующему руководству: https://www.digitalocean.com/community/articles/how-to-set-up-multiple-ssl-certificates-on-one-ip-with-apache-on-ubuntu-12-04
До сих пор установка прошла без проблем. Я использую два сертификата класса 1, которые я зарегистрировал в http://www.startssl.com/?app=21. Каждый отображается в свой (правильный) домен.
Проблема в следующем: переход к любому домену под https разрешает один и тот же корень документа, т.е. если я перейду к https://backend.domain2.com, Я правильно захожу в корень документа, указанный в его конфигурации VirtualHost. Однако, если я пойду в https://email.domain1.com, Меня отправляют в корень backend.domain2, URL-адрес остается неизменным, с предупреждением о том, что сертификат SSL недействителен. Проверка «недействительного» сертификата показывает, что это тот, который подключен к backend.domain2.
Что я здесь делаю не так? ниже приведены конфигурации VirtualHost для обоих доменов:
<IfModule mod_ssl.c>
<VirtualHost *:443>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
ServerName mail.domain1.se
ServerAdmin christopher.svanefalk@gmail.com
ServerAlias www.mail.domain1.se
DocumentRoot /usr/share/apache2/roundcubemail
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM
SSLCertificateFile /etc/ssl/certs/domain1.crt
SSLCertificateKeyFile /etc/ssl/private/domain1.key
#SSLCertificateChainFile /etc/ssl/certs/sub.class1.server.ca.pem
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
#Alias /mail "/usr/share/apache2/roundcubemail/"
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/usr/share/apache2/roundcubemail/$1
</VirtualHost>
</IfModule>
<IfModule mod_ssl.c>
<VirtualHost *:443>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
ServerName backend.domain2.com
ServerAdmin christopher.svanefalk@gmail.com
#ServerAlias www.domain2.com
DocumentRoot /var/www/backend.domain2.com/html
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
#Alias /mail "/usr/share/apache2/roundcubemail/"
#ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/pegasusgbg.se/html/$1
SSLEngine On
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM
SSLCertificateFile /etc/ssl/certs/domain2.crt
SSLCertificateKeyFile /etc/ssl/private/domain2.key
#SSLCertificateChainFile /etc/ssl/certs/sub.class1.server.ca.pem
CustomLog /var/log/apache2/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
</IfModule>
Моя конфигурация ports.conf:
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default
NameVirtualHost *:80
NameVirtualHost *:443
Listen 80
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Это..
ServerName mail.domain1.se
ServerAdmin christopher.svanefalk@gmail.com
ServerAlias www.mail.domain1.se
..и это..
ServerName backend.domain2.com
#ServerAlias www.domain2.com
... оба не совпадают с именем хоста, который вы, по вашему мнению, посещаете, https://domain1.com
. Эти имена хостов должны точно совпадать с тем, что запрашивается в браузере, чтобы клиент мог предоставить правильный сертификат.
Просто чтобы убедиться, используете ли вы версию браузера, поддерживающую SNI? Согласно Википедии,
As of November 2012, the only major user bases whose browsers do not support
SNI appear to be users of Android 2.x (default browser)[2], Internet Explorer
on Windows XP[3][4] and versions of Java before 1.7 on any operating system.[5]
или более подробный список здесь: http://en.wikipedia.org/wiki/Server_Name_Indication#Client_side