【发布时间】:2019-03-20 07:48:39
【问题描述】:
我在设置节点服务器时遇到问题,让我们加密证书。我正在使用 Express 来创建这样的 https 服务器:
var fs = require('fs');
var app = require('express')();
var https = require('https');
var server = https.createServer({
key:
fs.readFileSync('/etc/letsencrypt/live/mydomain.com/privkey.pem'),
cert: fs.readFileSync('/etc/letsencrypt/live/mydomain.com/cert.pem'),
ca: fs.readFileSync('/etc/letsencrypt/live/mydomain.com/chain.pem'),
requestCert: true,
rejectUnauthorized: true},app);
app.get("/express", function(request, response){
response.end("Express Response");
});
server.listen(8082);
我想设置 rejectUnauthorized: true 因为我读到禁用它会使客户端/服务器通信容易受到 MITM 攻击。对于客户端,我使用 request 模块发出 https GET 请求,如下所示:
var path = require('path');
var requests = require('request');
var fileSystem = require('fs');
var checkRequestOpts = {
url: "https://example.com:8082/express",
agentOtions: {
ca: fileSystem.readFileSync(__dirname + '/chain1.pem')
},
method: 'GET',
json: true,
formData: {
'x': 100,
'y': 500,
'z': 97
}
};
requests(checkRequestOpts, function(err, sr, rb)
{
if(err)
console.log('Error occured' + err);
else
{
console.log('Response: ' + rb);
}
});
但是,当我运行客户端应用程序时,它会因错误而崩溃
Error occuredError: write EPROTO 140593052855168:error:14094410:SSL
routines:ssl3_read_bytes:sslv3 alert handshake
failure:../ssl/record/rec_layer_s3.c:1399:SSL alert number 40
服务器不必向浏览器提供内容,它只需要与客户端节点应用程序一起工作。它在我设置 rejectUnauthorized: false 时有效,但在设置为 true 时无效。 如果有人可以帮助我解决这个问题或提供任何可能的解决方案,我将非常感激。谢谢!
【问题讨论】:
标签: node.js express ssl ssl-certificate lets-encrypt