我想为我在Heroku上的一个程序(基于nodeJS+Vue的简单应用)设置一些SSL证书。
我知道如果升级到Hobby计划(每月7美元),它可以自动完成。
但现在对于一个测试应用来说,这太贵了,所以我想知道是否可以通过免费计划实现类似的目标。
那么: 在Heroku上仅使用免费计划是否可能为应用设置SSL证书? 也许可以通过CLI的复杂/棘手方式实现吗?
从Heroku的页面和文档中看起来似乎不可能。 但我还是要问一下 :)
我想为我在Heroku上的一个程序(基于nodeJS+Vue的简单应用)设置一些SSL证书。
我知道如果升级到Hobby计划(每月7美元),它可以自动完成。
但现在对于一个测试应用来说,这太贵了,所以我想知道是否可以通过免费计划实现类似的目标。
那么: 在Heroku上仅使用免费计划是否可能为应用设置SSL证书? 也许可以通过CLI的复杂/棘手方式实现吗?
从Heroku的页面和文档中看起来似乎不可能。 但我还是要问一下 :)
这里有一个更好的解决方案。由于Heroku免费计划不提供SSL,您可以使用Cloudflare提供的免费SSL。您可以将Cloudflare用作SSL桥接器。
要求:
步骤1:将域名指向CloudFlare。您基本上打开一个帐户并在提示时输入您的域名。您可能会收到更改域名服务器的说明。
步骤2:在Cloudflare的DNS中添加Heroku服务器的Cname记录。说明在此处。这里你会遇到一些SSL安全问题。
步骤3:现在将您的SSL / TLS加密模式更改为Flexible(而非Full)。*重要
现在理解工作原理:
客户端(浏览器)向https://example.com 发出请求。 首先,请求通过SSL到达Cloudflare(用户看到加密连接到服务器)。
然后,Cloudflare使用非SSL(非Https和未加密)向Heroku服务器(Origin)发出请求。
然后,Heroku服务器(Origin)以非SSL形式将响应返回给Cloudflare。
最终,Cloudflare将请求转发给客户端(浏览器)。
你可能会想,仅加密一半的系统有什么好处。但“有总比没有强”。
你来到这里是因为不想花钱购买Heroku付费动力。
这种方法对于那些使用http的人来说更好。至少它保护了最脆弱的一面(客户端)。大多数攻击发生的地方。在Cloudflare和您的服务器之间,攻击的几率非常小。因为网络可达性。
具有较低易受攻击概率比100%易受攻击的系统更好。
我已经测试过这种方法,并且适用于https://www.auedbaki.com
这是如何使用Cloudflare免费获得完整的SSL证书。
步骤1:将您的域名指向CloudFlare。您只需打开一个帐户并在提示时输入您的域名即可。您可能会收到更改域名服务器的说明。由于你没有明确说明是否需要将SSL证书应用于自定义域名,因此我认为有必要根据Heroku文档指出:
使用免费dynos的应用程序如果需要SSL,则可以使用*.herokuapp.com证书。
https://devcenter.heroku.com/articles/ssl
也许未来的读者会发现这个答案有用...
在Heroku中,免费的SSL并不存在,或者说在免费计划中无法实现。
如果您想在Heroku中使用任何第三方的付费SSL证书或免费的第三方SSL证书,您必须更改为Hobby或Professional dynos才能使SSL工作。
如果您正在使用Heroku,则更简单的方法是无需购买第三方SSL证书,只需更改为Hobby或Professional dynos即可。
要更改dyno类型,请选择您的应用程序,转到上部的源部分,在下面,单击更改Dyno类型按钮。
Hobby Dyno每月需要支付7美元,而Professional Dyno每月需要支付25-500美元不等。
完成所有操作后,请记得转到您的Rails应用程序:
前往 .../config/environments/production.rb
--> 取消以下行的注释:
# config.force_ssl = true
---> 至:
config.force_ssl = true
之后,您将能够获得SSL证书但不是免费的。
解决这个问题的一种方法是在可以设置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>
这样你就可以全程加密了 :)
这实际上是一个问题而不是答案。有人尝试过ZeroSSL吗?它提供免费的SSL,这里是Heroku的安装指南。然而,SSL Endpoint 显然已被弃用,并且不被Heroku推荐,它似乎是Heroku的付费插件。
$ cat example.crt ca_bundle.crt certificate.crt
我无法理解帮助文档中的这一行。也许是缺少>
符号?当我只有以下文件时,example.crt
从哪里来?
或者Heroku SSL可以接受由ZeroSSL颁发的SSL证书吗?