Openssl: fout “zelfondertekend certificaat in certificaatketen”

Toen ik openssl API’s gebruikte om het servercertificaat (zelfondertekend) te valideren, kreeg ik de volgende foutmelding:

fout 19 bij 1 diepte opzoeken: zelfondertekend certificaat in certificaat
ketting

Volgens openssl documentatieis deze fout (19)

“X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN: zelfondertekend certificaat in
certificaatketen – de certificaatketen kan worden opgebouwd met behulp van de
niet-vertrouwde certificaten, maar de root kon niet lokaal worden gevonden.”

Waarom treedt deze fout op? Problemen met mijn servercertificaat?


Antwoord 1, autoriteit 100%

Je hebt een certificaat dat zelfondertekend is, dus het is standaard niet-vertrouwd, daarom klaagt OpenSSL. Deze waarschuwing is eigenlijk een goede zaak, omdat dit scenario ook kan ontstaan door een man- in-the-middle-aanval.

Om dit op te lossen, moet je het installeren als een vertrouwde server. Als het is ondertekend door een niet-vertrouwde CA, moet u ook het certificaat van die CA installeren.

Bekijk deze linkover het installeren van zelf- ondertekende certificaten.


Antwoord 2, autoriteit 74%

Hier is een one-liner om te verifiëren dat het certificaat moet worden ondertekend door een specifieke CA:

openssl verify -verbose -x509_strict -CAfile ca.pem certificate.pem

Hiervoor hoeft u CA nergens te installeren.

Zie Hoe werkt een SSL-certificaat kettingbundel? Voor details en corrigeer certificaatketenafhandeling.


Antwoord 3, Autoriteit 13%

Als u charles probeert te bouwen en proberen een Docker Container Dan krijg je de meeste waarschijnlijk deze fout.

Zorg ervoor dat u Charles (MacOS) uitschakelt onder proxy -> macOS proxy

Charles is een

HTTP proxy / http-monitor / omgekeerde proxy waarmee een ontwikkelaar alle HTTP- en SSL / HTTPS-verkeer tussen hun machine en internet kan bekijken.

Zoiets kan evenwel hetzelfde probleem veroorzaken.


Antwoord 4, Autoriteit 9%

De oplossing voor de fout is om deze regel toe te voegen aan de bovenkant van de code:

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

Other episodes