几天前,在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的原始证书来解决此问题。
答案 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有关原始证书的一般文档:
(免责声明:我实际上并未在Heroku上尝试过此操作,但过去我已与其他主机成功地使用了来源证书。)
答案 1 :(得分:1)
我遇到了这个问题,这就是我解决它的方式。首先,我从Heroku中删除了我的证书,还删除了我的自定义域,然后去了终端机
$ heroku certs:info --app myapp(以确保我没有证书)
$ heroku certs:auto:enable --app myapp(我这样做是为了很好,它创建了一个证书)
heroku域:添加data.myapp.com --app data-myapp(我正在使用子域,这添加了我的自定义域)
将DNS详细信息添加到Cloudflare,我将其设置为DNS而不是代理,并且有效。我将其重新设置为代理服务器,并且可以正常工作。我想,问题出在过程上,首先使用终端,然后在添加域名之前先确保您拥有证书。
我希望对某人有用。