在过去的5天里,我的应用日志中出现了很多奇怪的错误。这是堆栈跟踪:
Error: 140428615087936:error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca:../deps/openssl/openssl/ssl/s3_pkt.c:1234:SSL alert number 48
at CleartextStream._pusher (tls.js:674:24)
at SlabBuffer.use (tls.js:217:18)
at CleartextStream.CryptoStream._push (tls.js:501:33)
at SecurePair.cycle (tls.js:898:20)
at EncryptedStream.CryptoStream.write (tls.js:285:13)
at Socket.ondata (stream.js:38:26)
at Socket.EventEmitter.emit (events.js:96:17)
at TCP.onread (net.js:397:14)
所有这些错误都是一样的。 Node.js版本是0.8.24。 有谁知道为什么会发生这种情况?
答案 0 :(得分:0)
我们已经解决了这个问题。之所以发生这种情况,是因为我们的其他API服务器上的SSL证书中存在轻微的错误配置(与node.js交谈)。
要检查您的SSL配置,您可以使用SSL实验室的one service。在我们的案例中有这个警告(链条问题不完整):
要解决此问题,您应该执行以下操作(摘自nginx docs):
有些浏览器可能会抱怨由知名人士签名的证书 证书颁发机构,而其他浏览器可以接受证书 没有问题。发生这种情况是因为签发机构签署了 使用不是的中间证书的服务器证书 出现在知名可信证书的证书基础上 与特定浏览器一起分发的权限。在这 在这种情况下,权威机构提供了一系列链式证书 应该连接到签名的服务器证书。服务器 证书必须出现在链接证书之前 合并文件:
$ cat www.example.com.crt bundle.crt > www.example.com.chained.crt
生成的文件应该在ssl_certificate指令中使用:
server { listen 443 ssl; server_name www.example.com; ssl_certificate www.example.com.chained.crt; ssl_certificate_key www.example.com.key; ... }
关键部分是证书文件的连接。在我们进行了更改后,node.js应用程序中的错误消失了。