[RÉSOLU] Erreur certificat LE sous-domaine

Bonjour tout le monde !

Je sais que c’est un sujet largement abordé au sein du forum mais je n’ai malheureusement pas trouvé de solution pour mon cas particulier…

Depuis que j’ai installé un routeur (archer c7 avec DD-WRT à jour) derrière ma box (red sfr), mes certificats ne se renouvelaient plus.
J’ai parcouru les forums yunohost/dd-wrt/sfr en essayant toute sorte de solutions (hairpining, dns, fichier hosts, règle iptables…).
J’ai finalement réussi hier soir à réinstaller un certificat let’s encrypt sur mon domaine principal avec l’option --no-checks.
Cependant, pour mes sous-domaines, rien à faire.

La commande yunohost domain cert-install sous.domain.tld --no-checks --debug renvoie l’erreur ci-dessous :

1921 INFO Starting new HTTP connection (1): xx.170.34.200
11926 WARNING Timed out when server tried to contact itself through HTTP using public IP address (domain sous.domain.tld with ip xx.170.34.200). You may be experiencing hairpinning issue or the firewall/router ahead of your server is misconfigured
.                                                                                                                                                                                                                                                      
11927 INFO Now attempting install of certificate for domain sous.domain.tld!
11929 INFO Nginx configuration file for ACME challenge already exists for domain, skipping.
11930 DEBUG Making sure tmp folders exists...
12128 DEBUG cannot retrieve public IPv6
Traceback (most recent call last):                                                                                                                                                                                                                     
  File "/usr/lib/moulinette/yunohost/domain.py", line 273, in get_public_ip                                                                                                                                                                            
    return urlopen(url).read().strip()                                                                                                                                                                                                                 
  File "/usr/lib/python2.7/urllib.py", line 87, in urlopen                                                                                                                                                                                             
    return opener.open(url)                                                                                                                                                                                                                            
  File "/usr/lib/python2.7/urllib.py", line 213, in open                                                                                                                                                                                               
    return getattr(self, name)(url)                                                                                                                                                                                                                    
  File "/usr/lib/python2.7/urllib.py", line 443, in open_https                                                                                                                                                                                         
    h.endheaders(data)                                                                                                                                                                                                                                 
  File "/usr/lib/python2.7/httplib.py", line 1035, in endheaders                                                                                                                                                                                       
    self._send_output(message_body)                                                                                                                                                                                                                    
  File "/usr/lib/python2.7/httplib.py", line 879, in _send_output                                                                                                                                                                                      
    self.send(msg)                                                                                                                                                                                                                                     
  File "/usr/lib/python2.7/httplib.py", line 841, in send                                                                                                                                                                                              
    self.connect()                                                                                                                                                                                                                                     
  File "/usr/lib/python2.7/httplib.py", line 1242, in connect                                                                                                                                                                                          
    HTTPConnection.connect(self)                                                                                                                                                                                                                       
  File "/usr/lib/python2.7/httplib.py", line 822, in connect                                                                                                                                                                                           
    self.timeout, self.source_address)                                                                                                                                                                                                                 
  File "/usr/lib/python2.7/socket.py", line 571, in create_connection                                                                                                                                                                                  
    raise err                                                                                                                                                                                                                                          
IOError: [Errno socket error] [Errno 101] Network is unreachable                                                                                                                                                                                       
12146 INFO Prepare key and certificate signing request (CSR) for sous.domain.tld...
16300 INFO Saving to /tmp/acme-challenge-private/sous.domain.tld.csr.
16302 INFO Now using ACME Tiny to sign the certificate...
16303 INFO Parsing account key...
16344 INFO Parsing CSR...
16374 INFO Registering account...
17483 INFO Already registered!
17484 INFO Verifying sous.domain.tld...
148356 ERROR Wrote file to /tmp/acme-challenge-public/ZJqM2ebo0hO3Rjk49WPuC2IHLaShUJA7ukHKLK6F3II, but couldn't download http://sous.domain.tld/.well-known/acme-challenge/ZJqM2ebo0hO3Rjk49WPuC2IHLaShUJA7ukHKLK6F3II
148357 ERROR Certificate installation for sous.domain.tld failed !
Exception: [Errno 22] Signing the new certificate failed                                                                                                                                                                                               
148357 DEBUG action [15670.1] ended after 147.244s
148358 DEBUG lock has been released

