Apache 提供错误的 SSL-Cert
Posted
技术标签:
【中文标题】Apache 提供错误的 SSL-Cert【英文标题】:Apache delivering wrong SSL-Cert 【发布时间】:2015-09-12 16:10:02 【问题描述】:我有一台运行 Debian 8.1、Apache 2.4.10 和 OpenSSL 1.0.1k 的服务器。 我有一个域 example.com,其中包含一些子域,例如 www.example.com、cloud.example.com 和 db.example.com,它们都指向服务器(A-Records)。 所有这些子域都有自己的虚拟主机和自己的 SSL 证书。此外,如果您使用另一个域或 IP 发送 HTTPS 请求,您将获得一个带有自签名证书的页面。 在我重新启动服务器之前,一切都运行得很完美。 现在,当我请求 example.com(没有子域前缀)时,我得到了自签名 crt。子域工作得很好。我有以下 vHost-Configs:
(因为我只想要 HTTPS,所以我对所有 HTTP 连接都有一个重写规则)
000-default.conf
<VirtualHost *:80>
ServerAdmin admin@example.com
RewriteEngine On
RewriteRule ^/?(.*) https://%SERVER_NAME/$1 [R,L]
ErrorLog $APACHE_LOG_DIR/error.log
# Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
LogLevel warn
CustomLog $APACHE_LOG_DIR/access.log combined
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin admin@example.com
DocumentRoot /var/www
<Directory /var/www>
AllowOverride All
Require all granted
</Directory>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
ErrorLog $APACHE_LOG_DIR/error.ssl.log
LogLevel warn
CustomLog $APACHE_LOG_DIR/access.ssl.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/default/ca.crt
SSLCertificateKeyFile /etc/ssl/certs/default/ca.key
</VirtualHost>
</IfModule>
www.example.com.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin admin@example.com
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/example
<Directory /var/www/example>
AllowOverride All
Require all granted
</Directory>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
ErrorLog $APACHE_LOG_DIR/error.ssl.log
LogLevel warn
CustomLog $APACHE_LOG_DIR/access.ssl.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/www.example.com/ca.crt
SSLCertificateKeyFile /etc/ssl/certs/www.example.com/ca.key
SSLCertificateChainFile /etc/ssl/certs/www.example.com/sub.class1.server.ca.pem
SSLCACertificateFile /etc/ssl/certs/www.example.com/ca.pem
</VirtualHost>
</IfModule>
cloud.example.com.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin admin@example.com
ServerName cloud.example.com
DocumentRoot /var/www/example
<Directory /var/www/example>
AllowOverride All
Require all granted
</Directory>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
ErrorLog $APACHE_LOG_DIR/error.ssl.log
LogLevel warn
CustomLog $APACHE_LOG_DIR/access.ssl.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/www.example.com/ca.crt
SSLCertificateKeyFile /etc/ssl/certs/www.example.com/ca.key
SSLCertificateChainFile /etc/ssl/certs/www.example.com/sub.class1.server.ca.pem
SSLCACertificateFile /etc/ssl/certs/www.example.com/ca.pem
</VirtualHost>
</IfModule>
我真的希望有人可以帮助我!
【问题讨论】:
我认为这应该是Serverfault,但不能为此标记它。 你解决了这个问题吗?我也有类似的问题 正如我在答案中所写的,它再次起作用了。 【参考方案1】:对我来说,更改 VirtualHosts 的顺序有助于解决问题,方法是将出现故障的 VirtualHost 放在 conf 文件的顶部。
【讨论】:
【参考方案2】:主机名是示例(如域,但没有 .com),所以我将主机名更改为随机输入,重启后一切正常。当我改回我的主机名时,即使在重新启动后它仍然可以工作。
【讨论】:
以上是关于Apache 提供错误的 SSL-Cert的主要内容,如果未能解决你的问题,请参考以下文章
Apache2 错误:通过 SNI 和 HTTP 提供的主机名不匹配
Apache 为 Rails 文件提供错误的 Content-Type
Apache 错误 (AH01276),无法提供目录 /var/www/project/:
sh 为与您拥有证书颁发机构的开发站点轻松创建本地SSL证书https://deliciousbrains.com/ssl-cert