想知道关于中间证书和 Weechat 的一些事情

想知道关于中间证书和 Weechat 的一些事情

我家里有一台私人服务器,运行着一个 node.js 实例和 weechat。我还有自己的域名,是在 EuroDNS 注册的,还有一个 AlphaSSL 证书,也是从 EuroDNS 获得的。

Weechat 的中继协议和 node.js 都设置为使用 TLS(node.js 配置为拒绝 HTTP 请求,只允许 HTTPS)。奇怪的是,我可以使用任何 HTTPS 客户端通过 HTTPS 访问 node.js 服务器,没有任何问题。openssl s_client也运行良好。然而,Weechat 的中继协议却不行。出于某种原因,当我尝试打开 TLS 套接字时,中间 EuroDNS AlphaSSL CA 证书似乎没有正确发送,因为客户端报告错误,他们无法验证我的域的证书。更奇怪的是,浏览器似乎没有这个问题,因为发光熊(HTML5 WeeChat 中继客户端)没有这个问题。

我必须手动复制中间 CA 证书 .crt 文件,/usr/share/ca-certificates然后运行dpkg-reconfigure ca-certificates才能打开到 Weechat 中继的 TLS 套接字。

我曾经openssl s_client -connect获取过一些信息。以下是我访问 node.js 服务器时发生的情况(出于隐私原因略作修改):

CONNECTED(00000003)
depth=2 C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA
verify return:1
depth=1 C = BE, O = GlobalSign nv-sa, CN = AlphaSSL CA - SHA256 - G2
verify return:1
depth=0 C = DE, OU = Domain Control Validated, CN = example.com
verify return:1
---
Certificate chain
 0 s:/C=DE/OU=Domain Control Validated/CN=example.com
   i:/C=BE/O=GlobalSign nv-sa/CN=AlphaSSL CA - SHA256 - G2
 1 s:/C=BE/O=GlobalSign nv-sa/CN=AlphaSSL CA - SHA256 - G2
   i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
---

如果我尝试打开到 Weechat 中继的 TLS 套接字,则会发生以下情况:

CONNECTED(00000003)
depth=0 C = DE, OU = Domain Control Validated, CN = example.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 C = DE, OU = Domain Control Validated, CN = example.com
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
 0 s:/C=DE/OU=Domain Control Validated/CN=example.com
   i:/C=BE/O=GlobalSign nv-sa/CN=AlphaSSL CA - SHA256 - G2
---

如果我没看错的话,Weechat 显然不会发送中间证书,而 node.js 会。这可能不是浏览器的问题,因为它附带了中间证书。这也解释了为什么当我将中间 AlphaSSL 证书添加到系统证书中时,连接到中继的问题就消失了。

我的假设正确吗?这是否意味着 Weechat 有错误?我对 CA、证书等还不太熟悉,所以我仍在学习这些东西。

答案1

当然,在发布问题后不久,我就找到了答案。我仍然将其保留在这里,以便其他人可以从中学习。

答案是,我添加到 weechat 的 .pem 文件确实将两个证书链接在一起,但出现了错误 - 由于未知原因,那里的中间证书无效。我用 重新创建了链接的 .pem 文件cat my-domain.x509.crt intermediate.crt my-domain.priv.key > relay.pem,现在它工作正常。

相关内容