Heroku的变通办法不再支持Cloudflare后面的SSL(“不支持CDN中的严格TLS”)?

Cha*_*ser 9 ssl heroku cloudflare

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

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

当Heroku的策略检测到您位于已经在处理SSL的代理后面时,似乎不再允许通过SSL进行服务。在过去的一周中,更多的应用程序开始显示此错误,我们不得不禁用Cloudflare的代理。这是他们的文档,给出的原因是“因为Cloudflare提供了SSL证书”。

其他人遇到此问题并有解决方法吗?尽管Cloudflare仍然可以阻止从客户端到Cloudflare的某些漏洞,但这仍使其他漏洞从Cloudflare到最终服务器都可以打开。

更新:我已经收到Heroku的回复:

ACM可以与Full或Flexible一起使用,并且可以与“ Full(Strict)”一起使用,但不建议这样做。ACM完成后,可以使用“完全(严格)”模式。如果需要“完全(严格)”,我们建议使用CA签发的具有CSR签名过程的长期证书。

但是,我没有发现上述说法是正确的。在任何设置(完全或严格)下,Heroku始终报告上述错误。我已经安装了Cloudflare的原始证书来解决此问题。

Ken*_*rda 5

看来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/zh-CN/articles/115000479507-Managing-Cloudflare-Origin-CA-certificates

(免责声明:我实际上并未在Heroku上尝试过此操作,但过去我已成功将原始证书与其他主机一起使用。)