2016-05-13 29 views
1

は私のサーバー側である:クロム、NodeJSおよびHTTPS

var fs = require('fs'); 

var options = { 
    key: fs.readFileSync('/cert.key'), 
    cert: fs.readFileSync('/cert.crt') 
}; 

var app = require('express')(); 
var http = require('https').Server(options, app); 
var io = require('socket.io')(http); 
var port = 1234; 

app.get('/', function(req, res){ 
    res.sendFile(__dirname + '/../subdomains/labs/socketio.html'); 
}); 

io.on('connection', function(socket){ 
    socket.on('chat message', function(msg){ 
    io.emit('chat message', msg); 
    }); 
}); 

http.listen(port, function(){ 
    console.log("\n\n--------------------------------"); 
    console.log('Currently Listening on port %d',port); 
    console.log("--------------------------------\n\n"); 
}); 

そして、私のクライアント側:

<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script> 
<script src="https://code.jquery.com/jquery-1.11.1.js"></script> 
<script> 
    var socket = io('https://labs.domain.com:1234'); 
    $('form').submit(function(){ 
     socket.emit('chat message', $('#chat-message').val()); 
     $('#chat-message').val(''); 
     return false; 
    }); 
    socket.on('chat message', function(msg){ 
     $('#messages').append($('<li>').text(msg)); 
    }); 
</script> 

すべてのInternet Explorerで正常に動作します(AGH!)しかし、クロームでそれを、それを使用した場合die:

GET https://labs.domain.com:1234/socket.io/?EIO=3&transport=polling&t=1463123926844-3 net::ERR_INSECURE_RESPONSE 

HTTPSの機能を削除すると、両方のブラウザで正常に動作します。

Chromeを使用すると問題が発生するようですが、これは非常に不満です。これは、私が一番よく使うブラウザです。これをどうすれば解決できますか?

+0

[this](http://stackoverflow.com/a/25075349)は役に立ちますか? – robertklep

+0

これを読みます:[リソース:net :: ERR_INSECURE_RESPONSEを読み込めませんでした](http://stackoverflow.com/questions/23688565/failed-to-load-resource-neterr-insecure-response)。 – jfriend00

+0

@robertklep:いいえ、私は新しいタブビットをするときに質問を得ることができません。それはちょうど「とにかく進む」と言い、その後同じページを取得します。しかし、そうであっても、私はユーザーがナンセンスの束を通らずにSSL経由でNodeJSを使用できるようにする必要があります。 – Chud37

答えて

2

証明書に問題がある場合は、Chromeで安全なWebソケット接続を許可しないという問題がありました。 LetsEncryptで取得した証明書を使って、私たちのアプリケーションでsocket.ioを動作させることができました。これを行う唯一の方法だとは言いませんが、私たちの(動作中の)設定がどのようにセットアップされているかはここにあります:

1 - 私と私のチームメイトの両方が、

2 - 私たちはそれぞれ、LetsEncryptから取得したドメイン(例:mac.example.com)用の証明書を持っています。その理由は、WebSocketを設定するときに使用している証明書についてChromeが非常に厄介であり、開発者またはエンドユーザーが安全性の低い/自己署名の証明書を無効にして受け入れる方法がない(現在)ためです。私たちは、それはあなたの質問から問題のように聞こえるsocket.io v1.4.6

を使用している

const server = https.createServer(/* ssl options: cert etc. */, myExpressApp) 
const io = require('socket.io')(server) 

: -

3のように、私たちのNode.jsアプリでsocket.ioを設定する私たちのコードが見えます証明書があなたのサーバーに設定されているということですが、Chromeのように依然としてそれらについて不満があります。それはおそらく原因であり、あなたがそれを変更するためのsysadmin権限を持っていないように思えるでしょうか?

TL; DRクロムが「あまり」安全でないと思われる自己署名の証明書または証明書を使用しないでください。

関連する問題