SSL证书Socket.io

我已经创build了自己的Livechat,它工作正常,但是在我试图添加我的SSL证书后,它不能正常工作了。

我尝试了不同的代码。

var fs = require('fs'); var express = require("express"); var options = { key: fs.readFileSync('ca.key'), cert: fs.readFileSync('ca.crt') }; var expres = express() , app = require('https').createServer(options, expres) , io = require('socket.io').listen(app, { }); app.listen(8080); 

 var fs = require('fs'); var express = require("express"); var options = { key: fs.readFileSync('ca.key'), cert: fs.readFileSync('ca.csr'), ca: fs.readFileSync('ca.crt'), requestCert: true, rejectUnauthorized: false }; var expres = express() , app = require('https').createServer(options, expres) , io = require('socket.io').listen(app, { }); app.listen(8080); 

这三个文件与内容一起存在。 (ca.key,ca.csr和ca.crt)

有时我得到一个107(ERR_SSL_PROTOCOL_ERROR)或有时服务器甚至不启动。

谢谢,

如果您检查https服务器API http://nodejs.org/api/https.html#https_class_https_server 。 你会发现它是tls.Server的一个子类

 Class: https.Server This class is a subclass of tls.Server and emits events same as http.Server. 

在检查tls.server API http://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener时,您会看到tls或https服务器需要什么:

 key: A string or Buffer containing the private key of the server in PEM format. (Required) cert: A string or Buffer containing the certificate key of the server in PEM format. (Required) 

既然你只用了上面两个例子。 您应该使用所需的PEM格式进行validation/testing。 您可以使用http://nodejs.org/api/tls.html#tls_tls_ssl中的说明来创build它

 openssl genrsa -out ryans-key.pem 1024 openssl req -new -key ryans-key.pem -out ryans-csr.pem openssl x509 -req -in ryans-csr.pem -signkey ryans-key.pem -out ryans-cert.pem 

在此之后,您可以检查是否有其他select是罪魁祸首,使用上述证书进行testing时将其删除。

 //requestCert: true, //rejectUnauthorized: false