Mungkin sangat menggoda untuk melakukan rejectUnauthorized: false
atau process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
tidak melakukannya! Itu membuat Anda terkena serangan tengah.
Jawaban lainnya benar karena masalahnya terletak pada kenyataan bahwa sertifikat Anda "ditandatangani oleh perantara CA". Ada solusi mudah untuk ini, yang tidak memerlukan perpustakaan pihak ketiga suka ssl-root-cas
atau menyuntikkan CA tambahan ke dalam node.
Sebagian besar https klien di opsi dukungan simpul yang memungkinkan Anda menentukan CA per permintaan, yang akan diselesaikan UNABLE_TO_VERIFY_LEAF_SIGNATURE
. Berikut adalah contoh sederhana menggunakan https
modul built-int node .
import https from 'https';
const options = {
host: '<your host>',
defaultPort: 443,
path: '<your path>',
// assuming the bundle file is co-located with this file
ca: readFileSync(__dirname + '/<your bundle file>.ca-bundle'),
headers: {
'content-type': 'application/json',
}
};
https.get(options, res => {
// do whatever you need to do
})
Namun, jika Anda dapat mengkonfigurasi pengaturan ssl di server hosting Anda, solusi terbaik adalah menambahkan sertifikat perantara ke penyedia hosting Anda. Dengan begitu pemohon klien tidak perlu menentukan CA, karena itu termasuk dalam server itu sendiri. Saya pribadi menggunakan namecheap + heroku. Triknya bagi saya adalah membuat satu file .crt cat yourcertificate.crt bundle.ca-bundle > server.crt
. Saya kemudian membuka file ini dan menambahkan baris baru setelah sertifikat pertama. Anda dapat membaca lebih lanjut di
https://www.namecheap.com/support/knowledgebase/article.aspx/10050/33/installing-an-ssl-certificate-on-heroku-ssl