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

Apache VFS 错误。因为它是相对路径,并且没有提供基本 URI

Nginx/Apache 服务错误的网站