我通过ssl连接到服务器上的端口...最近我开始无法加载资源:连接到node.js + socket.io server时,chrome上的net :: ERR_INSECURE_RESPONSE错误。这是我的服务器设置代码:
var fs = require('fs');
var express = require('express');
var routes = require('./routes');
var https = require('https');
var path = require('path');
var socketio = require('socket.io');
var util = require('util');
var url = require('url');
var privateKey = fs.readFileSync('ssl/keys/xxxxxxxxxxxxxxxxxxxxxxxx.key', 'utf8');
var certificate = fs.readFileSync('ssl/certs/xxxxxxxxxxxxxx.crt', 'utf8');
var credentials = {key: privateKey, cert: certificate};
var sizeOf = require('image-size');
var DBWrapper = require('node-dbi').DBWrapper;
var DBExpr = require('node-dbi').DBExpr;
var dbConnectionConfig = { host: 'localhost', user: 'user', password: 'password', database: 'dbname' };
dbWrapper = new DBWrapper( "pg", dbConnectionConfig );
dbWrapper.connect();
var app = express();
app.set('port', process.env.PORT || 8080);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
app.get('/', routes.index);
var server = https.createServer(credentials,app).listen(app.get('port'), function(){
console.log("Express server listening on port with https " + app.get('port'));
});
var io = socketio.listen(server);
我做错了什么?
编辑: 这就是我在客户端连接的方式:
socket = io.connect("https://website.com:8080", {'reconnect': false});
答案 0 :(得分:26)
您的证书可能是自签名的。
铬阻止了这种不安全的内容。
例如,如果您单独使用它作为测试,则可以取消阻止它在Google Chrome中打开新标签并转到https://example.com:8080
。 Chrome会告诉您该资源使用自签名SSL证书并询问您是否要继续。如果您这样做,您的应用程序现在将在您的第一个标签页上运行。
请记住,您将为Chrome中的每个导航会话执行此操作。
答案 1 :(得分:15)
在使用官方证书而不是自签名证书时,我遇到了类似的问题,我刚刚找到了解决方案。它只在Android上的Chrome中失败了,顺便说一句。 将证书链添加到https.createServer方法的options对象:
var hskey = fs.readFileSync('/the_key.key');
var hscert = fs.readFileSync('/the_cert.pem')
var ca = fs.readFileSync('/The_CA_bundle.pem')
var credentials = {
ca:ca,
key: hskey,
cert: hscert
};
var server = https.createServer(credentials,app).listen(app.get('port'), function(){
console.log("Express server listening on port with https " + app.get('port'));
});
只要把它放在这里,就可以防止别人在遇到类似问题时撞到墙上。
答案 2 :(得分:2)
感谢。这也解决了我的问题。 在我的情况下,我在开发模式下运行前端Angular 2在localhost:3000和后端https://server:8443上我也得到了
net::ERR_INSECURE_RESPONSE
我的解决方案是导航到运行已部署前端的https://server:443并确认自签名证书。
答案 3 :(得分:0)
我最近遇到此错误的问题,我所做的只是将端点更改为HTTP而不是https,但这也可能取决于您的实现。