由于Heroku是只读的并且不允许使用sudo,我需要做些什么才能在我们的应用程序的服务器上安装LetsEncrypt.org证书?
如果我已经设置了config.force_ssl = true
那么重要吗?
答案 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的等价物应该很容易。 欢迎拉请求帮助他人!