我已经创建了自己的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),或者有时服务器甚至没有启动。
谢谢,
答案 0 :(得分:4)
如果您查看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格式验证/测试它。您可以使用此处http://nodejs.org/api/tls.html#tls_tls_ssl
中给出的说明创建它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
在此之后,您可以检查其他选项是否是罪魁祸首,在使用上述证书进行测试时将其删除。
//requestCert: true,
//rejectUnauthorized: false