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

Конфигурация Apache с использованием SNI и сочетания сертификатов SSL

До этого момента я использовал SNI в своих ssl.conf файл с Apache 2.2.31. Я обслуживаю разные сайты в одном корне документа. Например:

NameVirtualHost *:443

<VirtualHost *:443>
DocumentRoot "/var/www/html"
ServerName www.domain1.com

ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn

SSLEngine on
SSLProtocol all -SSLv2 -SSLv3 -TLSv1
SSLCipherSuite ...
SSLHonorCipherOrder on

SSLCertificateFile /etc/pki/tls/certs/domain1.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/domain1.com.key
SSLCertificateChainFile /etc/pki/tls/certs/gd_bundle_domain1.crt
</VirtualHost>

<VirtualHost *:443>
DocumentRoot "/var/www/html"
ServerName www.domain2.com

SSLEngine on
SSLProtocol all -SSLv2 -SSLv3 -TLSv1
SSLCipherSuite ...
SSLHonorCipherOrder on

SSLCertificateFile /etc/pki/tls/certs/domain2.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/domain2.com.key
SSLCertificateChainFile /etc/pki/tls/certs/gd_bundle_domain2.crt
</VirtualHost>

...

Теперь я добавил сертификат с подстановочными знаками в надежде, что смогу добавить поддомены без дополнительной конфигурации Apache в другой новый домен. Итак, ssl.conf выглядит так:

NameVirtualHost *:443

<VirtualHost *:443>
DocumentRoot "/var/www/html"
ServerName www.domain1.com

ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn

SSLEngine on
SSLProtocol all -SSLv2 -SSLv3 -TLSv1
SSLCipherSuite ...
SSLHonorCipherOrder on

SSLCertificateFile /etc/pki/tls/certs/domain1.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/domain1.com.key
SSLCertificateChainFile /etc/pki/tls/certs/gd_bundle_domain1.crt
</VirtualHost>

<VirtualHost *:443>
DocumentRoot "/var/www/html"
ServerName www.domain2.com

SSLEngine on
SSLProtocol all -SSLv2 -SSLv3 -TLSv1
SSLCipherSuite ...
SSLHonorCipherOrder on

SSLCertificateFile /etc/pki/tls/certs/domain2.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/domain2.com.key
SSLCertificateChainFile /etc/pki/tls/certs/gd_bundle_domain2.crt
</VirtualHost>

...

<VirtualHost *:443>
DocumentRoot "/var/www/html"
ServerName newdomain.com

SSLEngine on
SSLProtocol all -SSLv2 -SSLv3 -TLSv1
SSLCipherSuite ...
SSLHonorCipherOrder on

SSLCertificateFile /etc/pki/tls/certs/newdomain_wildcard.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/newdomain_wildcard.com.key
SSLCertificateChainFile /etc/pki/tls/certs/gd_bundle_newdomain_wildcard.crt
</VirtualHost>

Он работает для newdomain.com, но не работает на других поддоменах (например, test.newdomain.com). Я также получаю это предупреждение при запуске сервера, если это актуально:

[предупреждение] Подстановочный знак сертификата сервера RSA CommonName (CN) `* .newdomain.com 'НЕ соответствует имени сервера !?

Если я изменю ServerName на *.newdomain.com, Я не получаю предупреждений, но сертификат вообще не работает.

Я почти уверен, что вам нужно указать фактическое имя сервера, а не подстановочный знак.

В вашем новом сертификате есть только "* .newdomain.com" или также "newdomain.com"? Я предполагаю, что только первый, поэтому его можно использовать только для поддоменов, а не для домена верхнего уровня (TLD). В этом случае просто установите ServerName на www.newdomain.com или любое другое ServerName, которому будет соответствовать подстановочный знак. Тем не менее, хорошей практикой является наличие сертификата, охватывающего также чистый TLD.

Вы также должны переместить конфигурацию сервера newdomain на первое место. Таким образом, это будет значение по умолчанию, и все, что явно не соответствует, попадет сюда (например, если кто-то использует ransom.newdomain.com). В настоящее время, поскольку www.domain1.com является первым, он будет соответствовать этим запросам и предположительно вызовет ошибку сертификата.