2016-07-06 47 views
1

我給自己買了從證書頒發機構此文件:Node.js的HTTPS PEM錯誤:錯誤:0906D06C:PEM套路:PEM_read_bio:沒有啓動線

  • domain.com.p7b
  • domain.com.crt
  • domain.com.ca束

我想這一點代碼:

var express = require('express'); 
var app = express(); 
var fs = require("fs"); 
var https = require('https'); 

var privateKey = fs.readFileSync('domain.com.p7b').toString(); 
var certificate = fs.readFileSync('domain.com.crt').toString(); 
var ca_bundle = fs.readFileSync('domain.com.ca-bundle').toString(); 

var credentials = { key: privateKey, 
        ca : ca_bundle, 
        cert: certificate}; 


https.createServer(credentials,app).listen(8080, function() { 
    console.log('Example app listening on port 8080!'); 
}); 

啓動腳本後,我得到以下錯誤:

(err):  at Object.createSecureContext (_tls_common.js:87:19) 
(err):  at Server (_tls_wrap.js:721:25) 
(err):  at new Server (https.js:17:14) 
(err):  at Object.exports.createServer (https.js:37:10) 
(err):  at Object.<anonymous> (/utec_temp/https/web.js:27:7) 
(err):  at Module._compile (module.js:435:26) 
(err):  at Object.Module._extensions..js (module.js:442:10) 
(err):  at Module.load (module.js:356:32) 
(err):  at Function.Module._load (module.js:311:12) 
(err): Error: error:0906D06C:PEM routines:PEM_read_bio:no start line 
(err):  at Error (native) 
(err):  at Object.createSecureContext (_tls_common.js:87:19) 
(err):  at Server (_tls_wrap.js:721:25) 
(err):  at new Server (https.js:17:14) 
(err):  at Object.exports.createServer (https.js:37:10) 
(err):  at Object.<anonymous> (/utec_temp/https/web.js:27:7) 
(err):  at Module._compile (module.js:435:26) 
(err):  at Object.Module._extensions..js (module.js:442:10) 
(err):  at Module.load (module.js:356:32) 
(err):  at Function.Module._load (module.js:311:12) 

,你可以在互聯網上使用自簽名證書谷歌大部分的例子,但是當我在一個真實的環境中工作發生了什麼?

我少的代碼開發工作與自簽名密鑰,如下面的例子:

https://stackoverflow.com/a/24283204/3957754

我研究,我發現這一點:

https://www.namecheap.com/support/knowledgebase/article.aspx/9705/0/nodejs

http://www.backwardcompatible.net/155-Setting-up-real-SSL-Nodejs-Express

Node.js https pem error: routines:PEM_read_bio:no start line

但我無法更正錯誤。

我也降低到一個文件:

var credentials = {cert: certificate};  

和錯誤是一樣的。所以我認爲,也許從Windows到UNIX的格式錯誤。我使用dos2unix工具,錯誤是一樣的。

我的節點版本是4.4.7

任何幫助表示讚賞。

提前致謝!

UPDATED

我在答案部分作品node.js的答案!但在一個優雅的或健康的方式,DONT修改您的應用代碼,離開這個工作了Apache,Nginx的,HAProxy的或一些負載平衡器:

# apache 2.2 example 
SSLCertificateFile /some/folder/certificate.crt 
SSLCertificateKeyFile /some/folder/initial.key 
SSLCertificateChainFile /some/folder/certificate.ca-bundle 

這種複雜性必須是透明的開發團隊和應由系統管理員,基礎設施或與貴公司網絡相關的其他團隊管理。

回答

4

我有點晚了,但我希望這有助於。

如果某人有此文件的工作:PB7,CRT,CA-束,並有此錯誤:

error:0906D06C:PEM routines:PEM_read_bio:no start line 

這意味着,這個文件是錯誤的,損壞或者被要求用於另一個環境(窗戶例如),因爲這在帖子中寫道:https://serverfault.com/a/317038

所以在我的情況的解決方案是要求提供新的證書,並在especifications,把下面的:

  • Linux下C ompatibility

而且是很重要的保存,CSR將被創建併發送至certificator提供商的關鍵(我叫initial.key)。

http://www.backwardcompatible.net/155-Setting-up-real-SSL-Nodejs-Express

最後,你的供應商都會給你一個帶拉鍊的幾個文件。你只需要爲您的節點應用一個.crt文件:

var privateKey = fs.readFileSync('/some/folder/initial.key').toString(); 
var certificate = fs.readFileSync('/some/folder/certificate.crt').toString(); 
var credentials = {key: privateKey, cert: certificate}; 

注:certificate.ca束和certificate.crt文件必須由certificator提供商發送。

HTH