Es kann sehr verlockend sein, es zu tun rejectUnauthorized: false
oder process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
aber nicht zu tun! Es setzt Sie Menschen in den mittleren Angriffen aus.
Die anderen Antworten sind insofern richtig, als das Problem in der Tatsache liegt, dass Ihr Zertifikat "von einer zwischengeschalteten Zertifizierungsstelle signiert" ist. Hierfür gibt es eine einfache Lösung, für die keine Bibliothek eines Drittanbieters wie das ssl-root-cas
Einfügen zusätzlicher CAs in den Knoten erforderlich ist .
Die meisten https-Clients in Knoten unterstützen Optionen, mit denen Sie pro Anforderung eine Zertifizierungsstelle angeben können, die aufgelöst wird UNABLE_TO_VERIFY_LEAF_SIGNATURE
. Hier ist ein einfaches Beispiel mit dem integrierten https
Modul des Knotens .
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
})
Wenn Sie jedoch die SSL-Einstellungen auf Ihrem Hosting-Server konfigurieren können, besteht die beste Lösung darin, die Zwischenzertifikate Ihrem Hosting-Anbieter hinzuzufügen. Auf diese Weise muss der Client-Anforderer keine Zertifizierungsstelle angeben, da diese im Server selbst enthalten ist. Ich persönlich benutze namecheap + heroku. Der Trick für mich war, eine CRT-Datei mit zu erstellen cat yourcertificate.crt bundle.ca-bundle > server.crt
. Ich habe diese Datei dann geöffnet und nach dem ersten Zertifikat eine neue Zeile hinzugefügt. Sie können mehr unter lesen
https://www.namecheap.com/support/knowledgebase/article.aspx/10050/33/installing-an-ssl-certificate-on-heroku-ssl