Heroku + Cloudflare完全免费的SSL

尝试使用Cloudflares新的免费通用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正常工作,并redirect到https://example-app.herokuapp.com ,绿色锁和所有。

http://example-app.com和https://example-app.com都不起作用。 浏览器选项卡图标只是保持旋转,永远不会解决。 任何想法如何得到这个工作? 这甚至有可能吗?

*更新

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

嗨比尔,

基本上,只要“来源”支持SSL连接,您就可以在CloudFlare中使用完全SSL。

西蒙

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

我的网站已经开始解决,但得到了“您的连接不是私人的”信息,就像在博客文章的“错误您可能会看到”部分。 另外在我的CloudFlare设置中有一个“SSL发出”的警报,所以我想一旦发布这可能只是工作。 我会保持你们都张贴。

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

  • 它可以使用“灵活的SSL” – Heroku和CF之间的未encryption的HTTP。 我们不要那个。
  • 它也适用于“完整的SSL” – HTTPS之间的Heroku和CF,但没有CFvalidation证书。 Heroku提供*.herokuapp.com证书,CF很高兴。 不幸的是,Heroku和CF之间的中间人可以提供一个自签名的snakeoil.co.mordor证书,CF会同样高兴(用户不能说,他们只看到CF的证书)! CloudFlare博客文章“严格SSL简介”的“ 完整SSL”部分对此进行了介绍 。
  • 但“完全SSL(严格)”不起作用,因为CF期望Heroku呈现yourdomain.com证书 ,并给出一个错误页面:-(
    [你当然可以得到这样一个证书,并支付Heroku服务到CF,但是这回到了一个方面…你有CDN的好处,但它不是“Heroku上完全免费的SSL”。]这种情况是CloudFlare文章通过HTTPSconfigurationCloudFlare和Heroku进行了讨论。

那么是否可以接受完全SSL的设置? 有人可能会争辩说CF和Heroku之间的联系可能是“在云层之上”,而对于主动攻击者来说则相对难以控制,所以沟通显然比没有TLS更安全。 但是这不是端到端的安全性,而是给用户一个通常与HTTPS和绿色锁图标相关的安全错误感 ,有些人会说这比前面没有TLS更糟糕。 [见https://news.ycombinator.com/item?id=8382335上的意见%5D

截至2015年2月,我看不到CF中的选项configuration完全严格模式期望在其他域的证书。 我不知道为什么CF不允许,这显然是技术上可行的。

这确实和我设置的一样。 问题是CloudFlare花了几天的时间来发行他们的Unlimited SSL 。 一旦它在您的CloudFlare SSL设置下显示“SSL激活”,它就会起作用。

为了使apex域正常工作,您可能需要使用支持ALIASlogging的DNS提供程序,Cloudflare也可以使用DNS并且可能会工作 。 此处列出了更多供应商: https : //devcenter.heroku.com/articles/custom-domains#root-domain

为了使这个工作,你需要在你的域名的Cloudflare上创build一个页面规则。 我看起来像这样:

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

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

Cloudflare(和大多数其他DNS提供商)不允许根域的CNAMElogging。 只适用于子域名。 www是一个子域名,所以你可以强制所有的stream量到www和cname到heroku。