heroku:在免费计划上设置 SSL 证书?
Posted
技术标签:
【中文标题】heroku:在免费计划上设置 SSL 证书?【英文标题】:heroku: set SSL certificates on Free Plan? 【发布时间】:2019-02-10 14:59:24 【问题描述】:我想为我在 heroku 上的一个应用程序(一个基于 nodeJS + Vue 的简单应用程序)设置一些 SSL 证书。
我知道如果我升级到爱好计划(每月 7 美元),我可以自动获得它。
但是现在测试应用程序的钱太多了,所以我想知道我是否也可以通过免费计划实现一些类似的目标。
所以: 是否可以使用免费计划为 Heroku JUST 上的应用程序设置 SSL 证书? 也许通过 CLI 以一种复杂/棘手的方式?
从 Heroku 页面和文档看来这是不可能的。 但我不得不问:)
【问题讨论】:
这个问题将变得更加重要,因为“从 2021 年 1 月 11 日开始,用于在 Heroku 上终止 TLS/HTTPS 的自动生成的证书(使用 Heroku ACM)将与之前在 android 版本上运行的大多数软件不兼容到 v.7.1.1(大约 34% 目前活跃的 Android 设备)。” @stellavalerio 请接受我的回答。这是最高的投票,你也因此获得了金徽章。得到我的回答后,*** 会推荐给更多人。 【参考方案1】:这里我有一个更好的方法来处理这个问题。由于 Heroku 不提供免费 SSL 计划。 但是您可以使用提供免费 SSL 的 Cloudflare。 您可以使用 Cloudflare 作为 SSL 的桥梁。
要求:
-
Cloudflare 帐户
您的应用程序不应具有内置 SSL 重定向(如 redirect-ssl)
否则,这将导致 Too Many Redirect Error
第 1 步:将您的域指向 CloudFlare。您基本上打开一个帐户并在出现提示时输入您的域。您可能会收到更改域名服务器的说明。
第二步:在 Cloudflare 的 DNS 中添加 Heroku 服务器的 Cname 记录。说明是here 在这里你会遇到一些 SSL 安全问题。
第 3 步:现在将您的 SSL/TLS 加密模式更改为灵活(非完整)。 *重要的
现在了解工作原理:-
客户端(浏览器)向https://example.com发出请求 首先,请求通过 SSL 到达 Cloudflare。 (用户看到与服务器的加密连接。)
然后 Cloudflare 使用非 SSL(非 Https 和未加密)向 Heroku Server(Origin) 发出请求。
然后 Heroku Server (Origin) 将带有非 SSL 的响应返回给 Cloudflare。
最后,Cloudflare 将请求转发给客户端(浏览器)。
你可能会想,只加密半个系统有什么好处。 但“有总比没有好”。
你来到这里是因为你不想在 heroku 付费测功机上花钱。
这种方法更适合那些使用http的人。至少它保护了最脆弱的一面(客户端)。大多数攻击发生的地方。 cloudflare 和您的服务器之间受到攻击的可能性非常小。因为网络覆盖范围。
具有更小的易受攻击概率优于 100% 易受攻击的系统
我已经测试过这种方法并正在使用https://www.auedbaki.com
【讨论】:
我相信您需要使用 Cloudflare 的 DNS 才能使其工作,但它非常易于使用,并且它们支持 CNAME 扁平化,因此您可以使用 CNAME 将您的根域指向 Heroku 站点。这对我很有用,谢谢! @Ungapps 网站正在运行。没有流量时,网站可能会进入睡眠状态。所以响应需要时间。 为了获得更好的结果,请在边缘证书选项卡中设置“始终使用 HTTPS”。您也可以使用子域进行 SSL。 为什么你只想加密请求到服务器的一半路由?让您的用户在他们的浏览器中看到一个绿色的锁并认为您的网站是安全的?不酷... @michio1234 最好在浏览器中显示不安全警告。我们知道这根本不是好的做法。但这是不花一分钱即可获得免费 ssl 的唯一方法。【参考方案2】:响应迟了,但我在这里添加了我刚刚花了一个小时尝试使用 Heroku 设置 SSL - 导致死胡同。
底线是 Heroku 提到他们提供免费 SSL 证书,但 事实并非如此,除非您有爱好(7 美元/月)或专业计划。
This link 有更多详细信息和来自面临相同问题的其他用户的反馈。
上面关于 LetsEncrypt 的答案不正确。虽然您可以获得免费证书,但它不能包含在免费的 Heroku 应用程序中。
其他用户已通过分步指南指向 this article,但该指南已过时,并且提到的“实验室”选项不再适用于 Heroku。
请参阅下面的 cmets 以获得一些替代建议
在我的具体情况下,我能够在 zeit 上获得免费 SSL。
【讨论】:
感谢 alphazeta 的回答。这几个月我也得出了同样的结论:不可能。悲伤但真实。但是我将我的项目重新安排为带有一些服务的静态页面,现在我不再需要 Heroku。经验教训:) 您最终使用了什么服务?让我知道,以便我可以在上面的答案中包含作为将来参考的建议。 好吧,我完全改变了我的堆栈。我的主应用程序现在是一个静态网站,现在托管在 Zeit (zeit.co) 上。在这里,我可以拥有免费的 SSL 和自定义域。所以 SSL 问题解决了。对于我需要的服务器功能(联系表格),现在我的静态网站使用另一个节点应用程序,通过 ajax 托管在 Heroku 上。 显然Vercel.com 收购了 Zeit。我在 Vercel.com 中找不到任何 SSL 服务【参考方案3】:以下是使用Cloudflare 免费获得完整 SSL 的方法。
第 1 步:将您的域指向 CloudFlare。您基本上打开一个帐户并在出现提示时输入您的域。您可能会收到更改域名服务器的说明。
第二步:在 Cloudflare 的 DNS 中添加 Heroku 服务器的 Cname 记录。说明是here。在这里你会遇到一些 SSL 安全问题。
第 3 步:现在将您的 SSL/TLS 加密模式更改为完全
第 4 步:在您的 DNS 设置中,您需要创建一个 CNAME:yourdomain.com -> yourapp.herokuapp.com。
(我在这里了解了一般方法https://mikecoutermarsh.com/adding-ssl-to-heroku-with-cloudflare/ 虽然它很旧,但它仍然有效。
【讨论】:
如何调整www重定向? 可悲(新):“当应用迁移到新的基础架构时,其默认的 appname.herokuapp.com、DNS 记录和任何 haiku.herokudns.com 自定义域记录都被修改为指向新路由基础设施的 IP 地址。在 24-48 小时内,应用程序可通过新路由基础设施和旧路由基础设施访问。迁移完成后,应用程序将不再可通过旧路由基础设施访问,所有流量必须通过新的基础架构。发送到旧基础架构的应用请求将导致错误代码:H31 Misdirected Request。" 这比投票最多的答案更有意义。我唯一担心的是 - 让 CloudFlare 查看未加密用户的数据是否安全?【参考方案4】:我也有这个问题。我想在 Heroku 上为我的 React 应用程序的免费帐户设置一个自定义域。我在网上搜索了很多信息,并阅读了 Heroku 支持的大量文档。
结论是,在Heroku免费账户上,无法设置带有SSL证书的自定义域名。如果您需要使用自定义域名的 SSL,则需要升级到他们的任何付费托管帐户。
只要不使用自定义域名,Heroku 就会为其免费帐户提供 SSL 证书。因此标准的免费帐户 URL 将类似于“https://your-app-name.herokuapp.com”
注意。 Google Firebase 允许使用 SSL 的 free hosting and Custom Domain name,在 charging 之前达到一定数量的流量。对于测试应用程序,这将是一个完美的选择。我正在使用它。而且很容易设置我的自定义域。
我希望这可以为您节省数小时的搜索时间。
【讨论】:
【参考方案5】:由于您没有明确说明是否需要将 SSL 证书应用于自定义域,我认为根据 Heroku 文档有必要这样说:
使用免费 dynos 的应用可以使用 *.herokuapp.com 证书,如果他们 需要 SSL。
https://devcenter.heroku.com/articles/ssl
也许未来的读者会发现这个答案很有帮助......
【讨论】:
【参考方案6】:如果你正在使用
1]免费的heroku,
您不能使用 1) 免费 ssl 或 2) 付费 ssl
2]付费heroku
1) 你可以获得免费的 ssl 2) 你也可以使用付费的 ssl
解决方案 1]获得报酬heroku 2]转移到netlify或其他替代品
【讨论】:
【参考方案7】:Heroku 中不存在免费 SSL,或者我只想说,通过免费计划是不可能实现的。
为了让您能够在 Heroku 中包含任何形式的第三方 SSL,无论是付费 SSL 还是免费第三方 SSL,您必须更改为 Hobby 或 Professional dynos 才能使 SSL 工作。
一个更简单的选择,如果您使用 Heroku,则无需购买第三方 SSL。只需更改为 Hobby 或 Professional dynos。
为了让您能够更改测功机类型,请选择您的应用,转到上部的来源部分,就在下面,点击更改测功机类型按钮。
Hobby Dyno 每月花费 7 美元,Professional Dyno 每月花费 25 - 500 美元。
毕竟,记得转到您的 Rails 应用程序: 去; .../config/environments/production.rb
--> 取消注释以下行:
# config.force_ssl = true
---> 收件人:
config.force_ssl = true
之后,您将能够获得 SSL但不是免费的。
【讨论】:
【参考方案8】:如果您不介意将前端托管在其他服务上,您可以使用免费 SSL 将其托管在 Vercel 中,同时将后端保留在 Heroku。很简单!
https://vercel.com/
【讨论】:
【参考方案9】:解决此问题的一种方法是在您可以设置 SSL 证书的主机上设置代理服务器,然后简单地将请求转发到使用加密的免费 herokudns 域。
你必须有一个单独的服务器,运行 nginx 或 httpd 之类的东西。我不确定托管代理的免费服务,但通常当你注册一个域时您可能会获得一个托管插件,或者人们可能已经可以访问加密主机并且只想将 Heroku 也用于他们的节点应用程序。
设置一个 httpd 代理看起来有点像这样(来自https://serverfault.com/questions/84821/apache-proxypass-with-ssl):
<VirtualHost 1.2.3.4:80>
ServerName customdomain.com
SSLProxyEngine On
SSLProxyCheckPeerCN on
SSLProxyCheckPeerExpire on
ProxyPass / https://heroku-app-name.herokuapp.com
ProxyPassReverse / https://heroku-app-name.herokuapp.com
</VirtualHost>
这样你就一路全加密了:)
【讨论】:
【参考方案10】:实际上,这是一个问题,而不是一个答案。有人试过ZeroSSL吗?它提供免费的 SSL,这里是an installation guide for Heroku。但是,SSL Endpoint 显然已被 Heroku 弃用且不推荐,它似乎是 Heroku 的付费插件。
$ cat example.crt ca_bundle.crt certificate.crt
我无法理解帮助中的这一行。也许,>
不见了?当我只有以下文件时,example.crt
来自哪里?
或者Heroku SSL 可以接受 ZeroSSL 颁发的 SSL 证书吗?
【讨论】:
以上是关于heroku:在免费计划上设置 SSL 证书?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Heroku Node Express 应用程序中使用 LetsEncrypt SSL 证书?