【发布时间】:2015-09-26 08:23:57
【问题描述】:
(简单)聊天是我不久前创建的应用程序的一部分。今天我将网站从http切换到https。因此,我还必须对我的 Socket.io 聊天套接字进行 SSL,否则浏览器会发牢骚。
出于某种原因,尽管我的聊天服务器根本没有提供任何证书。在 linux 上使用 openssl 证实了这一点:
openssl s_client -connect my.subdomain.tld:1337 -servername my.subdomain.tld -ssl3
返回
CONNECTED(00000003)
140136057653064:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:s3_pkt.c:596:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 0 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : SSLv3
Cipher : 0000
Session-ID:
Session-ID-ctx:
Master-Key:
Key-Arg : None
Krb5 Principal: None
PSK identity: None
PSK identity hint: None
Start Time: 1436357417
Timeout : 7200 (sec)
Verify return code: 0 (ok)
---
我显然替换了域。端口实际上是 1337 并且服务器使用 SNI 所以我相信我必须使用 -servername 参数?
我的节点服务器(简化):
var fs = require('fs');
var privateKey = fs.readFileSync('/home/ssl_certificates/my_subdomain_tld.key').toString();
var certificate = fs.readFileSync('/home/ssl_certificates/my_subdomain_tld.crt').toString();
var ca = fs.readFileSync('/home/ssl_certificates/AddTrustExternalCARoot.crt').toString();
var io = require('socket.io').listen(1337, {key: privateKey, cert: certificate, 'ca': ca});
证书确实存在于该位置并且它们是有效的(仔细检查)。我该如何调试呢?为什么 Socket.IO 不提供证书?
【问题讨论】:
-
将socket.io保留在像nginx这样的实际网络服务器后面不是更容易吗?让 nginx 处理证书。
-
没有。我不想为聊天服务器设置网络服务器。
标签: javascript node.js ssl websocket socket.io