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 显示我们似乎正在从服务器获得预期的证书:
所以这非常奇怪:
- openssl 验证通过
- 客户端似乎正在从服务器获取证书。
- 但是nodejs验证失败。
我们使用
调试了这个
$ openssl s_client -connect localhost:636 -state -nbio -CAfile jnj-ca-chain.pem -showcerts
这表明返回给客户端的 TLS 证书与提供给服务器的证书不同(可能是 GnuTLS [1] 中的错误)
当我们尝试与服务器建立 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 显示我们似乎正在从服务器获得预期的证书:
所以这非常奇怪:
- openssl 验证通过
- 客户端似乎正在从服务器获取证书。
- 但是nodejs验证失败。
我们使用
调试了这个$ openssl s_client -connect localhost:636 -state -nbio -CAfile jnj-ca-chain.pem -showcerts
这表明返回给客户端的 TLS 证书与提供给服务器的证书不同(可能是 GnuTLS [1] 中的错误)