我正在尝试配置通配符 SSL 证书,以便在服务器的子域和主域上提供服务。为了使 SSL 证书正常工作,似乎我必须定义主站点的 sites-available 文件,如下所示:
<VirtualHost *:443>
当我尝试使用<VirtualHost someSite.com:443>
时 Firefox 会抱怨:
An error occurred during a connection to www.someSite.com.
SSL received a record that exceeded the maximum permissible length.
(Error code: ssl_error_rx_record_too_long)
The page you are trying to view cannot be shown because the authenticity of the received data could not be verified.
Google Chrome 则没有那么具体:
SSL connection error
我可以进行哪些更改<VirtualHost *:443>
以便我可以将 sub.someSite.com 作为具有 SSL 的不同虚拟主机来提供服务?
这是在 Ubuntu Server 12.04 LTS(3.2 内核)上,带有 Apache 2.2.22 和 Godaddy SSL 证书。
编辑:: 这里是Apache 站点启用域的文件。
<IfModule mod_ssl.c>
#<VirtualHost *:443> # With this line, the site serves fine
<VirtualHost someSite.com:443> # With this line, browsers throw the error
DocumentRoot /var/www/someSite/public_html
ServerName someSite.com
ServerAlias www.someSite.com
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/someSite/public_html/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/someSite.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/someSite.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>
答案1
Apache 建议不要<VirtualHost>
在指令中使用主机名各种原因。
最佳做法是在和指令中指定虚拟主机的 IP 地址*
或主机<VirtualHost>
名。ServerName
ServerAlias
因此要解决这个问题:
- 如果您希望所有通配符子域名都由现有虚拟主机提供服务,请将
ServerAlias *.example.com
其添加到其中。 - 如果您希望所有通配符子域名都由完全不同的虚拟主机提供服务,请添加一个
<VirtualHost>
带有ServerName something.example.com
和 的新块ServerAlias *.example.com
。