javascript - Socket.io 聊天服务器不提供 SSL 证书

标签 javascript node.js ssl websocket socket.io

(简单的)聊天是我不久前创建的应用程序的一部分。今天我将网站从 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 参数?

我的 Node 服务器(简化):

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 不提供证书?

最佳答案

正如您在 docs 中看到的那样Listen是Server类的实例方法。 首先实例化 https 服务器,为其附加证书,然后将其传递给 Server() 构造函数。

var https = require('https');
var fs = require('fs');

var options = {
  key: fs.readFileSync('~/.certs/my-sub.key'),
  cert: fs.readFileSync('~/.certs/my-sub.crt')
};

var app = https.createServer(options);
var io = require('socket.io')(app);

app.listen(1337);

有记录的使用 socket.io 本身描述的启动服务器的能力 here .可以传递给io的选项Server()方法列于 engine.io docs 。您似乎无法为其附加证书。

关于javascript - Socket.io 聊天服务器不提供 SSL 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31292437/

相关文章:

javascript - 无法获取要清除的文件类型输入

c# - 禁用/启用数据列表复选框上的外部 asp 按钮控件选中 javascript?

node.js - Mocha如何在没有pha​​ntomjs的情况下进行DOM测试

eclipse - 如何设置nodejs Debug模式不听127.0.0.1

sql-server - SQL SERVER 中的可信证书

ssl - 在 Weblogic 上启用远程 SSL

javascript - 如何为 div 内的 span 元素添加摇动动画

javascript - 如果 .cgi 已被缓存,IE 从第二次开始不会向 .cgi 发出 GET 请求

node.js - Mongoose 集合没有得到更新

ssl - "man in the middle"攻击 https 可以读取所有通信吗?