web-dev-qa-db-fra.com

Impossible de charger la ressource: net :: ERR_INSECURE_RESPONSE socket.io

Je me connecte à un port sur mon serveur via ssl ... récemment, j'ai commencé à obtenir Impossible de charger la ressource: erreur net :: ERR_INSECURE_RESPONSE sur chrome lors de la connexion au serveur node.js + socket.io.Voici le paramètre de mon serveur code 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);

Qu'est-ce que je fais mal?

Edit: Voici comment je me connecte côté client:

socket = io.connect("https://website.com:8080", {'reconnect': false});
16
user3455531

J'ai eu un problème similaire lors de l'utilisation d'un certificat officiel et non auto-signé et je viens de trouver la solution. Il a seulement échoué en chrome sur Android, btw . Ajoutez la chaîne de certifate à l'objet options de la méthode 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'));
});

Il suffit de le mettre ici pour éviter que quelqu'un d'autre ne se cogne la tête contre le mur en cas de problème similaire.

15
KLoozen

Votre certificat est probablement auto-signé.

Chrome bloque ce type de contenu non sécurisé . Si vous êtes le seul à l'utiliser à des fins de test, vous pouvez simplement le débloquer en ouvrant un nouvel onglet dans Google chrome et en allant à https://example.com:8080. Chrome vous annoncera que la ressource utilise un certificat SSL auto-signé et vous demande si vous souhaitez continuer. Si vous le faites, votre application fonctionnera désormais sur votre premier onglet.

N'oubliez pas que vous le ferez pour chaque session de navigation en chrome.

26
Rémi Becheras

Merci. Cela a également résolu mon problème. Dans mon cas, j’utilisais Angular 2 front-end en mode développement sur localhost: 3000 et back-end sur https: // serveur: 8443 et j’obtenais également

 net::ERR_INSECURE_RESPONSE 

Ma solution consistait à accéder à https: // serveur: 443 qui exécutait le serveur frontal déployé et à confirmer le certificat auto-signé. 

2
Viliam Kocinsky

J'ai récemment eu un problème avec cette erreur et tout ce que j'ai fait est de changer les points de terminaison en HTTP au lieu de https, mais cela peut également dépendre de votre implémentation.

0
Jun Bin