Мы находимся в процессе переноса некоторых наших бэкэндов на узел и столкнулись со следующей проблемой (как для linux, так и для ma c). Это наш curl, который работает:
curl --insecure --cert-type pem --cert CERT.pem "https://USER:PASS@www.website.com/info"
В python мы используем библиотеку запросов (которая также работает):
import requests
r = requests.get('https://USER:PASS@www.website.com/info', auth=('USER', 'PASS'), cert='CERT.pem')
Как я уже упоминал, мы попробовали это в JS безуспешно:
const request = require('request')
const options = {
url: "https://www.website.com/info",
auth: {
'user': 'USER',
'pass': "PASS",
'sendImmediately': false
},
insecure: true,
cert: fs.readFileSync("CERT.pem")
};
request.get(options, (err, res, body) => {
if (err) { return console.log(err); }
console.log(res)
console.log(body.url);
console.log(body.explanation);
resolve(JSON.parse(body.explanatio))
});
Мы получаем следующий результат:
Error: write EPROTO 4514557376:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:../deps/openssl/openssl/ssl/record/rec_layer_s3.c:1536:SSL alert number 40
at WriteWrap.onWriteComplete [as oncomplete] (internal/stream_base_commons.js:87:16) {
errno: 'EPROTO',
code: 'EPROTO',
syscall: 'write'
}
Я понимаю, что это на самом деле не проблема JS, однако я не совсем понимаю SSL проблема и как это исправить. Для действительно ценят внутреннюю информацию о том, как продолжить отладку / устранение проблемы.