服务器托管一个站点,该站点使用通配符为不同的客户提供动态内容,并包含3个通配符证书,用于为这些客户提供不同的服务.
带通配符的配置的一部分如下所示:
<VirtualHost *:80> ServerName *.dashboard.example.com ServerAlias *.dashboard.example.com RewriteEngine On RewriteCond %{HTTP_HOST} ^(.+)\.dashboard.example\.com$ RewriteRule ^/(.*)$https://%1.dashboard.example.com/$1 [R=302,L] </VirtualHost> <VirtualHost *:443> ServerAdmin webmaster@example.com ServerName *.dashboard.example.com ServerAlias *.dashboard.example.com DocumentRoot /var/www/dashboard.example.com/web <Directory /> AllowOverride All Options -Indexes +MultiViews +FollowSymLinks Order Deny,Allow Allow from all </Directory> ErrorLog /var/log/apache2/dashboard.example.com-error.log CustomLog /var/log/apache2/dashboard.example.com-access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/bundle_wc_dashboard_example_com.crt SSLCertificateKeyFile /etc/ssl/certs/wildcard_dashboard_example_com.key </VirtualHost>
请注意,我正在使用捆绑包作为证书文件.使用SSL检查时,对中间文件和根文件使用单独的文件会导致更糟糕的结果.然后无法识别GeoTrust证书.我的SSL证书供应商解释自Apache 2.4,证书应该捆绑.
所以这对我不起作用:
SSLCertificateFile /etc/ssl/certs/wildcard_dashboard_example_com.crt SSLCertificateKeyFile /etc/ssl/certs/wildcard_dashboard_example_com.key SSLCertificateChainFile /etc/ssl/certs/GeoTrust_Global_CA.crt SSLCertificateChainFile /etc/ssl/certs/RapidSSL_SHA256_CA_G3.crt
但是,上面的内容确实适用于Apache 2.2.
当我尝试启动apache时,它会抱怨ServerName值:
[FAIL] Reloading web server: apache2 Failed! [warn] The apache2 configtest Failed. Not doing anything. ... (warning). Output of config test was: AH00526: Syntax error on line 42 of /etc/apache2/sites-enabled/3-production.conf: Invalid ServerName "*.dashboard.example.com" use ServerAlias to set multiple server names. Action 'configtest' Failed. The Apache error log may have more information.
所以似乎不允许使用星号.如果我删除了星号,apache会启动,但域的错误日志中会出现错误:
Fri Mar 11 10:32:13.821304 2016] [ssl:warn] [pid 18019] AH01909: dashboard.example.com:443:0 server certificate does NOT include an ID which matches the server name
从其他来源我发现了以下命令,该命令应该用于确定应该用作ServerName的CommonName:
openssl x509 -in wildcard_dashboard_example_com.crt -noout -subject
哪个回报:
subject= /CN=*.dashboard.example.com
我的浏览器确实显示绿色锁定,但SSL检查抱怨我错过了一个中间/链证书文件(见截图).对于其他2个通配符域和1个不是通配符的普通子域,同一服务器上也会出现同样的问题.即使有apache声明服务器证书也不包含与服务器名称匹配的ID.
该站点使用通配符为不同的客户提供动态内容,并为这些客户包含3个不同服务的通配符证书.
关于如何解决这个问题的任何想法?我还能做些什么来检查什么是错的?
2016年5月18日更新
我在4月初修好了.似乎提供SSL证书的公司给了我们一个旧的根证书.他们给我邮寄了一个包含捆绑证书和单独证书文件的zip.我尝试多次安装这些.然后我手动将所有文件的内容与其他有效的网站进行了比较.我发现了一个区别,并从他们的网站手动重新下载了证书.
GeoTrust证书不同.安装后,一切都像一个魅力.我的老板告诉我他会联系他们,但不幸的是,这件事从未发生过.无论如何,快乐它现在正在工作.
ServerName
用于指定站点的规范名称(单个名称).
其他名称和通配符仅进入ServerAlias
.
设置例如ServerName foo.dashboard.example.com应该可以工作(与您拥有的ServerAlias结合使用).
关于证书链中提到的问题,这些问题似乎与实际问题无关.
我建议确保正确捆绑所有必需的中间证书.
正如您所说SSLCertificateChainFile
已经过时,您不需要使用它,您可以将所有证书放在SSLCertificateFile
中.
Qualy’s SSL Labs测试可用于查看是否缺少任何中间证书或是否存在其他问题.