添加 SSL 证书

我购买了一个 SSL 证书,并按照以下说明进行操作:

为您的 Discourse Docker 设置启用 SSL / HTTPS - 文档 / 自托管 - Discourse Meta

其中包括将 ssl.key 和 ssl.crt 放在 /var/discourse/shared/standalone/ssl/ 目录中,并将其他模板添加到 app.yml。

网站之前运行得很好,但启用 SSL 后,它就无法访问了,并显示“无法连接”或“找不到服务器”错误。

2024/06/13 09:25:08 [emerg] 5152#5152: cannot load certificate "/shared/ssl/communities-dev.np.norton.com.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no>
2024/06/13 09:25:09 [warn] 5182#5182: the "listen ... http2" directive is deprecated, use the "http2" directive instead in /etc/nginx/conf.d/discourse.conf:60

这是我的 app.yml 文件

##
## 修改此文件后,您必须重建
## /var/discourse/launcher rebuild app
##
## 请*极其小心地编辑*!
## YAML 文件对空格或对齐错误非常非常敏感!
## 如有需要,请访问 http://www.yamllint.com/ 来验证此文件

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  ## 取消注释下一行以启用 IPv6 监听器
  #- "templates/web.ipv6.template.yml"
  - "templates/web.ratelimited.template.yml"
  ## 如果您想添加 Let's Encrypt (https),请取消注释这两行
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

## 此容器应暴露哪些 TCP/IP 端口?
## 如果您希望 Discourse 与 Apache 或 nginx 等其他 Web 服务器共享端口,
## 请参阅 https://meta.discourse.org/t/17247 获取详细信息
expose:
  - "80:80"   # http
  - "2222:22"
  - "443:443" # https


   ## 此 Discourse 实例的 HTTP 或 HTTPS CDN 地址(配置为拉取)
  ## 请参阅 https://meta.discourse.org/t/14857 获取详细信息
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

  ## 此 Discourse 实例的 MaxMind 地理位置 IP 账户 ID 和许可证密钥
  ## 请参阅 https://meta.discourse.org/t/-/173941 获取详细信息
  #DISCOURSE_MAXMIND_ACCOUNT_ID: 123456
  #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456
  DISCOURSE_USE_SSL: true
  DISCOURSE_SSL_CERTIFICATE_PATH: /var/discourse/shared/standalone/ssl/domain-name.cer
  DISCOURSE_SSL_KEY_PATH: /var/discourse/shared/standalone/ssl/domain-name.key
  DISCOURSE_SSL_CA_PATH: /var/discourse/shared/standalone/ssl/intermediate.cer

## Docker 容器是无状态的;所有数据都存储在 /shared 中
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

有人能帮忙吗?

如果你没有使用 Let’s Encrypt,则不应启用此模板。
证书路径将会被更改。

你是否有不使用默认 Let’s Encrypt 证书的特定原因?这样会容易得多。

我的团队给了我一个来自 digicert 的 SSL 证书,我将该证书、私钥和中间证书添加到了这个位置 /var/discourse/shared/standalone/ssl。
我还对 app.yml 文件做了一些更改,我已将其添加到帖子中。
我想我在这里遗漏了很多东西,你能澄清一下我做错了什么吗?我愿意接受任何解决方案。

为什么?

您是否位于防火墙后面?如果不是,标准的安装将获得免费证书并且可以正常工作。