Node.js:错误:证书签名失败

时间:2019-04-18 22:45:57

标签: node.js tls1.2

当我们尝试建立与服务器的TLS连接时,会得到<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone-with-data-2012-2022.min.js"></script>。在我们的例子中,服务器正在运行openldap。我们该如何调试呢?

我们的客户代码为here

服务器日志为here

代码输出为

Error: certificate signature failure

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

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' }

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

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

enter image description here

这是失败的地方,我们无法进入上述方法。进行搜索带来了this

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

enter image description here

所以这非常奇怪:

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

1 个答案:

答案 0 :(得分:0)

我们使用

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

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