Heroku + Cloudflare完全免费的SSL

时间:2014-09-30 23:05:39

标签: node.js ssl heroku express cloudflare

尝试使用Cloudflares新免费Universal SSL

在Heroku上获得完全免费的SSL

阅读这篇文章: http://mikecoutermarsh.com/adding-ssl-to-heroku-with-cloudflare/

现在看来Cloudflare可以免费提供SSL。

我采取的步骤:

  • 使用Cloudflare(免费帐户)设置我的DNS
  • 将我的域名转发给我的herokuapp(CNAME example-app.com - > example-app.herokuapp.com)
  • 将Cloudflare SSL选项设置为'完整SSL'
  • 将我的域名添加到我的heroku应用
  • 使用此快速中间件强制使用https:

    app.use(function(req, res, next) {
        if (req.headers['x-forwarded-proto'] != 'https') {
            res.redirect('https://' + req.headers.host + req.path);
        }
        else {
            return next();
        }
    });
    

heroku域http://example-app.herokuapp.com正常工作,并重定向到https://example-app.herokuapp.com,绿锁和所有。

http://example-app.comhttps://example-app.com都不起作用。浏览器选项卡图标一直在旋转,永远不会解析。关于如何使这个工作的任何想法?这甚至可能吗?

* UPDATE

看起来它实际上是可能的。来自CloudFlare支持:

  

比尔,

     

从根本上说,只要"起源"支持SSL连接,您可以将完全SSL与CloudFlare一起使用。

     

西蒙

CloudFlare今天发布了这篇博文: https://blog.cloudflare.com/universal-ssl-be-just-a-bit-more-patient/

我的网站已经开始解析,但获得了一个"您的连接不是私密的"像你可能看到的"错误中的消息"博客文章的一部分。同样在我的CloudFlare设置中,有一个" SSL发布"警报,所以我想,一旦它被发布,这可能只是工作。我会全部张贴。

4 个答案:

答案 0 :(得分:21)

有一个问题:Heroku和Cloudflare之间的不安全。

  • 它可以使用“灵活SSL” - Heroku和CF之间的未加密HTTP。我们不希望这样。
  • 它也适用于“完整SSL” - Heroku和CF之间的HTTPS,但没有CF验证证书。 Heroku提供*.herokuapp.com证书,CF很高兴。不幸的是,Heroku和CF之间的中间人可以提供一个自签名的snakeoil.co.mordor证书,CF也会同样高兴(用户无法分辨,他们只看到CF的证书)!它已在CloudFlare博客文章Introducing Strict SSL完整SSL 部分中进行了记录。
  • 但“完整SSL(严格)”不起作用,因为CF expects Heroku to present yourdomain.com cert,并给出错误页面:-(
    [你当然可以自己获得这样的证书并支付Heroku为CF服务但是这又回到了原点......你确实得到了CDN的好处,但它不是“完全免费的SSL Heroku“。] CloudFlare文章Configure CloudFlare and Heroku over HTTPS中讨论了这种情况。

这种设置是否可以接受完整SSL?有人可能会争辩说,CF和Heroku之间的链接可能是“在骨干中,在云层之上”,并且对于主动攻击者而言相对难以控制,因此通信显然比没有TLS更安全。但它不是端到端的安全,而且你给用户一个通常与HTTPS和绿色锁定图标相关联的错误的安全感,有些人会说这更糟糕然后预先与根本没有TLS ...... [见关于https://news.ycombinator.com/item?id=8382335]的意见

截至2015年2月,我在CF中看不到配置Full Strict模式以期望在其他域上使用证书的选项。我不知道为什么CF不允许这样做,显然技术上可行。

答案 1 :(得分:12)

这确实与我设置的一样。问题是CloudFlare花了几天时间发布他们的Unlimited SSL。一旦它说“SSL活跃”'在您的CloudFlare SSL设置下,它将起作用。

答案 2 :(得分:2)

要使apex域工作,您可能需要使用支持ALIAS记录的DNS提供程序,Cloudflare也会使用DNS和would likely work。此处列出了更多提供商:https://devcenter.heroku.com/articles/custom-domains#root-domain

答案 3 :(得分:0)

要实现此功能,您需要为您的域创建Cloudflare的页面规则。我看起来像这样:

URL Pattern: my-domain.co/*
Forwarding to: https://www.my-domain.co/$1

从那里,您可以使用www上的CNAME指向my-domain.herokuapp.com。

Cloudflare(以及大多数其他DNS提供商)不允许根域的CNAME记录。仅适用于子域名。 www是一个子域名,因此您可以强制所有流量到www和cname到heroku。