До этого момента я использовал 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 является первым, он будет соответствовать этим запросам и предположительно вызовет ошибку сертификата.