我对如何在节点服务器上配置SSL感到非常困惑!
我所做的远远是:
在我的本地计算机上创建自签名密钥和证书以进行本地测试
- 将此代码添加到我的快速设置
var privateKey = fs.readFileSync('privatekey.pem', 'utf8');
var certificate = fs.readFileSync('certificate.pem', 'utf8');
https.createServer({
key: privateKey,
cert: certificate
}, app).listen(port);
这在本地很好(我得到浏览器错误但我明白这是因为我自签名而且我不是一个值得信任的权威人员。)
现在我想部署一个真正的证书,所以我从RapidSSL购买了一个。他们以电子邮件中的明文向我发送了两个密钥,格式为
-----BEGIN CERTIFICATE-----
blah
-----END CERTIFICATE-----
一个标记为Web server CERTIFICATE
,另一个标记为INTERMEDIATE CA
。
我将Web server CERTIFICATE
的内容复制到一个名为(为了这个问题)的新文件prodPrivatekey.pem
,我将INTERMEDIATE CA
移到prodCertificate.pem
。然后我替换了上面代码中的路径。
首先,有人可以告诉我这个行动方案是否正确?假设我几乎不了解SSL证书的内部工作原理!
其次,如果是,我通过此设置获得的错误是Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
。我能找到的唯一帮助就是这个问题Node.js https pem error: routines:PEM_read_bio:no start line,但这里的帮助似乎与自签名证书有关。
感谢您的帮助!
答案 0 :(得分:1)
var privateKey = fs.readFileSync('privatekey.pem', 'utf8');
privateKey
应该是您的私钥。你不会从RapidSSL那里得到或收到这个。
var certificate = fs.readFileSync('certificate.pem', 'utf8');
certificate
应该是一个RapidSSL标记为Web服务器CERTIFICATE
离开INTERMEDIATE CA
。这是一个中间证书(在您和RapidSSL的根证书之间)。您需要将其包含在您的应用中,否则某些浏览器(例如Android上的浏览器)会看到错误,指示"不受信任的证书"或者那种性质的东西。
要将其包含在配置中,您可以执行以下操作:
var intermediateCertificate = fs.readFileSync('intermediate.pem', 'utf8');
https.createServer({
key: privateKey,
cert: certificate,
ca: [ intermediateCertificate ]
}, app).listen(port);
一旦这样做并且您的网站是公开的,请使用在线扫描程序(例如SSL Labs Server Test)测试您网站的SSL配置,以查看您的SSL配置是否安全(分数A或A +)。根据您正在运行的节点版本,默认值可能不够安全。