Heroku+Cloudflare完全免费SSL



尝试使用Cloudflares在Heroku上获得完全免费的SSL新的免费通用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应用程序
  • 使用此express中间件强制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.com和https://example-app.com不要工作。浏览器选项卡图标一直在旋转,永远不会解析。有什么想法可以让它发挥作用吗?这可能吗?

*更新

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

你好,比尔,

从根本上讲,只要"原点"支持SSL连接,您就可以使用CloudFlare的Full SSL。

Simon

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

我的网站已开始解析,但收到了一条"您的连接不是私人的"消息,如博客文章的"您可能看到的错误"部分。此外,在我的CloudFlare设置中还有一个"SSL发布"警报,所以我想一旦发布,它可能就会起作用。我会随时通知你们的。

有一个问题: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的Full SSL部分对此进行了说明
  • 但是"完全SSL(严格)"不起作用,因为CF希望Heroku提供yourdomain.com证书,并给出错误页面:-(
    [你当然可以自己获得这样的证书,并向Heroku支付将其提供给CF的费用,但这又回到了原点……你确实获得了CDN的好处,但它不是"Heroku上完全免费的SSL"。]CloudFlare文章通过HTTPS配置CloudFlare和Heroku中讨论了这种情况

那么,完全SSL的这种设置可以接受吗?有人可能会说,CF和Heroku之间的链接可能"在主干网中,在云之上",对于活跃的攻击者来说相对难以控制,因此通信显然比根本没有TLS更安全。但它不是端到端安全的,而且你给用户一种通常与HTTPS和绿色锁图标相关的错误的安全感,有些人会说这比根本没有TLS更糟糕。。。[参见意见https://news.ycombinator.com/item?id=8382335]

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

这确实和我设置的一样有效。问题是CloudFlare花了几天时间才发布他们的Unlimited SSL。一旦它在您的CloudFlare SSL设置下显示"SSL活动",它就会工作。

要使顶点域工作,您可能需要使用支持ALIAS记录的DNS提供商,Cloudflare也可以进行DNS,并且可能会工作。此处列出了更多提供商:https://devcenter.heroku.com/articles/custom-domains#root-域

要实现这一点,您需要在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,并将其命名为heroku。

最新更新