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。