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

时间:2019-05-03 15:40:56

标签: 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的代理。 Here's their documentation,原因是“因为Cloudflare提供了SSL证书。”

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

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

  

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

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

2 个答案:

答案 0 :(得分:3)

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上尝试过此操作,但过去我已与其他主机成功地使用了来源证书。)

答案 1 :(得分: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而不是代理,并且有效。我将其重新设置为代理服务器,并且可以正常工作。我想,问题出在过程上,首先使用终端,然后在添加域名之前先确保您拥有证书。

我希望对某人有用。