У меня есть домен: 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
в serverconfigSSLStrictSNIVHostCheck on
в serverconfig - SNI для нескольких сертификатов, исключая клиентов, не поддерживающих SNISSLCertificateKeyFile /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