更新后的 SSL 证书和重写条件现在不再适用于 apache2

更新后的 SSL 证书和重写条件现在不再适用于 apache2

我正在运行带有 Apache2 v2.4.7 的 Ubuntu 14.04 服务器。

最近,我们的网站收到来自 Chrome 的错误提示,提示我们需要更新证书。我本周早些时候刚刚完成更新,更新了 SSL 证书,然后重新启动了 Apache。几天后,我的客户回来告诉我,某些图像和文件无法通过他们的报告服务器访问。报告服务器使用 HTTPS 来获取图像和文件。

我的配置文件中有这个,自从我继承了这个服务器之后它就没有改变过:

<VirtualHost *:80>
    ServerName abc.example.com
    DocumentRoot /home/deployer/html/_abc/public
    RewriteEngine On

    RewriteCond %{HTTPS} off
    RewriteCond %{REQUEST_URI} !^/files/
    RewriteCond %{REQUEST_URI} !^/images/checksheets/
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</VirtualHost>

<VirtualHost *:443>
    ServerName abc.example.com
    DocumentRoot /home/deployer/html/_abc/public
    SSLEngine on
    SSLProtocol all -SSLv2 -SSLv3
    SSLCipherSuite          ECD....C3-SHA:!DSS
    SSLHonorCipherOrder     on
    SSLCompression          off
    SSLCertificateFile /etc/ssl/ssl_certificate.crt
    SSLCertificateKeyFile /etc/ssl/abc_staging.key
    SSLCertificateChainFile /etc/ssl/IntermediateCA.crt
    # HSTS (mod_headers is required) (15768000 seconds = 6 months)
    Header always set Strict-Transport-Security "max-age=15768000"
    <Directory /home/deployer/html/_abc/public>
        AllowOverride all
        Options FollowSymLinks
        # -MultiViews
        #   Order allow,deny
        Require all granted
    </Directory>

我在服务器上所做的唯一一件事就是更新 ssl_certificate 和 IntermediateCAs 并重新启动 Apache,所以我不确定发生了什么。上次更新 SSL 证书大概是在一年前,报告服务器抓取图像/文件的方式没有改变。我也经常重新启动 Apache,以前从来没有出现过这个问题。

我的客户一时兴起,使用http而不是创建了一份新报告https,而且似乎运行得很好。

我的问题是,什么情况可能发生,导致服务器突然不再接受https图像/文件的连接?

编辑:这些只是 GET 请求(没有 POST/DELETE 操作)。

此外,使用 HTTPS 导航到图像(或文件)https://abc.example.com/images/path/to/file.jpg完全没问题。但当报告服务器使用同一链接时,会显示空白页。

直接导航时,Apache 访问日志将显示上述链接作为命中,但是当报告服务器使用它并且我导航到报告时,Apache 访问日志根本不显示任何内容。

答案1

在您的<VirtualHost *:443>浏览器中启用 HSTS。这会告诉浏览器在内部将域的每个请求重写为 HTTPS。此后,将不再使用,RewriteCond %{REQUEST_URI} !^/files/因为所有内容都应已无条件重写,这让您可以简化配置:

<VirtualHost *:80>
    ServerName abc.example.com
    Redirect permanent / https://abc.example.com/
</VirtualHost>

空白页问题似乎根本不是 Apache 导致的服务器端问题。您可以从另一台计算机访问该 URL 这一事实几乎证明了这一点。

首先清除“报告服务器”上的所有缓存,看看是否有帮助。目前尚不清楚此“报告服务器”如何工作,但空白页可能是由于混合内容策略更改导致 HTTPS 页面上未显示缓存的 HTTP URL 图像所致。如果是这样,重定向和 HSTS 策略之间的一致性可能会阻止将来出现此类缓存。

另外,将http://内容上的所有 URL 修复为https://

答案2

故障排除建议:

  1. 请确认您的环境:

    • 带有 Apache2 v2.4.7 的 Ubuntu 14.04 服务器。
    • 您的 httpd.conf 配置为同时提供 HTTP (:80)和 HTTPS(:443)。
    • 您的证书配置(上面发布)是正确的,并且文件和(SSLCertificateFile等)都存在并且没有被“损坏”。
  2. 请确认问题描述:

    • 在您更新 SSL 证书之前,“一切都正常”,“问题”与新证书有关。
    • 所有尝试通过 https“获取报告”的用户(示例https://apache-server.com/myreport) 失败 - 他们只看到“白色”。这是正确的吗?
    • 如果相同的用户使用 http,他们就能成功获取相同的报告(例如:http://apache-server.com/myreport) 来代替。这也正确吗?
    • 报告有什么“特殊”之处吗?例如,它是一个 Web 应用程序吗?
  3. 我很好奇全部https 已“损坏”,或只是“某些内容”无法访问。

    请创建一个测试文件(例如/var/www/html/myreport/hello.html:)并验证您是否可以使用 http 和 https 读取它。

  4. 测试时,请在您的电脑上使用以下一个(或两个)工具来分析浏览器的连接尝试(从而帮助确定具体的故障点):

  5. 请回复您发现的内容。

附言:

以下是一些额外的提示。特别是“启用详细日志记录”:

https://www.futurehosting.com/blog/troubleshooting-the-most-common-apache-problems-youll-encounter/

备注:

我会不是禁用 http 直到问题解决为止:

  • 如果没有其他办法,这只是对于那些可能需要报告的人来说的一个临时解决办法。
  • 能够比较 http 与 https 的行为将有助于排除故障。

答案3

我们找到了答案。虽然 Apache 服务器本身没有问题,但显然我们之前在证书文件中保存了一个特定的 DH 参数片段。之所以添加此片段,是因为请求图像和文件的报告服务器运行在 Java 6 上。而 Java 6 只能处理 1024 位的 DH 参数。

因此ssl_certificate.crt,我在我的新

-----BEGIN DH PARAMETERS-----
MIGHAoGBAP//////////yQ/aoiFowjTExmKLgNwc0SkCTgiKZ8x0Agu+pjsTmyJR
Sgh5jjQE3e+VGbPNOkMbMCsKbfJfFDdP4TVtbVHCReSFtXZiXn7G9ExC6aY37WsL
/1y29Aa37e44a/taiZ+lrp8kEXxLH+ZJKGZR7OZTgf//////////AgEC
-----END DH PARAMETERS----- 

http://httpd.apache.org/docs/current/ssl/ssl_faq.html#javadh

不幸的是,这会将我们的证书从 A+ 评级降级为 B,但我不允许将 Java 服务器从 6 升级到任何更新的版本。

一旦我将该代码片段添加到我的 SSL 证书,报告服务器就能够访问图像了https

相关内容