【发布时间】:2018-03-03 13:27:34
【问题描述】:
我最近尝试在我的服务器上安装 SSL 证书。证书文件(privkey.pem、fullchain.pem)位于应用程序的根目录中。当我运行以下代码时:
var express = require('express');
var app = express();
var helmet = require('helmet');
var db = require('./server/database.js');
var fs = require('fs');
var ssl = require('ssl-root-cas');
'use strict';
var rootCas = require('ssl-root-cas/latest').create();
// default for all https requests
// (whether using https directly, request, or another module)
require('https').globalAgent.options.ca = rootCas;
app.use(helmet());
var options = {
key : fs.readFileSync('privkey.pem', 'ascii'),
cert : fs.readFileSync('fullchain.pem', 'ascii')
}
app.get('/', function(req, res) {
res.sendFile(__dirname + '/public/index.html');
});
app.use('/public', express.static(__dirname + '/public'));
var serv = require('https').createServer(options, app);
服务器运行没有错误。我添加的“服务器正在侦听端口 80”确认显示,并且证书似乎不会导致任何直接问题。但是,当我尝试连接到域(使用 https://)时,Chrome 会以 ERR_CONNECTION_REFUSED 响应。通过 http 连接到域时,Chrome 会使用相同的消息进行响应。我正在使用稍后在代码中初始化的 SocketIO,我没有发现我的问题和 SocketIO 的函数之间有任何联系。什么原因导致无法连接?
【问题讨论】:
-
在您添加证书之前它是否正常工作?
-
是的,只有在我添加了对 https 的支持后它才停止工作。
-
你能看日志吗?
-
这些日志将位于何处?我可以通过 FTP 和 SSH 访问服务器。
-
URL 中的
https前缀使您的浏览器连接到端口 443 而不是 80。服务器侦听端口 80 是不够的。
标签: javascript node.js express ssl