1 votes

Noeud jetant une erreur "impossible de vérifier le premier certificat" lors de la récupération depuis l'api

J'ai exécuté une api pour moi-même à travers un proxy nginx, je n'ai pas eu de problèmes avec cela jusqu'à aujourd'hui, lorsque j'ai renouvelé son certificat. Le certificat est de Let's Encrypt, j'ai fait le fichier que je donne à nginx bundle des certificats client, intermédiaire et racine.

Je peux accéder à l'api sans problème sans avertissements dans le navigateur, mais dans node, j'obtiens UNABLE_TO_VERIFY_LEAF_SIGNATURE, et en python, Impossible de se connecter à l'hôte api.furry.bot:443 ssl:None [[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)]

Configuration de Nginx pour ssl:

##
# Paramètres SSL
##

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Abandon de SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
ssl_certificate     /etc/ssl/main.chained.crt;
ssl_certificate_key /etc/ssl/main.key;
ssl_ciphers         HIGH:!aNULL:!MD5;

La clé correspond au premier certificat de la chaîne, et le fichier est structuré comme suit:
certificat serveur
certificat intermédiaire
certificat racine

Je ne peux pas le faire fonctionner correctement, je ne veux pas simplement désactiver la vérification ssl dans mon application node, et je ne peux pas éditer correctement l'implémentation python, j'ai l'impression que les certificats intermédiaires et racine ne sont pas correctement récupérés, mais je n'ai aucune idée.

Les serveurs vers lesquels nginx fait office de proxy sont des serveurs node express, et un serveur flask (qui n'est pas pertinent pour cela).

La configuration pour le site en question est (toutes les autres configurations sont essentiellement les mêmes, sauf bien sûr default_server):

server {
    listen 443 default_server ssl;
    listen [::]:443 default_server ipv6only=on ssl;
    server_name furry.bot *.furry.bot;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
     }
}

Le ssl est entièrement du côté nginx, tout ce qui se passe en arrière-plan est en http.

Cette erreur n'apparaît que sur le serveur Ubuntu où ils tournent habituellement, tout se déroule bien sans erreurs sur mon ordinateur portable Windows local.

(Ne PAS faire cela.)
J'ai temporairement mis

process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0;

bien que je sais que ce n'est pas une bonne idée, je n'ai pas d'autres options en ce moment.

1voto

Donovan_DMC Points 23

La façon dont j'ai fini par résoudre ce problème a été d'enchaîner mon certificat personnel avec le certificat intermédiaire de l'autorité de certification. (Je le faisais dans le mauvais ordre auparavant)

Par exemple, j'ai mon certificat du site, et le certificat intermédiaire.

Je les joins ensemble pour former un certificat enchaîné en plaçant le certificat du site au-dessus du certificat intermédiaire, comme ceci, et maintenant je n'ai plus d'erreurs UNABLE_TO_VERIFY_LEAF_SIGNATURE.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X