Я пытаюсь настроить Apache (2.2.3) для запуска двух веб-сайтов с SSL, используя разные домены и IP-адреса. Оба веб-сайта нормально работают на порту 80, но когда я попытался включить SSL для веб-сайта 2, я получил ошибку ssl_error_bad_cert_domain; website2 получает сертификат SSL для website1.
Вот моя настройка в httpd.conf:
# Website1
NameVirtualHost 192.168.10.1:80
<VirtualHost 192.168.10.1:80>
DocumentRoot /var/www/html
ServerName www.website1.org
</VirtualHost>
NameVirtualHost 192.168.10.1:443
<VirtualHost 192.168.10.1:443>
SSLEngine On
SSLCertificateFile conf/ssl/website1.cer
SSLCertificateKeyFile conf/ssl/website1.key
</VirtualHost>
# Website2
NameVirtualHost 192.168.10.2:80
<VirtualHost 192.168.10.2:80>
DocumentRoot /var/www/html/chart
ServerName www.website2.org
</VirtualHost>
NameVirtualHost 192.168.10.2:443
<VirtualHost 192.168.10.2:443>
SSLEngine On
SSLCertificateFile conf/ssl/website2.cer
SSLCertificateKeyFile conf/ssl/website2.key
</VirtualHost>
Обновление: в ответ Шейну (это не поместится в поле для комментариев) вот результат apachectl -S:
VirtualHost configuration:
192.168.10.2:80 is a NameVirtualHost
default server www.website2.org (/etc/httpd/conf/httpd.conf:1033)
port 80 namevhost www.website2.org (/etc/httpd/conf/httpd.conf:1033)
192.168.10.2:443 is a NameVirtualHost
default server bogus_host_without_reverse_dns (/etc/httpd/conf/httpd.conf:1040)
port 443 namevhost bogus_host_without_reverse_dns (/etc/httpd/conf/httpd.conf:1040)
192.168.10.1:80 is a NameVirtualHost
default server www.website1.org (/etc/httpd/conf/httpd.conf:1017)
port 80 namevhost www.website1.org (/etc/httpd/conf/httpd.conf:1017)
192.168.10.1:443 is a NameVirtualHost
default server bogus_host_without_reverse_dns (/etc/httpd/conf/httpd.conf:1024)
port 443 namevhost bogus_host_without_reverse_dns (/etc/httpd/conf/httpd.conf:1024)
wildcard NameVirtualHosts and _default_ servers:
_default_:443 192.168.10.1 (/etc/httpd/conf.d/ssl.conf:81)
Syntax OK
Пожалуйста удалите
NameVirtualHost 192.168.10.1:443
и
NameVirtualHost 192.168.10.2:443
Нет смысла активировать виртуальный хостинг на основе имени Apache для соединений SSL / TLS, или вы хотите использовать расширение SNI.
SSL-хосты - это не NameVirtualHosts - это виртуальные хосты на основе IP.
Удалить NameVirtualHost *:443
из вашего конфига.
Вот как у меня это работает. Мне пришлось переместить конфигурацию ssl из httpd.conf и настроить два виртуальных хоста в ssl.conf.
httpd.conf
# Website1
<VirtualHost 192.168.10.1:80>
DocumentRoot /var/www/html
ServerName www.website1.org
</VirtualHost>
# Website2
<VirtualHost 192.168.10.2:80>
DocumentRoot /var/www/html/chart
ServerName www.website2.org
</VirtualHost>
ssl.conf
<VirtualHost 192.168.10.1:443>
DocumentRoot "/var/www/html/"
ServerAdmin you@your-site.com
ServerName www.website1.org
SSLEngine On
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:
+EXP:+eNULL
SSLCertificateFile /etc/httpd/conf/ssl.crt/website1.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/website1.key
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
</VirtualHost>
<VirtualHost 192.168.10.2:443>
DocumentRoot "/var/www/html/chart/"
ServerAdmin you@your-site.com
ServerName www.website2.org
SSLEngine On
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:
+EXP:+eNULL
SSLCertificateFile /etc/httpd/conf/ssl.crt/website2.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/website2.key
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
</VirtualHost>
Теперь, когда Apache2 обрабатывает именованные виртуальные хосты для обоих HTTP
И HTTPS
Я бы рекомендовал настроить ваши домены в отдельном файле конфигурации. Точно так же, как сейчас Apache со своими конфигурационными каталогами "сайты доступны / сайты включены". Поместите оба ваших http
и https
объявления в один файл и либо сохраните этот файл в каталог с поддержкой сайтов, либо сохраните его в любом месте и создайте символьную ссылку.
Подобно: /etc/apache2/sites-enabled/Website_ONE.com.conf:
<VirtualHost *:80>
ServerName Website_ONE.com
#if you want to redirect to https:
Redirect permanent / https://Website_ONE.com/
DocumentRoot /WWW/Website_ONE.com/
</VirtualHost>
<VirtualHost *:443>
ServerName Website_ONE.com
DocumentRoot /WWW/Website_ONE.com/
### SSL Setup ###
SSLEngine on
SSLCertificateFile /etc/SSL_conf/Website_ONE.com/cert.pem
SSLCertificateKeyFile /etc/SSL_conf/Website_ONE.com/privkey.pem
SSLCertificateChainFile /etc/SSL_conf/Website_ONE.com/chain.pem
</VirtualHost>
Затем: /etc/apache2/sites-enabled/Website_TWO.com.conf:
<VirtualHost *:80>
ServerName Website_TWO.com
#if you want to redirect to https:
Redirect permanent / https://Website_TWO.com/
DocumentRoot /WWW/Website_TWO.com/
</VirtualHost>
<VirtualHost *:443>
ServerName Website_TWO.com
DocumentRoot /WWW/Website_TWO.com/
### SSL Setup ###
SSLEngine on
SSLCertificateFile /etc/SSL_conf/Website_TWO.com/cert.pem
SSLCertificateKeyFile /etc/SSL_conf/Website_TWO.com/privkey.pem
SSLCertificateChainFile /etc/SSL_conf/Website_TWO.com/chain.pem
</VirtualHost>
Эти файлы, как я уже сказал, могут храниться где угодно - при условии, что они безопасны (т. Е. Доступны для чтения только тем людям, которым нужен доступ) - и связаны с сайты с поддержкой папка. То же самое с ключевыми файлами и прочим. Это упрощает отслеживание ваших виртуальных хостов, IMHO, если вся конфигурация находится в файле с именем домена. Кстати, я бы использовал абсолютные пути в вашей конфигурации по сравнению с относительными - как вы это сделали в своем ответе.
Попробуйте удалить или закомментировать <VirtualHost _default_:443>
блокировать в /etc/httpd/conf.d/ssl.conf
.
Вам нужно ServerName www.server [1 | 2} .com в разделе
Если вы действительно запускаете apache 2.2.3, проблема в том, что вы не можете использовать виртуальный хостинг на основе имен на SSL, потому что ваш mod_ssl не поддерживает его.
Для этого вам понадобится apache версии 2.2.12 или новее.
Однако вы можете использовать виртуальный хостинг на основе IP. Решение, которое вы опубликовали, на самом деле делает это (два сайта на двух разных IP-адресах)
Вы не можете использовать vhosts с SSL, если не используете довольно недавнюю разработку под названием SNI. Вы также можете использовать сертификат с подстановочными знаками (например, * .myhostname.com), если все ваши TLD одинаковы.
Подробнее см .: