我有一个nodejs客户端和服务器通过https进行交互。我有自签名证书颁发机构,服务器证书和几个测试客户端证书。我已经使用openssl s_server和s_client测试了证书的“工作”,使用自签名证书的必要命令行选项,并且没有生成错误。
当客户端通过https连接到服务器时,服务器会立即生成错误,指出它无法获得对等证书:
`Error: 140735833322304:error:140890C7:SSL routines:ssl3_get_client_certificate:peer did not return a certificate:../deps/openssl/openssl/ssl/s3_srvr.c:3330:`
在客户端上,错误是:
`{ Error: socket hang up
at TLSSocket.onConnectEnd (_tls_wrap.js:1073:19)
at Object.onceWrapper (events.js:322:30)
at emitNone (events.js:120:20)
at TLSSocket.emit (events.js:218:7)
at endReadableNT (_stream_readable.js:1054:12)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickCallback (internal/process/next_tick.js:180:9)
code: 'ECONNRESET',
path: null,
host: 'localhost',
port: 443,
localAddress: undefined }`
`140735833322304:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:../deps/openssl/openssl/ssl/s3_pkt.c:1494:SSL alert number 40`
`140735833322304:error:140940E5:SSL routines:ssl3_read_bytes:ssl handshake failure:../deps/openssl/openssl/ssl/s3_pkt.c:1217:
`
然而,URL的处理程序执行并调用req.socket.getPeerCertificate()并且已明确发送客户端证书:
`{ subject:
{ C: 'US',
ST: 'MA',
L: 'Boston',
O: 'Example Co',
OU: 'techops',
CN: 'client2',
emailAddress: 'certs@example.com' },
issuer:
{ C: 'US',
ST: 'MA',
L: 'Boston',
O: 'Example Co',
OU: 'techops',
CN: 'ca',
emailAddress: 'certs@example.com' },
modulus: 'B97D65....etc....}`
当客户端确实发送了证书时,为什么会出现这些错误?
任何帮助都将不胜感激。
答案 0 :(得分:0)
看起来我有两个问题。首先,我仍然能够阅读证书的原因是因为在不知不觉中代码中的其他地方发出了第二个https get请求。
其次,当证书被发送时,客户端不发送证书的错误有点错过,最终是服务器用来验证客户端的不适当的CA链。
感谢您的帮助