Heroku + Cloudflare 完全免费的 SSL

Posted

技术标签:

【中文标题】Heroku + Cloudflare 完全免费的 SSL【英文标题】:Heroku + Cloudflare completely free SSL 【发布时间】:2014-11-25 17:13:44 【问题描述】:

尝试在 Heroku 上使用 Cloudflares 获得完全免费的 SSL 新免费 Universal 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 连接,您就可以将 Full SSL 与 CloudFlare 一起使用。

西蒙

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

我的网站已开始解析,但收到一条“您的连接不是私密的”消息,就像博文的“您可能会看到的错误”部分一样。在我的 CloudFlare 设置中还有一个“SSL 发布”警报,所以我想一旦它发出,这可能会起作用。我会及时通知你们的。

【问题讨论】:

不,如果您想为 Heroku 上托管的自定义域启用 SSL,则必须每月支付 20 美元。 @idbehold 你读过这篇文章了吗?它建议你不要。 mikecoutermarsh.com/adding-ssl-to-heroku-with-cloudflare 顺便说一句 - 使用来自startssl.com的免费 SSL 更容易做到这一点 顺便说一句,对于任何寻求免费 SSL 托管的人,您可以使用 OpenShift 免费托管您的 custom 域(只要您获得免费证书)。 @RobinWinslow 开放班次是 iaas,所以你可以安装 ssl 证书......对,就规格而言,它与 heroku 相比如何,免费一个。我还读到你在 openshift 上只能有 3 个免费实例。 【参考方案1】:

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

【讨论】:

CloudFlare 使用 CNAME Flattening,在 the article 中使用,这表明它是可能的。 他们的 CNAME 扁平化对我有用,对 foo.herokuapp.com 和 bar-baz.rhcloud.com 都有效,并且(非常轶事)不会干扰发给网站管理员的电子邮件@myapex.net(IIUC 是类似 ALIAS 的 DNS 的主要风险)。【参考方案2】:

要使其正常工作,您需要在 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。

【讨论】:

CloudFlare 使用CNAME Flattening,在文章中使用它表明它是可能的。另外,这似乎对我不起作用。 这两种方式都有效。在我的 cloudflare 页面规则中,我有两个规则:[http]://exaple.org 到 [https]://exaple.org/ 和 www.exaple.org 到 [https]://exaple.org 这种方式 cloudflare 自动将我重新连接到 [https://]exaple.org 不幸的是,cloudflare 不支持免费的通配符子域、专业帐户或企业帐户,并且传闻允许通配符的企业帐户每月花费 500 美元。【参考方案3】:

这确实按照我的设置工作。问题是 CloudFlare 花了几天时间才发布他们的Unlimited SSL。一旦在您的 CloudFlare SSL 设置下显示“SSL 活动”,它就会起作用。

【讨论】:

这里一样,2天前设置heroku和cloudflare,ssl今天开始工作 我读过它在用户和 cloudfare 之间是安全的,但在 cloudfare 和您的服务器之间不是安全的。是真的吗?此外,cloudfare 的 ssl 不适用于 android 2.xx 和 ie。 (我想如果你检测到并重定向到app.herokuapp.com 可悲(新):“当应用迁移到新的基础架构时,其默认的 appname.herokuapp.com、DNS 记录和任何 haiku.herokudns.com 自定义域记录都被修改为指向新路由基础设施的 IP 地址。在 24-48 小时内,应用程序可通过新路由基础设施和旧路由基础设施访问。迁移完成后,应用程序将不再可通过旧路由基础设施访问,所有流量必须通过新的基础架构。发送到旧基础架构的应用请求将导致错误代码:H31 Misdirected Request。"【参考方案4】:

有一个问题: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 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 中没有看到配置完全严格模式以期望在其他域上获得证书的选项。我不知道为什么 CF 不允许这样做,这显然在技术上是可行的。

【讨论】:

我会要求确认 Full SSL (Strict) 如果您配置类似 OP 链接的文章所建议的内容 - 使用 CNAME @ 987654330@,但后来我发现这篇 CloudFlare 文章Configure CloudFlare and Heroku over HTTPS 说了这么多:( 在你链接到的关于他们期望什么证书的文章中,当他们说“证书必须 [...] 响应请求域名(主机名)" 我猜他们的意思是用户请求中的主机名。 The Full(strict) SSL option checks for SSL certificate validity at the origin web server... or valid certificate purchased from a Certificate Authority is required to avoid 526 errors. heroku 在domain.herokuapp.com 提供的证书是有效的。所以你应该能够毫无问题地设置 Full(strict) 吗? support.cloudflare.com/hc/en-us/articles/… 任何人都可以出示一些有效的证书。这个问题是有效的对于哪个域,我的理解是,Full Strict 需要您希望用户看到的同一个域的证书。好几年没用CF了,不知道是不是真的。

以上是关于Heroku + Cloudflare 完全免费的 SSL的主要内容,如果未能解决你的问题,请参考以下文章

Cloudflare + Heroku 与自定义域

使用 CloudFlare、Heroku 和 RoR 时如何设置真实 IP 地址?

Cloudflare 上的 Heroku 自定义域:重定向过多

在 Heroku 上托管时,Selenium 应用程序重定向到 Cloudflare 页面

cloudflare 免费版能用多久

国外免费CDN CloudFlare申请教程