2016-09-22 18 views
11

के साथ काम नहीं करता है मेरे पास websockets का उपयोग कर एक चैट चैट एप्लिकेशन है। मैं एक कदम आगे जाना चाहता हूं और अपने कनेक्शन पर एन्क्रिप्शन सक्षम करना चाहता हूं, हालांकि जब मैं http सर्वर के साथ http सर्वर को स्विच करता हूं तो मेरे कनेक्शन विफल हो जाते हैं।वेबसॉकेट सर्वर एसएसएल

मैंने एक स्व-हस्ताक्षरित प्रमाणपत्र तैयार किया है जिसका उपयोग मैं अपनी सभी वेबसाइटों पर करता हूं (उसी टीएलडी के तहत, जिसका अर्थ है कि यह वाइल्डकार्ड प्रमाण पत्र है)। मैं पुष्टि कर सकता हूं कि यह एक वैध प्रमाण पत्र है, इसलिए समस्या वहां नहीं होनी चाहिए।

यह क्या काम करता है (एन्क्रिप्ट नहीं किए गए)

var webSocketServer = require('websocket').server; 
var http = require('http'); 

var server = http.createServer(function() {}); 
server.listen(webSocketsServerPort, function() { 
    log("system", "Server is listening on port " + webSocketsServerPort); 
}); 

var wsServer = new webSocketServer({ 
    httpServer: server 
}); 

इस मैं अब ws://my.domain:port से जुड़ सकते हैं का उपयोग करना है।

यह वही है नहीं काम

var webSocketServer = require('websocket').server; 
var http = require('https'); 
var fs = require('fs'); 

var server = http.createServer({ 
    key: fs.readFileSync("path/to/host.key"), 
    cert: fs.readFileSync("path/to/host.pem") 
}); 
server.listen(webSocketsServerPort, function() { 
    log("system", "Server is listening on port " + webSocketsServerPort); 
}); 

var wsServer = new webSocketServer({ 
    httpServer: server 
}); 
इस कोड को सर्वर के रूप में अच्छी तरह से शुरू होता है के साथ

, मैं देख लॉग संदेश करता है "सर्वर सुन रहा है .." लेकिन जब मैं wss://my.domain:port कनेक्शन पर कनेक्ट करने का प्रयास स्थापित नहीं किया जा सकता है।

मैंने प्रमाण पत्र के लिए अपने ब्राउज़र में एक अपवाद जोड़ा है क्योंकि मेरा ग्राहक पृष्ठ और websocket सर्वर पता एक ही tld और उप-डोमेन के अंतर्गत हैं।

समस्या क्या हो सकती है?

+0

फ़ायरवॉल समस्या? –

उत्तर

0

बुरी लॉगिंग आदतों के साथ संयुक्त खराब अभ्यास समस्या का कारण थे।

एक नया कनेक्शन एक चेक अनुरोध जो वहाँ में http:// hardcoded था की उत्पत्ति को मान्य करने के लिए किया था खोलने पर और के बाद से मैं एक सुरक्षित पृष्ठ (https://) चेक नहीं रह गया है पारित कर दिया और कनेक्शन से अनुरोध किया गया था असंभव थे।

4

साइट को जोड़ने के लिए पर्याप्त नहीं है जिससे आप वेबस्केट से अपवाद के रूप में कनेक्ट करना चाहते हैं। साइट https://my.domain:port (वेबस्केट पता) पर जाएं और स्थान को अपवाद के रूप में जोड़ें। (यह निश्चित रूप से फ़ायरफ़ॉक्स में एक आवश्यक कदम है)

वैकल्पिक रूप से आप प्रमाण पत्र प्रबंधक में प्राधिकरण में अपना प्रमाणपत्र आयात कर सकते हैं।

संपादित करें: मैं आपको बता सकता हूं कि मेरे लिए क्या काम करता है।

> openssl genrsa -out key.pem 
> openssl req -new -key key.pem -out csr.pem 
> openssl x509 -req -days 9999 -in csr.pem -signkey key.pem -out cert.pem 

आम नाम https://localhost:8000 पर ब्राउज़र (Firefox) में main.js

var https = require('https'); 
var ws = require('websocket').server; 
var fs = require('fs'); 

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

var server = https.createServer(options, 
    function(req,res){res.writeHeader(200);res.end();}); 
server.listen(8000); 
var wss = new ws({httpServer:server}); 

wss.on('request',function(req){ 
    req.on('requestAccepted',function(conn){ 
     conn.on('message',function(msg){ 
      conn.send(msg.utf8Data + " received"); 
     }); 
    }) 
    req.accept(null,req.origin); 
}); 

तो में localhost

के रूप में स्थापित करने (अपवाद के रूप में जोड़ा प्रमाणपत्र)

var ws = new WebSocket('wss://localhost:8000/') 
ws.onmessage = function(msg){console.log(msg.data)} 
ws.send("test") 

और प्राप्त test received

+0

मैंने हाल ही में letsencrypt से एक विश्वसनीय प्रमाणपत्र प्राप्त किया है और मैं 'https: //my.domain: port' पर कनेक्ट कर सकता हूं जहां मेरा नोड http और ws सर्वर सुन रहे हैं, लेकिन कनेक्शन अभी भी विफल रहा है। –

+0

@php_nub_qq त्रुटि संदेश क्या कहता है? – Adam

+0

क्रोम में कनेक्शन से इंकार कर दिया गया और कनेक्शन फ़ायरफ़ॉक्स में स्थापित नहीं किया जा सकता है। –

संबंधित मुद्दे