SSL 零长度 .cer 文件

您好,

我正在尝试从官方 GitHub 页面安装 Discourse,使用的是 Ubuntu 22.04 Server LTS,从最新的 AWS AMI 部署。网络已配置好,并已将 FQDNS 附加到主机和弹性 IP。

所有部署都正确完成,并且我可以连接到 80 端口的 Nginx 实例。但是,我无法通过 443 端口连接,Nginx error.log 中重复出现的错误如下:

> 2023/10/09 08:41:12 [emerg] 9342#9342: cannot load certificate "/shared/ssl/discourse.xxxx.com.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)

进一步调查发现,.cer 文件的大小为零字节,位于

./shared/standalone/ssl/discourse.XXXX.com.cer

日志文件位置:app:$/var/log/nginx

是否有人遇到过此问题?看起来与权限无关,因为所有操作都是在 sudo 凭据下执行的。

对此我感到非常困惑。

编辑:我尝试删除 /shared/ssl 和 letsencrypt 文件夹,并尝试了重建和重新安装,结果都一样。

您是否运行了 discourse-setup?它会尝试连接到自身以检查 DNS 是否指向服务器以及端口是否打开,但这只是一个粗略的测试。

如果您在未正确配置 DNS 和端口的情况下运行重建(rebuild)超过几次,您将达到 Let’s Encrypt 的速率限制。如果发生这种情况(我怀疑就是这样),您需要等待一周或使用另一个子域(或遵循一些复杂的说明来为所需的子域和另一个子域请求证书)。

我认为如果您运行 docker logs app,您可能会看到 acme 在获取证书时失败的地方。

嗨 Jason,

我也遇到了同样的问题,花了几天时间才弄清楚是什么出了问题以及如何解决。所以,我希望这些信息能帮助你和其他遇到同样问题的人。

在执行 ./discourse-setup 时,我遇到了这个错误:

** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error

在多次尝试修复此错误的过程中,我尝试了以下方法:
我运行了 ./discourse-doctor,但没有成功。
我运行了 ./launcher rebuild app,但没有成功。
我尝试在容器内进行故障排除,方法是:docker exec -it app /bin/bash
容器镜像的工具有限,所以我只是使用此命令读取日志:
less /var/log/nginx/error.log
在这里,我看到了许多包含 [emerg] 2832#2832: cannot load certificate 的消息。
出于某种原因,我找不到问题的根源,但当我退出容器并从主机键入:
./launcher logs app
我能够看到更多数据,并突然发现了这个错误:
“Error creating new order :: too many certificates (5) already issued for this exact set of domains in the last 168 hours , retry after 2024-08-10T12:58:12Z:”
我搜索了这个问题的解决方法,但决定等到指定的时间。
等待时间结束后,我再次尝试:./launcher rebuild app
这次成功了,SSL 证书(*.cer)已成功创建,我的网站也已上线。

这个故事的寓意是,如果你得到一个空的 *.cer 证书,你需要从主机使用此命令检查容器日志:
root@host:/var/discourse# ./launcher logs app
滚动浏览日志并搜索 “too many certificates”
如果我早知道这一点,就可以节省几天的研究时间 :frowning:

我的回复中做出的假设:

  • 你已确认你的主机已与你的 DNS 提供商正确配置。
  • 你已确认你的注册电子邮件和 SMTP 设置。
  • 你已确认 /var/discourse/containers/app.yml 已正确填充。
1 个赞