【问题标题】:How do you install a LetsEncrypt SSL Certificate on Heroku如何在 Heroku 上安装 LetsEncrypt SSL 证书
【发布时间】:2016-08-19 11:50:20
【问题描述】:

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

如果我已经设置了config.force_ssl = true,这有关系吗?

【问题讨论】:

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


【解决方案1】:

我在这里阅读了第一个答案中的博文,但我不想用 ACME url 和逻辑污染我的代码库。所以我做了类似的事情,但使用了 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 - Let's Encrypt 将检查 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

【讨论】:

  • 这是一个很棒的答案,无需更新response tokens
【解决方案2】:

仅供参考,Heroku 现在提供带有 Let's Encrypt 的自动证书管理,如果您运行付费测功机。您可以通过以下方式启用它:

heroku certs:auto:enable

更多信息:

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

【讨论】:

    【解决方案3】:

    编辑:此答案不再适用。

    它是在 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 环境变量为您自动完成所有这些工作。它是一个小型 Web 应用程序,您可以将其安装为另一个 Heroku 应用程序,然后再配置您的主应用程序。我还没有尝试过,但我打算下次使用它而不是更新我的证书:https://github.com/dmathieu/sabayon

    【讨论】:

      【解决方案4】:

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

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

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

      通过运行添加该插件

      heroku addons:create ssl:endpoint
      

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

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

      【讨论】:

      • 很遗憾,您需要定期手动重做此操作,让我们加密证书仅持续 90 天。
      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

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

        【讨论】:

          猜你喜欢
          • 2018-09-20
          • 1970-01-01
          • 1970-01-01
          • 2021-10-21
          • 1970-01-01
          • 2017-12-18
          • 1970-01-01
          • 1970-01-01
          • 2017-03-05
          相关资源
          最近更新 更多