Forum général.hors-sujets HAProxy et SSL

Posté par  . Licence CC By‑SA.
Étiquettes :
1
5
avr.
2020

Bonjour,

Pour passer le temps confiné, j'ai essayé d'installer un serveur proxmox avec plusieurs containers. Un des containers est une instance haproxy qui transmet la requête à l'un des autres container selon le nom de domaine.

Cela fonctionne bien en http puisque selon le nom de domaine, le serveur nginx affiche la page souhaitée.

Par contre lorsque je souhaite mettre en place un certificat Let's encrypt cela ne fonctionne pas du tout et je ne comprends pas pourquoi :-(

Firefox et autres navigateurs affichent :

Échec de la connexion sécurisée

Une erreur est survenue pendant une connexion à nginx.test.fr.

La page que vous essayez de consulter ne peut pas être affichée car l’authenticité des données reçues ne peut être vérifiée.

Pour installer let's encrypt sur le serveur Haproxy et fournir les certificats j'ai suivi ce tutorial https://serversforhackers.com/c/letsencrypt-with-haproxy

Est-ce que vous avez une idée pour savoir quoi regarder ?

Merci

  • # des pistes

    Posté par  . Évalué à 4.

    veux tu que letsencrypt soit sur ton instance HAPROXY ? ou sur le serveur final (backend) ?

    si tu veux que ce soit le serveur final, il faut faire du proxy TCP pour le port 443,
    ainsi les connexions arrivent directement au serveur final

    mais je relis ton post et vois que le tutu parle bien d'avoir le letsencrypt sur le serveur qui gere haproxy.

    de plus, tu sembles utiliser un domaine test.fr
    je doute que letsencrypt puisse revenir chez toi par ce domaine (mais c'était peut-être pour ne pas dévoiler ton vrai domaine ici)

    autre piste, tu as vu que le tutu est découpé en 3 parties :
    * l'installation de base, qui intercepte TOUT le trafic sur le port 80 à la recherche du l'adresse .acme….
    * la gestion du certificat sur le disque (concatenation pour haproxy)
    * config qui contient enfin le certificat et va gérer le cas du renouvellement.

    • [^] # Re: des pistes

      Posté par  . Évalué à 1.

      L'objectif était de disposer des serveurs sur le serveur Haproxy puisque cela évite d'avoir à configurer tous les serveurs derrière.

      Je me rends compte que l'anomalie ne vient pas de Haproxy mais peut-être d'iptables puisque j'ai le résultat suivant sur le serveur proxmox :

      openssl s_client -connect globalsign.ssllabs.com
      140500132107392:error:0200206E:system library:connect:Connection timed out:../crypto/bio/b_sock2.c:110:
      140500132107392:error:2008A067:BIO routines:BIO_connect:connect error:../crypto/bio/b_sock2.c:111:
      connect:errno=110

      Il n'est donc pas possible d'établir des connexions sécurisées, c'est pas bon signe…

      • [^] # Re: des pistes

        Posté par  (site web personnel) . Évalué à 1. Dernière modification le 06 avril 2020 à 09:23.

        Un telnet passe ?
        telnet linuxfr.org 443
        Sinon effectivement c'est que tu es bloqué en sortie.

        • [^] # Re: des pistes

          Posté par  . Évalué à 1. Dernière modification le 07 avril 2020 à 17:00.

          J'ai tout réinstallé et maintenant j'arrive à contacter un serveur distant sur le port 443

          # telnet linuxfr.org 443
          # openssl s_client -connect globalsign.ssllabs.com:443

          En installant le serveur nginx de base, sans installer les certificats, j'arrive bien à consulter la page par défaut en http. Par contre dès que je passe en https j'ai une anomalie :

          Une erreur est survenue pendant une connexion à cloud.mon_domaine.fr. PR_END_OF_FILE_ERROR

          Je vais creuser davantage

          • [^] # Re: des pistes

            Posté par  . Évalué à 3. Dernière modification le 07 avril 2020 à 17:17.

            alors, tu parles de NGINX mais tu veux mettre en place ton letsencrypt sur un haproxy

            ton problème pourrait venir de là.

            dans la logique des choses, tu devrais avoir

                                                 | -> machine privée A, IP A, nginx
            IP publique -> haproxy + letsencrypt |--> machine privée B, IP B, nginx
                                                 |-> machine privée A, IP A, nginx

            le paquet arrive sur le haproxy, decode le debut du ssl (SNI), puis selon le domaine, sélectionne le bon certificat, puis envoie le reste de la requête au bon serveur sur le réseau privé

            et dans tes precedents posts, tu sembles vouloir mettre haproxy ET nginx sur la meme machine.

            tu sais que nginx sait gérer le multidomaine et le ssl tout seul ?

            • [^] # Re: des pistes

              Posté par  . Évalué à 1.

              effectivement, j'ai exactement le même schéma que tu présente.

              j'ai généré un seul certificat avec les deux domaines à gérer mais cela ne fonctionne pas et je ne sais pas pourquoi, ce qui est embêtant pour trouver une solution.

              des machines privées c'est assez pratique car on peut sauvegarder facilement par snapshot et avoir une configuration indépendante pour des besoins spécifiques. c'est pour ça que j'aimerai arriver à le mettre en place.

          • [^] # Re: des pistes

            Posté par  . Évalué à 1.

            J'ai mis en place le certificat let's encrypt et j'ai exactement la même erreur :

            Une erreur est survenue pendant une connexion à cloud.mon_domaine.fr.

            La page que vous essayez de consulter ne peut pas être affichée car l’authenticité des données reçues ne peut être vérifiée.

            Est-ce qu'une âme charitable pourrait m'apporter des informations pour résoudre ce problème ?

            • [^] # Re: des pistes

              Posté par  . Évalué à 2.

              ton certificat est mis où ?

              est-il complet ?
              dans la documentation il est bien dit qu'après obtention par letsencrypt, il faut concatènera la clef, le certificat et la CA dans un SEUL fichier.

              c'est ensuite ce fichier que tu donnes à haproxy dans le fichier de configuration

              • [^] # Re: des pistes

                Posté par  . Évalué à 1.

                Lorsque je consulte la page en HTTPS sans le certificat sur HAProxy :

                Une erreur est survenue pendant une connexion à conf.controle-arc.fr. PR_END_OF_FILE_ERROR

                Une fois le certificat obtenu par certbot j'ai fait :

                cat /etc/letsencrypt/live/conf.mon_domaine.fr/fullchain.pem /etc/letsencrypt/live/conf.mon_domaine.fr/privkey.pem > /etc/haproxy/certs/conf.mon_domaine.pem

                Ensuite j'utilise le certificat dans la configuration de HAProxy :
                frontend https_bind
                bind *:443 ssl crt /etc/haproxy/certs/conf.mon_domaine.fr.pem

                Je recharge HAProxy systemctl restart haproxy et là le message indique :

                Échec de la connexion sécurisée

                Une erreur est survenue pendant une connexion à conf.mon_domaine.fr.

                Comme je n'arrive pas à savoir d'où vient le problème je peux te fournir les accès en privé car là je suis complètement démoralisé :'-(

                • [^] # Re: des pistes

                  Posté par  . Évalué à 1.

                  Ahhh j'ai trouvé ! À force de modifier les fichiers le hostname du serveur n'était plus identique à celui de l'URL. En HTTP il arrivait à charger la page mais en HTTPS il n'aimait pas du tout. Quelle bêtise de ma part :(

                  Dommage que l'erreur ne soit pas plus explicite dans le navigateur mais au moins c'est résolu et je vais pouvoir continuer mes tests.

                  Merci pour ton aide !

                  • [^] # Re: des pistes

                    Posté par  . Évalué à 2.

                    le navigateur devrait te dire que le certificat présenté n'est pas celui pour le domaine demandé

                    enfin firefox le fait après avoir cliquer sur "en savoir plus" ou afficher le detail
                    sinon en effet, il te dit juste que c'est pas "sécurisé"

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.