【问题标题】:Workaround for Heroku no longer supporting SSL behind Cloudflare ("Strict TLS in CDN not supported")?Heroku 的解决方法不再支持 Cloudflare 后面的 SSL(“不支持 CDN 中的严格 TLS”)?
【发布时间】:2019-09-22 04:43:37
【问题描述】:

几天前,我们在 Cloudflare 代理(橙色云,如果您知道 Cloudflare)后面的 1 个 Heroku 应用程序上收到错误“不支持 CDN 中的严格 TLS”。

基本上,客户端对https://foo.example.com 的请求通过 Cloudflare 代理,然后 Cloudflare 向https://foo.herokuapp.com 发出请求,缓存响应,并将结果传递回客户端。请注意,整个链都通过 HTTPS。我们已将 Clouflare 配置为通过 HTTPS 与终端服务器通信,并且我们不希望终端服务器通过 HTTP 发送响应。

似乎 Heroku 的政策在检测到您位于已经在处理 SSL 的代理后面时不再允许通过 SSL 提供服务。在过去一周中,越来越多的应用程序开始显示此错误,我们不得不禁用 Cloudflare 的代理。 Here's their documentation 对此,给出的原因是“因为 Cloudflare 提供了 SSL 证书。”

还有其他人遇到过这种情况并有解决方法吗?虽然 Cloudflare 仍然可以防止某些漏洞从客户端到 Cloudflare,但这会导致其他漏洞从 Cloudflare 到终端服务器。

更新:我收到 Heroku 的回复:

ACM 可以与 Full 或 Flexible 一起使用,并且可以与“Full(Strict)”一起使用,但不推荐使用。 “Full(Strict)”模式……可以在 ACM 完成后使用。如果需要“完整(严格)”,我们建议使用 CA 颁发的长期证书,并采用 CSR 签名流程。

但是,我还没有发现上述情况是正确的。在任一设置(Full 或 Strict)下,Heroku 总是报告上述错误。我已经从 Cloudflare 安装了原始证书来解决这个问题。

【问题讨论】:

    标签: ssl heroku cloudflare


    【解决方案1】:

    我遇到了这个问题,这就是我解决它的方法。首先,我从 Heroku 中删除了我的证书并删除了我的自定义域,然后我去了终端

    1. $ heroku certs:info --app myapp(确保我没有证书)

    2. $ heroku certs:auto:enable --app myapp(我这样做是为了很好,这创建了一个证书)

    3. heroku 域:添加 data.myapp.com --app data-myapp(我正在使用子域,这添加了我的自定义域)

    4. 将 DNS 详细信息添加到 Cloudflare,我将其设置为 DNS 而不是代理,它工作正常。我把它设置回代理,它工作,我想,问题是过程,首先使用一个终端,两个确保你有一个证书,然后再添加域名。

    我希望这对某人有用。

    【讨论】:

    • 我遵循了这些步骤,但它对我不起作用...... :(
    • 最终的工作是假设 Heroku 将我的 Cloudflare SSL 设置视为“严格”,然后按照以下说明操作:help.heroku.com/GVS2BTB5/…
    【解决方案2】:

    Heroku 似乎特别不希望您使用 ACM(自动证书管理),他们使用 Let's Encrypt 自动为您颁发证书。当您的证书不是面向客户端时,这是不必要的。

    如果总是 Cloudflare 与您的 Heroku 应用程序对话,我建议改用“原始证书”。 Cloudflare 可以专门为您生成证书和私钥,以安装在您的源服务器上,以便向 Cloudflare 进行身份验证。此证书由 Cloudflare 的私有 CA 签名,浏览器无法识别,只能由 Cloudflare 本身签名。这意味着您不必像使用普通 CA 证书那样费力地验证您的域和续订证书。

    您可以告诉 Cloudflare 在 Cloudflare 仪表板中生成原始证书。您可以根据此文档将您的证书安装到 Heroku:

    https://devcenter.heroku.com/articles/ssl#manually-uploading-certificates-and-intermediaries

    请注意,这在 Heroku 端不需要“ACM”,因为您要带上自己的证书。我希望 Heroku 在 Cloudflare 之后可以使用这种模式(如果不是……那将是 Heroku 中的一个非常严重的缺陷)。

    这是 Cloudflare 关于原始证书的一般文档:

    https://support.cloudflare.com/hc/en-us/articles/115000479507-Managing-Cloudflare-Origin-CA-certificates

    (免责声明:我实际上并没有在 Heroku 上尝试过这个,但我过去已经成功地将原始证书用于其他主机。)

    【讨论】:

    • 感谢您的信息!为什么你会说在这种情况下 ACM 是不必要的?它仍然解决了必须在我的所有应用程序上安装原始证书的问题,而且这一切都是自动化的。很长一段时间以来,它对很多应用程序都运行良好,现在我必须在所有应用程序上都安装原始证书,而且它们确实有过期日期,尽管它们的 IIRC 长得离谱。
    • 嗯,将原始证书应用于我的所有应用程序显然需要......甚至不到 20 分钟 :) 所以这是一个很好的解决方案。不过,我想知道他们为什么要做出这样的改变。 Let's Encrypt 的一切都是自动化的,那么 Heroku 为什么还要关心我的代理情况呢?
    • @CharlieSchliesser 有很多东西可以用来操作一个受浏览器信任的真实 CA。 Let's Encrypt 不是免费运行的——它是由捐款资助的。所以,当你真的不需要时过度使用它有点不体谅。另外,我相信他们应用的速率限制可能会影响像 Heroku 这样的大型主机。因此,Heroku 会在不必要的时候试图阻止人们使用 ACM(由 Let's Encrypt 提供支持)是有道理的。
    猜你喜欢
    • 2023-02-20
    • 1970-01-01
    • 2020-10-02
    • 2011-06-18
    • 2018-08-23
    • 1970-01-01
    • 2014-06-12
    • 2023-04-01
    • 2017-03-31
    相关资源
    最近更新 更多