如何在Heroku上安装LetsEncrypt SSL证书

时间:2016-04-25 21:40:32

标签: ruby-on-rails ruby-on-rails-4 heroku lets-encrypt

由于Heroku是只读的并且不允许使用sudo,我需要做些什么才能在我们的应用程序的服务器上安装LetsEncrypt.org证书?

如果我已经设置了config.force_ssl = true那么重要吗?

6 个答案:

答案 0 :(得分:4)

我在这里的第一个答案中阅读了博客文章,但我不想用ACME网址污染我的代码库。逻辑。所以我做了类似的事情,但使用了DNS域验证...

使用certbot,将DNS指定为首选挑战:

sudo certbot certonly --manual --preferred-challenges dns

经过几次提示后,certbot会告诉您保留DNS TXT记录以验证您的域名:

Please deploy a DNS TXT record under the name
_acme-challenge.www.codesy.io with the following value:

CxYdvM...5WvXR0

Once this is deployed,
Press ENTER to continue

您的域名注册商可能拥有自己的部署TXT记录的文档。这样做,然后返回到certbot并按ENTER键 - 让我们加密将检查TXT记录,签署证书,certbot将保存它以便您上传到heroku。

See my own blog post for more detail

以下是两个可用于自动化流程的bash功能

function makessl {
    sudo certbot certonly --manual --rsa-key-size 4096 --preferred-challenges dns -d ${1}
    sudo heroku certs:add --type=sni /etc/letsencrypt/live/${1}/fullchain.pem /etc/letsencrypt/live/${1}/privkey.pem
}

function renewssl {
    sudo certbot certonly --manual --rsa-key-size 4096 --preferred-challenges dns -d ${1}
    sudo heroku certs:update /etc/letsencrypt/live/${1}/fullchain.pem /etc/letsencrypt/live/${1}/privkey.pem
}
  

他们对域名进行争论,只要您在heroku app folder内运行,就不必指定--app NAME

     

示例: makessl www.domain.com

     

示例: renewssl www.domain.com

结合这是@Eric的答案,你很高兴:

heroku certs:auto:enable

答案 1 :(得分:4)

仅供参考,Heroku现在提供自动证书管理w / Let加密,如果您运行付费dyno。您可以使用以下命令启用它:

heroku certs:auto:enable

更多信息:

https://devcenter.heroku.com/articles/automated-certificate-management

答案 2 :(得分:1)

编辑:此答案不再适用。

它是在Heroku实现对LetsEncrypt的本机支持之前编写的。留下余子给后人,但这不再是必要的。立即使用@Eric's answer

安装初始证书

您可以在手动模式下使用certbot生成质询响应,修改站点以返回响应,然后最终完成certbot手动过程。

See this blog post by Daniel Morrison,或下面的证书更新下的链接答案,了解更多详情。

证书更新

正如@Flimm提到的那样,正如链接博客文章中提到的那样,你必须每3个月更新一次,直到Heroku为LetsEncrypt提供更好的支持。您可以使用环境变量使该过程更顺畅(无需更改代码),如本答案中所述(Node / Express,但概念相同):https://stackoverflow.com/a/40199581/37168

沙芭央

有一个GitHub项目可以通过设置Heroku环境变量来自动完成所有这些。这是一个小型的webapp,你安装为另一个Heroku应用程序,反过来配置你的主要应用程序。我还没有尝试过,但我打算下次使用它而不是更新我的证书:https://github.com/dmathieu/sabayon

答案 3 :(得分:0)

Heroku的default recommendation是使用服务器名称指示的SSL (SNI),这是免费的。由于您已经获得了证书和密钥,因此可以通过以下方式添加它们:

heroku certs:add <cert>.pem <key>.key

如果您需要支持不支持SNI的旧版浏览器客户端,请使用价格为20美元/月的Herkou SSL Endpoint插件:

通过运行

添加该插件
heroku addons:create ssl:endpoint

然后添加您的LetsEncrypt.org证书:

heroku certs:add <cert>.pem <key>.key

答案 4 :(得分:0)

最好的方法是将新的ssl域(以https开头)分配给您的域,该域自动覆盖非http域

答案 5 :(得分:0)

我创建了一个certbot插件,它使用Heroku CLI自动验证和安装Let的加密证书:https://github.com/gboudreau/certbot-heroku

我只有一个使用php-nginx Heroku buildpack的例子,但阅读该示例并找到其他buildpack的等价物应该很容易。 欢迎拉请求帮助他人!