繁体   English   中英

如何在Heroku上安装LetsEncrypt SSL证书

[英]How do you install a LetsEncrypt SSL Certificate on Heroku

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

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

我在这里的第一个答案中阅读了博客文章,但我不想用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。

有关详细信息,请参阅我自己的博文


以下是两个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

仅供参考,Heroku现在提供带有Let's Encrypt的自动化证书管理,如果您运行付费dyno。 您可以启用它:

heroku certs:auto:enable

更多信息:

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

编辑:此答案不再适用。

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


安装初始证书

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

有关详细信息,请参阅Daniel Morrison撰写的此博客文章 ,或下面的证书更新下的链接答案。

证书更新

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

沙巴翁

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

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

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

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

通过运行添加该插件

heroku addons:create ssl:endpoint

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM