我在设置节点服务器时遇到问题,让我们对证书进行加密。我正在使用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攻击。对于客户端,我正在使用请求模块发出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时,它就不会起作用。如果有人可以帮助我解决这个问题或提供任何可能的解决方案,我将非常感谢。谢谢!
本质上,您已经混淆了ca
,cert
和key
,这是一个非常常见的错误。
这里有一些资源可供参考:
key
指 privkey.pem
cert
指的是串联的cert.pem
AND chain.pem
(又名fullchain.pem
)您应该忽略,ca
因为它ca
指的是证书颁发机构,root.pem
如果您使用的是企业或军事对等证书验证,则应放在该位置。
rejectUnauthorized: true
正在禁用安全检查。您不想要这个。您要rejectUnauthorized: false
(默认)。requestCert: true
仅用于对等证书验证。您不想要这个。
另外,您可能更喜欢使用greenlock-express.js(让我们的Node.js / express.js的Encrypt / ACME客户端)可以不必首先进行任何手动工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句