无法加载资源:net :: ERR_INSECURE_RESPONSE socket.io

我正在通过SSL连接到我的服务器上的一个端口…最近,我已经开始得到无法加载资源:net :: ERR_INSECURE_RESPONSE错误在铬连接到node.js + socket.io服务器。这里是我的服务器设置up代码:

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}); 

在使用官方而非自签名证书时,我遇到了类似的问题,我刚刚find了解决scheme。 它只是在Android的铬失败,顺便说一句。 将certifate链添加到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')); }); 

只是把它放在这里,以防止其他人在遇到类似问题时把头撞在墙上。

您的证书可能是自签名的。

铬阻挡这种不安全的内容。 如果你独自使用它作为testing的例子,你可以取消阻止它在Google chrome中打开一个新标签并转到https://example.com:8080 。 Chrome会通知您资源使用自签名的SSL证书,并询问您是否要继续。 如果你这样做,你的应用程序现在将在你的第一个标签上工作。

请记住,您将在Chrome中为每个导航会话执行此操作。

谢谢。 这也解决了我的问题。 在我的情况下,我在localhost:3000上运行开发模式的前端Angular 2,在https:// server:8443上运行后端,我也得到

  net::ERR_INSECURE_RESPONSE 

我的解决scheme是导航到正在运行已部署的前端的https:// server:443并确认自签名证书。