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

Домены и субдомены виртуальных хостов с разными SSL-сертификатами


У меня есть домен: www.example.com, и мне нужно, чтобы этот домен был доступен как через https, так и через http.
У меня есть сертификат (GeoTrust), который защищает www.example.com и example.com.

Мне также нужно защитить app.example.com.
app.example.com - это то, что должно быть доступно ТОЛЬКО через https, но ему не нужен правильный сертификат: достаточно самоподписанного.

Я пробовал много разных конфигураций (даже используя один и тот же сертификат как для основного домена, так и для субдомена), но ничего не помогло!
Следующая конфигурация - это последняя, ​​которую я пробовал, но в результате, если я подключаюсь к app.example.com, он сообщает мне, что соединение ненадежное, а затем, после принятия, перенаправляет меня на www.example.com!

Любая помощь? Спасибо.

<VirtualHost *:80>
DocumentRoot "/var/websiteexample/public/www"
ServerName www.example.com
ServerAlias example.com
<Directory "/var/websiteexample/public/www">
allow from all
Options +Indexes
</Directory>
</VirtualHost>

<VirtualHost *:443>
DocumentRoot "/var/websiteexample/public/www"
ServerName www.example.com
ServerAlias example.com
SSLEngine on
SSLCertificateFile /root/www.example.com.crt
SSLCertificateKeyFile /root/www.example.com.key
<Directory "/var/websiteexample/public/www">
allow from all
Options +Indexes
</Directory>
</VirtualHost>

<VirtualHost *:443>
DocumentRoot "/path/to/another/app"
ServerName app.example.com
SSLEngine on
SSLCertificateFile /root/app.example.com.pem
<Directory "/path/to/another/app">
allow from all
Options +Indexes
</Directory>
</VirtualHost>
  • добавлено SSLEngine on в serverconfig
  • добавлено SSLStrictSNIVHostCheck on в serverconfig - SNI для нескольких сертификатов, исключая клиентов, не поддерживающих SNI
  • добавлено SSLCertificateKeyFile /root/app.example.com.key - вам нужен приватный ключ для обоих vhosts

Вот новая конфигурация:

SSLEngine on
SSLStrictSNIVHostCheck on
SSLProtocol -ALL +SSLv3 +TLSv1
SSLCipherSuite ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:-MEDIUM

<VirtualHost *:80>
    DocumentRoot "/var/websiteexample/public/www"
    ServerName www.example.com
    ServerAlias example.com
    <Directory "/var/websiteexample/public/www">
        allow from all
        Options +Indexes
    </Directory>
</VirtualHost>

<VirtualHost *:443>
    DocumentRoot "/var/websiteexample/public/www"
    ServerName www.example.com
    ServerAlias example.com
    #You might also need: SSLCertificateChainFile 
    SSLCertificateFile /root/www.example.com.crt
    SSLCertificateKeyFile /root/www.example.com.key
    <Directory "/var/websiteexample/public/www">
        allow from all
        Options +Indexes
    </Directory>
</VirtualHost>

<VirtualHost *:443>
    DocumentRoot "/path/to/another/app"
    ServerName app.example.com
    SSLCertificateFile /root/app.example.com.pem
    SSLCertificateKeyFile /root/app.example.com.key
    <Directory "/path/to/another/app">
        allow from all
        Options +Indexes
    </Directory>
</VirtualHost>

Вы не можете использовать виртуальный хостинг на основе имен с SSL, потому что имя происходит из заголовка «Host:», который является частью того, что зашифровано. Вам нужно будет выбрать ключ, прежде чем вы узнаете, какой ключ выбрать.

Как правило, для каждой уникальной пары ключей используется дополнительный IP-адрес. Вы можете найти отличные примеры и объяснения на http://wiki.apache.org/httpd/NameBasedSSLVHosts