0

我有一个网站,主页上有一个论坛(使用 Xenforo 创建)。我最近将 HTTPS 与Let's encrypt一起使用(我已使用 cPanel 在服务器端启用它)。该网站在 HTTP 上运行良好。

现在我有了 HTTPS,我遇到了问题,因为有些人可以像往常一样访问该网站,但其他人不能。那些无法打开我的网站的人必须使用代理,然后网站才会加载。

在我编辑.htaccess文件中的一行后,此错误开始发生:

#   Mod_security can interfere with uploading of content such as attachments. If you
#   cannot attach files, remove the "#" from the lines below.
<IfModule mod_security.c>
    SecFilterEngine Off
    SecFilterScanPOST Off
</IfModule>

ErrorDocument 401 default
ErrorDocument 403 default
ErrorDocument 404 default
ErrorDocument 405 default
ErrorDocument 406 default
ErrorDocument 500 default
ErrorDocument 501 default
ErrorDocument 503 default

<IfModule mod_rewrite.c>
    RewriteEngine On

    # I HAVE ADDED THESE 2 NEW LINES
    RewriteCond %{SERVER_PORT} 80
    RewriteRule ^(.*)$ https://forums.example.com/$1 [R,L]

    #   If you are having problems with the rewrite rules, remove the "#" from the
    #   line that begins "RewriteBase" below. You will also have to change the path
    #   of the rewrite to reflect the path to your XenForo installation.
    #RewriteBase /xenforo

    #   This line may be needed to enable WebDAV editing with PHP as a CGI.
    #RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^(data/|js/|styles/|install/|favicon\.ico|crossdomain\.xml|robots\.txt) - [NC,L]
    RewriteRule ^.*$ /index.php [NC,L]

</IfModule>

我添加了这两行:

RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://forums.example.com/$1 [R,L]

现在我有一个奇怪的问题:有些人可以访问我的网站,有些人不能,他们必须使用代理!

我添加了这些规则,因为我需要将所有 http 重定向到 https 所以http://forums.example.com/必须成为https://forums.example.com/. 我以前从未遇到过这个问题。任何想法?

4

1 回答 1

2

第一的

这些人收到的具体错误信息是什么?

当我构建Greenlock时,我遇到了类似的问题,结果证明该证书没有正确加载,所以我假设这是来自浏览器的 TLS“隐私错误”,而不是 DNS 或 HTTP 问题。

下一个

我对 cPanel 不熟悉,但我对 ACME 标准和客户端非常熟悉。

Greenlock、 certbot 和许多其他 Let's Encrypt 客户端使用命名证书文件的约定,如下所示:

  • privkey.pem
  • cert.pem
  • chain.pem
  • fullchain.pem( cert.pem+ chain.pem)

有些还有bundle.pemfullchain.pem+ privkey.pem)。

许多 Web 服务器在其文档中要求 CRT 和 KEY。直觉上你可能会认为 CRT 是cert.pemKEY 是privkey.pem.

这通常是不正确的。

CRT 是 fullchain.pem

如果您的站点配置为cert.pem用作 CRT 而不是fullchain.pem您将遇到您描述的问题。

原因是任何访问过任何站点的人都正确地使用了与您看到的页面相同的中间权限chain.pem- 必要的权限已经存在于浏览器的缓存中。

但是,如果浏览器的缓存中没有丢失的部分,任何人都会遇到安全错误。

为什么它会通过代理工作?

这取决于“代理”的类型——因为这对不同的人可能意味着不同的事情。

我的猜测是,代理被用于比用户浏览器更多的站点(特别是许多使用同一链的小型业余爱好者站点),也许代理实际上正在下载站点,解密它,然后转发它,或者代理可能以某种方式用自己的缓存补充证书链。

浏览器隐私错误的可能解决方案

您的问题可能与我遇到的问题完全不同。症状听起来如此相似可能是巧合。

我不想把你带进一个不会让你到任何地方的兔子洞,但我认为检查你的设置以确保你正在使用fullchain.pem而不是使用cert.pem是重要的第一步。

.htaccess 重定向的可能解决方案

重定向的问题对我来说听起来很巧合。我怀疑这有关系。

最有可能的是,一旦您的网站强制使用 https,更多使用缓存中没有 Let's Encrypt 中间证书的浏览器的访问者突然开始注意到这个问题,因为他们现在受到了影响。

但是,如果您可以取消这些更改并确认 HTTPS(启用 SSL)适用于这些用户,那么我建议您尝试添加将执行相同操作的标头,而不是进行重定向:

于 2018-05-20T01:00:48.667 回答