2017-08-21 166 views
0

我在將我的聊天應用程序連接到運行在Ubuntu 16.04上的Node.js服務器時遇到問題。問題似乎是使用'letsencrypt'生成的ssl證書。Node.js和Socket.io - 證書無效

我已經使用openssl證書成功連接到了我的Node.js服務器 - 但這隻適用於我的Chrome瀏覽器。

這裏是我的Node.js的部分代碼:

let fs = require('fs'); 
let https = require('https'); 

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

let server = https.createServer(options); 
let io = require('socket.io')(server); 

let Redis = require('ioredis'); 
let redis = new Redis(); 

redis.subscribe('all-chat'); 

redis.on('message', function (channel, message) { 
    message = JSON.parse(message); 
    io.emit(channel + ':' + message.event, message.data); 
}); 

server.listen(3201); 

錯誤代碼,我從我的瀏覽器得到的是:

net::ERR_INSECURE_RESPONSE 

我的猜測是,一些奇怪的因爲我獲得的證書沒有遵循某種標準,所以瀏覽器放棄了迴應。

對於我可以收集有關這個問題的網絡上 - 該解決方案應該使用從「letsencrypt」和/或:

var options = { ... }; 

多變化的證書,我相信我已經想盡可能的組合。

如果我在兩個窗口中打開我的網站,一個在邊緣,另一個在Chrome中,我可以成功將消息從邊緣發送到Chrome - 但該消息不會顯示在Edge中。

預先感謝任何細節,可能會讓我回到正軌!

回答

0

答案很簡單。爲確保您可以使用您的證書,您可以使用https://www.digicert.com/help/上的診斷工具。

對於從客戶端到我的Node.js端的連接,我在客戶端聲明瞭IP - 並且在使用已經使用公有域創建的證書時不會執行此操作。所以我將客戶端的IP從IP更改爲公共域,並且它工作正常!