У меня проблема с настройкой сервера узлов с помощью зашифрованных сертификатов.Я использую 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.Я был бы очень благодарен, если бы кто-то мог помочь мне в этом или дать какие-либо подсказки для возможного решения.Спасибо!