我正试图使用StartSSL证书运行HTTPS服务器。我从他们那里得到了所有必要的文件,并通过在createServer
参数中传递它们来使用它们:
var options =
{
ca: FS.readFileSync('sub.class1.server.ca.pem'),
key: FS.readFileSync('ssl.key'),
cert: FS.readFileSync('ssl.crt')
};
这就是我得到的错误。
Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
at Object.createCredentials (crypto.js:87:31)
at HTTPSServer.Server (tls.js:914:28)
at HTTPSServer.Server (https.js:33:14)
at HTTPSServer.HTTPSServer (/Users/myUserName/node_modules/connect/lib/https.js:34:16)
at new HTTPSServer (/Users/myUserName/node_modules/express/lib/https.js:38:23)
at Object.createServer (/Users/myUserName/node_modules/express/lib/express.js:43:12)
at Object.<anonymous> (/Users/myUserName/Sites/node.js/https/app.js:12:36)
at Module._compile (module.js:441:26)
at Object..js (module.js:459:10)
at Module.load (module.js:348:31)
我想也许我应该将证书转换为PEM。但是跑步:
openssl x509 -in ssl.crt -out ssl.der -outform DER
...给我类似的错误
unable to load certificate
67304:error:0906D06C:PEM routines:PEM_read_bio:no start line:/SourceCache/OpenSSL098/OpenSSL098-44/src/crypto/pem/pem_lib.c:648:Expecting: TRUSTED CERTIFICATE
知道为什么吗?
更新:这只发生在OSX上。我尝试在Ubuntu服务器上运行同样的东西,它可以工作。
答案 0 :(得分:7)
我遇到了同样的问题。但是我可以确认在我的机器上(macbook osx 10.7.3)节点https现在使用自签名证书运行时没有错误。
该特定错误意味着它无法找到文件,或者文件中没有任何内容(您可以通过传递空字符串或使用无效的文件路径来确认这一点。)
首先,尝试使用绝对路径 - 例如FS.readFileSync(__ dirname +'ssl.crt')。
还打开您的证书和密钥文件,并确认它们包含以下格式的数据:'----- BEGIN'......等等。
另请注意,虽然您的文件是.cert和.key文件,但文档引用了扩展名为.pem的证书和密钥文件。
http://nodejs.org/api/https.html
从我的理解,没有太大区别,内容看起来与我非常相似,但这些事情可能很繁琐。这是一个将.csr文件转换为.pem文件的命令:
openssl x509 -req -in certrequest.csr -signkey privatekey.pem -out certificate.pem
取自http://silas.sewell.org/blog/2010/06/03/node-js-https-ssl-server-example/
答案 1 :(得分:3)
我认为你跟我这样做了https://tootallnate.net/setting-up-free-ssl-on-your-node-server,我遇到了同样的问题。但是在多次检查我从StartCom检索到的所有文件后,我发现我不小心将认证和私钥保存为UTF8,而不是ANSI。在将文件的编码更改为ANSI之后,node.js开始像魅力一样工作:)