私はssl経由でサーバーのポートに接続しています...最近、リソースのロードに失敗しました:net :: ERR_INSECURE_RESPONSE error on 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});
自己署名証明書ではなく、公式の証明書を使用したときに同様の問題が発生し、解決策を見つけました。 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'));
});
同様の問題が発生したときに他の誰かが頭を壁にぶつけないように、ここに置いてください。
証明書はおそらく自己署名されています。
Chromiumは、この種の安全でないコンテンツをブロックします。たとえば、テストとして使用するだけであれば、Googleで新しいタブを開いてブロックを解除することができますchromeそしてhttps://example.com:8080
。 Chromeは、リソースが自己署名SSL証明書を使用していることを通知し、続行するかどうかを尋ねます。続行すると、アプリは最初のタブで動作するようになります。
Chromeで各ナビゲーションセッションに対して行うことを忘れないでください。
ありがとう。それは私の問題も解決しました。私の場合、私はフロントエンドAngular 2をlocalhost:3000の開発モードで、バックエンドを https:// server:844 で実行していました。取得
net::ERR_INSECURE_RESPONSE
私の解決策は、展開されたフロントエンドを実行していた https:// server:44 に移動し、自己署名証明書を確認することでした。
このエラーで最近問題が発生し、エンドポイントをhttpsではなくHTTPに変更するだけでしたが、これは実装にも依存します。