加载资源失败:net::ERR_INSECURE_RESPONSE socket.io

Posted

技术标签:

【中文标题】加载资源失败:net::ERR_INSECURE_RESPONSE socket.io【英文标题】:Failed to load resource: net::ERR_INSECURE_RESPONSE socket.io 【发布时间】:2014-08-21 16:37:06 【问题描述】:

我正在通过 ssl 连接到我的服务器上的一个端口...最近我开始在连接到 node.js+socket.io 服务器时在 chrome 上遇到 Failed to load resource: 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);

【问题讨论】:

你是如何在客户端连接socketio的? 您确定您的证书仍然有效吗?它没有过期还是什么? 我的证书是有效的.. 99.9% 的时间它可以工作,但有时会给我这个错误。如果我清除 chrome 缓存,它会重新开始工作。 当我在浏览器上打开链接website.com:8080 时,我收到错误该站点的安全证书不受信任!。 【参考方案1】:

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

Chromium 会阻止此类不安全的内容。 例如,如果您一个人将其用作测试,您可以取消阻止它,在 Google chrome 中打开一个新标签并转到https://example.com:8080。 Chrome 会向您宣传该资源使用自签名 SSL 证书,并询问您是否要继续。如果这样做,您的应用现在将在您的第一个选项卡上运行。

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

【讨论】:

何雷米,我也有同样的问题。我正在使用自签名证书。就我而言,它不是要求我将证书添加到信任列表中。因此,网页无法加载。你对此有什么想法吗? @Pritam 是来自 ajax 调用的被阻止的 url 吗?【参考方案2】:

我在使用官方而非自签名证书时遇到了类似的问题,我刚刚找到了解决方案。顺便说一句,它仅在 android 上的 chrome 中失败。 将证书链添加到 https.createServer 方法的选项对象中:

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

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

【讨论】:

我认为这是正确的方式benjiegillam.com/2012/06/node-dot-js-ssl-certificate-chain【参考方案3】:

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

 net::ERR_INSECURE_RESPONSE 

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

【讨论】:

【参考方案4】:

我最近遇到了这个错误的问题,我所做的只是将端点更改为 HTTP 而不是 https,但这也可能取决于您的实现。

【讨论】:

我认为应该是评论而不是答案。

以上是关于加载资源失败:net::ERR_INSECURE_RESPONSE socket.io的主要内容,如果未能解决你的问题,请参考以下文章

华为云空间电脑端加载资源文件失败

duilib加载资源文件失败 每次开机都会出现这个

win10运行中出现duilib加载资源失败。怎么解决

win10运行中出现duilib加载资源失败,又没啥影响,是啥原因啊~~

电脑开机出现duilib加载资源文件失败怎么解决

文档中的最后一张图片加载失败 - “加载资源失败”