【发布时间】:2015-10-25 10:00:55
【问题描述】:
我正在运行一个使用 express 开发的 node.js 服务器,它运行良好。我正在尝试使用 https 模块来保护它。我使用 openssl 生成了自签名证书和密钥,但是在尝试连接时从 firefox 收到以下错误。 IE 也没有加载安全页面。
安全连接失败
连接到 localhost:3001 时出错。不能 与对等方安全通信:没有通用的加密算法。 (错误代码:ssl_error_no_cypher_overlap)
您尝试查看的页面无法显示,因为 无法验证接收到的数据的真实性。请 联系网站所有者,告知他们这个问题。
我使用以下命令创建了密钥和证书:
>> openssl genrsa 1024 > key.pem
>> openssl req -x509 -new -key key.pem > key-cert.pem
我正在使用 firefox 39.0、node 0.12.4、express 4.13.1、openssl 0.9.81 并在 windows server 2008 R2 Enterprise 中工作。
这是我的代码。 server.js 是起点:node server.js
server.js:
var http = require('http');
var https = require('https');
var fs = require('fs');
var app = require('./app');
var credentials = {
key: fs.readFileSync('./certificate/key.pem'),
cert: fs.readFileSync('./certificate/key-cert.pem')
};
http.createServer(app).listen(3000);
https.createServer(credentials, app).listen(3001);
app.js:
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var register = require('./routes/register');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
//app.get("/", login.form);
app.get("/register", register.form);
app.post("/register", register.submit);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
module.exports = app;
我正在尝试使用以下方式访问应用程序: https://localhost:3001/register
我陷入了困境。请帮我解决一下。
【问题讨论】:
标签: node.js security firefox https openssl