Я пытаюсь сделать POST-запрос к определенному домену (я буду называть его api.example.com/base), но я не могу пройти условную проверку SSL-сертификата nodejs в модуле tls . Я могу сделать тот же POST-запрос в Curl без проблем, и я могу делать POST-запросы к другим доменам в nodejs отлично, но не для этого конкретного домена (который снова работает в Curl).
Запрос POST:
function PostReq() {
let chunks = [], resData = '';
const postData = decodeURIComponent(qs.stringify({
property1: 'value1',
property2: 'value2'
}));
const options = {
headers: {
host: 'api.example.com',
path: '/base',
port: 443,
method: 'POST',
'Content-Type': 'application/x-www-form-urlencoded;',
'Content-Length': Buffer.byteLength(postData),
}
};
const reqPost = https.request(options, (res) => {
res.setEncoding('utf8');
if (res.statusCode === 200) {
console.log('got successfull http response');
res.on('data', (chunk) => {
console.log('getting chunks...');
chunks.push(chunk);
});
res.on('end', () => {
resData = Buffer.concat(chunks).toString();
console.log('response body data: ', resData);
});
} else {
console.error('received http status code: ', res.Statuscode);
}
});
reqPost.write(postData);
reqPost.on('error', (err) => {
console.error('error: ', err);
});
reqPost.end();
}
PostReq();
Сообщение об ошибке:
Error [ERR_TLS_CERT_ALTNAME_INVALID]: Hostname/IP does not match certificate's altnames: Host: api.example.com. is not in the cert's altnames: mydomain.com, DNS:www.mydomain.com
at Object.checkServerIdentity (tls.js:283:12)
at TLSSocket.onConnectSecure (_tls_wrap.js:1331:27)
at TLSSocket.emit (events.js:223:5)
at TLSSocket._finishInit (_tls_wrap.js:794:8)
at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:608:12) {
reason: "Host: api.example.com. is not in the cert's altnames: mydomain.com, DNS:www.mydomain.com"
Стек:
- nodejs
- expressjs
- nginx
- nginx обратный прокси
- letsencrypt ssl сертификат
Нет ошибок в журнале nginx или letsencrypt, поэтому все в порядке.
Я попытался установить для параметра конфигурации NPM ssl-strict значение false, но это не помогло. Существует решение, которое, вероятно, работает, которое устанавливает значение rejectUnauthorized на false , но это вызывает проблемы безопасности ser ios, которые я пытаюсь избежать, поэтому буду благодарен, если кто-то знает, что здесь происходит и как это исправить.