2015-10-25 129 views
6

我想通過SSL與socket.io套接字。 我看過其他的答案,但沒有奏效帶有express的socket.io中的SSL:缺少PFX或證書+私鑰。

這裏是我的代碼:

var ssl_options = { 
    key : fs.readFileSync(my_key_path), 
    cert : fs.readFileSync(my_cert_path) 
}; 

var protocol = "https"; 

preparedApp = require(protocol).createServer(ssl_options,app); 

var io = require('socket.io')(preparedApp); 

preparedApp.listen(8080, function(){}); 
io.on('connection', function(socket){}); 

這裏是我的ssl_options的日誌...

{ key: <Buffer 41 ...>, 
cert: <Buffer 4a ...> } 

此錯誤與錯誤標題爲throw new Error('Missing PFX or certificate + private key.');。有誰知道可能會發生什麼?這個答案的其他解決方案沒有解決我的情況。

回答

2

爲您的私鑰使用PEM(RSA)格式。檢查私鑰是否是base64編碼,包含在「----- BEGIN RSA PRIVATE KEY -----」和「----- END RSA PRIVATE KEY -----之間」

從文檔:

  • 鍵:包含服務器的PEM格式的私鑰字符串或緩衝區
  • 證書:一個字符串保持編碼的證書
  • 密碼的PEM:口令的私鑰的字符串或pfx [可選默認值:空]

  • PFX:一個字符串或緩衝區持有PFX或PKCS12編碼的專用密鑰,證書和CA證書

要轉換私鑰RSA PEM:openssl rsa -in <PATH TO KEY> -out key.pem -outform PEM

創建PKCS#12束使用openssl pkcs12 -export -in cert.pem -inkey key.pem -certfile ca.pem -out host.pfx

- 加 -

要ensu重新證書是PEM編碼運行openssl x509 -in <PATH TO CERT> -out cert.pem -outform PEM

+0

基本上我使用你告訴我的命令將我的.key變成了一個.pem。然後我改變代碼 '變種ssl_options = { 鍵:fs.readFileSync(my_pem_path),(在.PEM) 證書:fs.readFileSync(my_cert_path)(處於.CRT) };' 但它仍然失敗,同樣的錯誤。任何想法? – Fane

+0

嘗試將crt編碼爲pem。請參閱我的答案。 – windm

+0

nope ...完全相同的東西:( – Fane