Не удалось загрузить ресурс: net:: ERR_INSECURE_RESPONSE socket.io
Я подключаюсь к порту на моем сервере через ssl... Недавно я начал получать Ошибка загрузки ресурса: net:: ERR_INSECURE_RESPONSE на chrome при подключении к серверу node.js + socket.io. Вот мой сервер, устанавливающий код:
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});
Ответы
Ответ 1
У меня была аналогичная проблема при использовании официального, а не самоподписанного сертификата, и я нашел решение. Это только провалилось в Chrome на Android, кстати.
Добавьте цепочку certifate в объект options метода 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'));
});
Просто поставьте его здесь, чтобы кто-то другой не ударил головой о стену, когда имел аналогичную проблему.
Ответ 2
Ваш сертификат, вероятно, сам подписан.
Chromium блокирует этот вид небезопасного контента.
Если вы один, чтобы использовать его в качестве тестирования, например, вы можете просто разблокировать его, открыв новую вкладку в Google Chrome и перейдя на https://example.com:8080
. Chrome сообщит вам, что ресурс использует самоподписанный сертификат SSL и спрашивает, хотите ли вы продолжить. Если вы это сделаете, ваше приложение теперь будет работать на вашей первой вкладке.
Помните, что вы сделаете это для каждого сеанса навигации в хроме.
Ответ 3
У меня возникла недавняя проблема с этой ошибкой, и все, что я делал, это изменить конечные точки на HTTP вместо https, но это также может зависеть от вашей реализации.
Ответ 4
Спасибо. Это решило и мою проблему.
В моем случае я запускал front-end Angular 2 в режиме разработки на localhost: 3000 и back-end на https://server:8443, а я также получал
net::ERR_INSECURE_RESPONSE
Моим решением было перейти на https://server:443, который запускал развернутый интерфейс и подтверждал самозаверяющий сертификат.