Mam aplikację node.js, która używa socket.IO. Działa dobrze na http, ale przy próbie połączenia z gniazdem przez https - nic się nie dzieje.
Oto niektóre części kodu:Socket.IO nie może się połączyć przez https
var fs = require('fs');
var ioHttp = require('socket.io').listen(8899, {
'flash policy port': -1
});
initSocket(ioHttp);
var ioHttps = require('socket.io').listen(8895, {
key: fs.readFileSync('/path/to/file/file.key'),
cert: fs.readFileSync('/path/to/file/file.crt'),
ca: [
fs.readFileSync('/path/to/file/sub.class1.server.ca.pem'),
fs.readFileSync('/path/to/file/ca.pem')
],
'flash policy port': -1
});
initSocket(ioHttps);
a funkcja initSocket
:
function initSocket(io) {
io.enable('browser client minification');
io.enable('browser client etag');
io.enable('browser client gzip');
io.set('transports', [
'websocket',
'htmlfile',
'flashsocket',
'jsonp-polling'
]);
io.sockets.on('connection', function (client) {
//the connnection is handled here
});
}
Klient połączyć tak:
var secureConnection = false;
var port = 8899;
if (window.location.protocol === 'https:') {
port = 8895;
secureConnection = true;
}
var socket = io.connect('domain.org', {port: port, secure: secureConnection});
Jak powiedziałem wszystko działa poprawnie na http, ale połączenie w https daje mi "Połączenie zostało przerwane". Co ja robię źle?
Czy możesz samodzielnie podpisać lub czy socket.io zachowuje się jak zwykły HTTP w przeglądarkach, w których sprawdza certyfikaty i ostrzega? – Titan
Hej, gdzie dostaniesz server.key, server.crt i ca.crt? czy to jest self-made? czy będzie działać na produkcji, jeśli zrobi się samodzielnie? –
@GreenGiant Wyszukaj requestCert i odrzućNieautoryzowane opcje wewnętrzne w [dokumentacji] (http://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener) – user568109