gpt4 book ai didi

node.js - 如何在 Heroku Node Express 应用程序中使用 LetsEncrypt SSL 证书?

转载 作者:IT老高 更新时间:2023-10-28 23:10:00 26 4
gpt4 key购买 nike

我有一个在 Heroku 上运行的 Node Express 应用程序,我想使用 LetsEncrypt 的免费 SSL 证书对其进行加密。但是,我看到的方法需要打开端口 443 和 80 以允许 ACME 进程工作。

Heroku 只给你一个端口,不让你选择哪个端口。那么如何使用 LetsEncrypt?

我昨天花了很多时间解决这个问题。很久以来第一次在 StackOverflow 上对我想做的事情没有答案!

最佳答案

更新:

Heroku 现在原生支持 LetsEncrypt!因此不再需要此解决方法。

这里的说明:

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

对于新应用,您无需执行任何操作,默认情况下已开启。对于 2017 年 3 月 21 日之前创建的应用程序,您可以使用以下 Heroku cli 命令将其打开:heroku certs:auto:enable

感谢@西类牙火车


背景

理想情况下,LetsEncrypt 允许自动证书更新过程。这在 Heroku 上更难做到,所以这个答案描述了如何使用手动过程。使用 Heroku 环境变量,您将能够相当容易地手动更新您的证书 - 无需更改代码。

这个答案的功劳主要归功于两个不错的博客文章: https://medium.com/@franxyzxyz/setting-up-free-https-with-heroku-ssl-and-lets-encrypt-80cf6eac108e#.67pjxutaw

https://medium.com/should-designers-code/how-to-set-up-ssl-with-lets-encrypt-on-heroku-for-free-266c185630db#.ldr9wrg2j

有一个 GitHub 项目显然支持 Heroku 上的自动证书更新。试用后我会更新这个答案:
https://github.com/dmathieu/sabayon

在 Heroku 上通过 Node Express 应用使用 LetsEncrypt

准备好 Express 服务器:

将此中间件添加到您的 Express 应用中。请务必在任何将 http 重定向到 https 的中间件之前添加它,因为此端点必须是 http。

// Read the Certbot response from an environment variable; we'll set this later:

const letsEncryptReponse = process.env.CERTBOT_RESPONSE;

// Return the Let's Encrypt certbot response:
app.get('/.well-known/acme-challenge/:content', function(req, res) {
res.send(letsEncryptReponse);
});

使用 certbot 创建证书文件:

  1. 启动 certbot:sudo certbot certonly --manual
    出现提示时输入网站网址 (www.example.com)
    certbot 将以
    格式显示挑战响应字符串xxxxxxxxxxxxxxxxxxx.yyyyyyyyyyyyyyyyyyy
    让 CERTBOT 在此状态下等待。请勿按 Enter 键或退出键。
  2. 转到 Heroku 仪表板并查看应用设置:
    https://dashboard.heroku.com/apps/your-heroku-app-name/settings
    在配置变量下,单击“显示配置变量”
    编辑 CERTBOT_RESPONSE 变量的值以匹配步骤 a 中的挑战响应。
  3. 等待 heroku 应用重启。
  4. 通过访问测试设置 http://www.example.com/.well-known/acme-challenge/whatever
    注意 HTTP,不是 HTTPS
    它应该显示挑战响应字符串。如果发生这种情况,请继续下一步。如果没有,请在继续之前尽一切努力让该 URL 返回 CR 字符串,否则您将需要重复整个过程。
  5. 返回 Certbot 并按 Enter 键继续。
    如果一切按计划进行,certbot 将告诉您一切正常并显示创建的证书的位置。您将在下一步中使用此位置。请注意,由于操作系统权限,您可能无法检查文件夹的内容。如果有疑问,sudo ls/etc/letsencrypt/live/www.example.com 查看文件是否存在。

更新 Heroku 实例以使用新证书:

如果您的网站没有证书,请运行 heroku certs:add。如果要更新,请运行 heroku certs:update
sudo heroku certs:update --app your-heroku-app-name/etc/letsencrypt/live/www.example.com/fullchain.pem/etc/letsencrypt/live/www.example.com/privkey.pem

关于node.js - 如何在 Heroku Node Express 应用程序中使用 LetsEncrypt SSL 证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40199580/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com