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.