Nodejs: Error: certificate signature failure

Nodejs: Error: certificate signature failure

当我们尝试与服务器建立 TLS 连接时,我们得到 Error: certificate signature failure。在我们的例子中,服务器是 运行 openldap。我们如何调试它?

我们的客户端代码是here

服务器日志为 here

代码输出为

Client error { Error: certificate signature failure
    at TLSSocket.<anonymous> (_tls_wrap.js:1116:38)
    at emitNone (events.js:106:13)
    at TLSSocket.emit (events.js:208:7)
    at TLSSocket._finishInit (_tls_wrap.js:643:8)
    at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:473:38) code: 'CERT_SIGNATURE_FAILURE' }

我们检查了证书签名是否正确

root@fcaf052d50fc:/container/service/slapd/assets/certs# openssl verify -CAfile jnj-ca-chain.pem jnj-ldap-server-tls.pem
jnj-ldap-server-tls.pem: OK

在调试器中,我们已经能够单步执行代码,直到 _tls_wrap.js 第 1116 行:

var verifyError = socket._handle.verifyError();

这是它失败的地方,我们无法进入上述方法。做一些搜索带来 this

tcpdump 显示我们似乎正在从服务器获得预期的证书:

所以这非常奇怪:

  1. openssl 验证通过
  2. 客户端似乎正在从服务器获取证书。
  3. 但是nodejs验证失败。

我们使用

调试了这个
$ openssl s_client -connect localhost:636 -state -nbio -CAfile jnj-ca-chain.pem -showcerts

这表明返回给客户端的 TLS 证书与提供给服务器的证书不同(可能是 GnuTLS [1] 中的错误)