我对如何在我的 Node 服务器上配置 SSL 感到非常困惑!
到目前为止我所做的是:
-在本地计算机上创建自签名 key 和证书以进行本地测试
-将此代码添加到我的快速设置中
var privateKey = fs.readFileSync('privatekey.pem', 'utf8');
var certificate = fs.readFileSync('certificate.pem', 'utf8');
https.createServer({
key: privateKey,
cert: certificate
}, app).listen(port);
这在本地没问题(我收到浏览器错误,但我知道这是因为我自签名并且我不是受信任的权威机构)。
现在我想使用真实的证书进行部署,因此我从 RapidSSL 购买了一个。他们在电子邮件中以明文形式向我发送了两个 key ,格式均为
-----BEGIN CERTIFICATE-----
blah
-----END CERTIFICATE-----
一个标记为Web 服务器证书
,另一个标记为INTERMEDIATE CA
。
我将Web服务器证书
的内容复制到一个名为(为了解决这个问题)prodPrivatekey.pem
的新文件,并且我移动了INTERMEDIATE CA
到 prodCertificate.pem
。然后我替换了上面代码中的路径。
首先,有人可以告诉我这个做法是否正确吗?假设我对 SSL 证书的内部运作几乎一无所知!
其次,如果是这样,我在此设置中遇到的错误是错误:错误:0906D06C:PEM例程:PEM_read_bio:无起始行
。我能找到的唯一帮助是这个问题Node.js https pem error: routines:PEM_read_bio:no start line但这里的帮助似乎与自签名证书有关。
感谢您的帮助!
最佳答案
var privateKey = fs.readFileSync('privatekey.pem', 'utf8');
privateKey
应该是您的私钥。您不会向 RapidSSL 提供此信息或从 RapidSSL 接收此信息。
var certificate = fs.readFileSync('certificate.pem', 'utf8');
证书
应该是一个 RapidSSL 已标记为 Web 服务器 CERTIFICATE
剩下中级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+)。根据您运行的 Node 版本,默认值可能不够安全。
关于node.js - 在 Node/express 上安装 RapidSSL 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39598336/