Je ne sais plus quoi tenter… je vois que LE essaye de récupérer l’ipv6 du serveur mais je n’en ai pas et il continue après de toute façon…
J’ai vérifié mes redirections de port, mes dns, ma conf nginx… tout à l’air bon !

Si vous avez des idées je suis preneur =)
Merci !!

Salut,

J’ai eu à peu près le même problème que toi dernièrement.

Dans tes enregistrements DNS, en as-tu un qui concerne l’IPv6 (genre @ AAAA
IPv6) qui pointe vers ton (sous) domaine que tu utilises pour yunohost.

Si oui, supprime le, attend un peu le temps propagation et re-test.

Salut @gannonwoto !

J’avais vu lu ton topic avec pas mal d’espoir mais malheureusement je n’ai aucun enregistrement DNS ipv6 (ni aucune adresse ipv6 sur mon réseau étant donné que red sfr ne gère pas l’ipv6…).

Bonjour,

As-tu essayé de bloquer l’ipv6 sur ton routeur même si ta box SFR ne gère pas l’IPV6 ?

Tout bête aussi, as-tu essayé d’ouvrir tout les ports du routeur ? (juste pour tester)

Salut !

la box est en mode bridge et l’ipv6 est bien désactivée dans DD-WRT sur le routeur.

J’ai placé Yunohost en DMZ et j’ai même désactiver le pare-feu du serveur mais sans succès.
La même erreur se répette…

J’ai vraiment l’impression que la solution se trouve dans cette erreur :
Timed out when server tried to contact itself through HTTP using public IP address
et que c’est bien un problème au sein du réseau local mais je suis à court d’idée (mes connaissances réseaux étant limitées).

Merci d’essayer en tous cas :slight_smile:

Je connais pas la box sfr, elle aurais pas un pare feu avec des règles prédéfinis ?
As tu essaye juste pour le test de le désactivé ?

Ou alors essaye de pas mettre en bridge ton routeur, tu laisse tout d’ouvert sur ta box et tu paramètre le routeur.

Après vue que tu as essayer en dmz c’est bizzare

Ce qui est franchement bizare c’est que ca fonctionne pour ton domaine principale.
T’es vraiment sure de l’enregistrement DNS de ton sous domaine ?

www.mondomaine.fr 1800 IN A ton-ip-publique

Et si tu créer un fichier /tmp/acme-challenge-public/test avec n’importe quel contenu, tu arrive à y accéder avec http://ton-ip-publique/.well-known/acme-challenge/test ?

Edit:
biiipp, je suis c*, oui tu vas y arriver puisque tu as pu le faire pour ton domaine principale. Enfin ca coute rien de ré-essayer.
Et sinon essaye avec http://ton-sous-domaine/.well-known/acme-challenge/test mais avec la 4G de ton smartphone par exemple (pour ne pas avoir besoin de modifier ton /etc/hosts)

normalement en mode bridge la box ne gère plus rien si ?

ça sera ma dernière solution car ça veut dire reparamétrer tout le réseau ^^

j’ai suivi les enregistrements DNS conseillé par yunohost :

@ 3600 IN A 111.222.33.44
* 3600 IN A 111.222.33.44 

J’ai effectivement accès au fichier depuis mon téléphone en 4G et en http.

Après une période de résignation, j’ai re-parcouru le forum et je suis tombé sur :

J’ai adapté le tuto à ma situation et n’ai effectué que l’étape 6. Tous mes sous-domaines sont repassés à un certificat Let’s Encrypt valide à la première tentative de renouvellement !
C’était donc bien un problème de hairpinning du routeur.