Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Socket.io聊天服务器不提供SSL证书_Javascript_Node.js_Ssl_Websocket_Socket.io - Fatal编程技术网

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

Javascript Socket.io聊天服务器不提供SSL证书,javascript,node.js,ssl,websocket,socket.io,Javascript,Node.js,Ssl,Websocket,Socket.io,(简单的)聊天是我不久前创建的应用程序的一部分。今天我将把网站从http切换到https。因此,我还必须SSL我的Socket.io聊天套接字,否则浏览器会抱怨 由于某种原因,我的聊天服务器根本没有提供任何证书。在linux上使用openssl证实了这一点: openssl s_client -connect my.subdomain.tld:1337 -servername my.subdomain.tld -ssl3 返回 CONNECTED(00000003) 1401360576530

(简单的)聊天是我不久前创建的应用程序的一部分。今天我将把网站从http切换到https。因此,我还必须SSL我的Socket.io聊天套接字,否则浏览器会抱怨

由于某种原因,我的聊天服务器根本没有提供任何证书。在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参数

我的节点服务器(简化):

证书确实存在于该位置,并且它们是有效的(双重检查)。我如何进行调试?为什么Socket.IO不提供证书?

正如您在listen中看到的,它是服务器类的实例方法。 首先实例化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本身启动服务器的功能,如所述。中列出了可以传递给io方法的选项。您似乎无法将证书附加到它。

可能的重复:将socket.io保留在像nginx这样的实际Web服务器后面不是更容易吗?让nginx处理证书。否。我不想为聊天服务器设置Web服务器。哈,很有趣!但它是有效的!非常感谢,非常感谢:)让我开始了-但是如果有人也需要express-看看…本质上是:https.createServer(凭证选项,express应用程序)
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);