Comment puis-je obtenir un certificat Let's Encrypt pour un serveur non public?

9

J'ai un serveur Apache privé, accessible uniquement depuis mon réseau local sur le port 443, avec un certificat StartSSL.

Depuis la sortie de Firefox 51, je ne peux plus me connecter car le certificat racine StartSSL a été supprimé du magasin de clés de confiance .

J'ai envisagé de migrer vers Let's Encrypt, mais cela semble nécessiter un serveur HTTP public. Est-il possible d'utiliser Let's Encrypt dans ma situation?

Je préfère éviter de payer pour un certificat SSL, si possible.

Calimo
la source

Réponses:

10

Si vous contrôlez DNS pour le domaine, vous pouvez utiliser la méthode de défi dns-01 pour prouver la propriété en créant un enregistrement TXT.

Cela peut être fait manuellement ou automatisé. Je pense que même le client officiel certbot prend désormais en charge le DNS-01.

Un rapide Google me montre un tas de tutoriels utilisant divers scripts et clients, donc je ne les répéterai pas tous ici. Celui-ci automatise spécifiquement les certificats intranet.

Martijn Heemels
la source
Êtes-vous sûr que cela fonctionne vraiment sur l'intranet? Que faire si je remplace simplement /etc/resolv.conf de l'hôte sur lequel le certbot s'exécute?
peterh
@peterh oui, cela fonctionne sur l'intranet selon la documentation.
BE77Y
@peterh Je ne suis pas sûr de ce que vous tentez d'écraser resolv.conf. L'enregistrement TXT doit être créé dans un DNS public car les serveurs de validation Let's Encrypt, et non le client certbot, doivent pouvoir résoudre l'enregistrement. Si tout se passait localement, la validation ne valait pas grand chose. Le serveur pour lequel le certificat est émis peut cependant être complètement privé.
Martijn Heemels
@MartijnHeemels Eh bien, maintenant je ne comprends plus mon ancien commentaire. Je crée des certificats intranet avec letsencrypt en trompant ses DNS sur un chemin, qu'il montre un troisième serveur, avec ip publique , pour toutes les requêtes * .intranet.mydomain - mais cela ne concerne que les serveurs DNS sortants du letsencrypt . J'ai obtenu leurs IP en tcpdump-ing le trafic DNS entrant. Bind9 a les soi-disant "vues" pour cela. Ainsi, ce troisième serveur peut obtenir des certificats * .intranet.mydomain avec une configuration apache délicate réglée pour cela. Après cela, les clés peuvent être mises en miroir dans l'intranet avec des scripts rsync.
peterh
@MartijnHeemels Je fais cela parce qu'à l'époque j'avais des problèmes pour automatiser l'autorisation basée sur la zone du letsencrypt. Peut-être que cela fonctionnerait maintenant, mais honnêtement, je ne suis pas très satisfait de letsencrypt en général (enfin ... avec les problèmes de son automatisation, bien sûr, je suis très heureux qu'il existe) et je ne veux pas le faire fonctionner à nouveau , ce que j'ai fait une fois. (Je pense que nous connaissons tous l'attitude des patrons à propos de "faire mieux" des tâches comme celle-ci.)
peterh - Réintégrer Monica
5

Le client certbot a la capacité d'effectuer un défi DNS manuel. La réponse (actuellement la deuxième plus populaire) trouvée dans cette question Comment utiliser la validation de défi DNS Let's Encrypt? a tous les détails, et je viens de le tester comme fonctionnel.

Fondamentalement, vous exécutez cette commande et suivez les instructions:

certbot -d site.your.dom.ain --manual --preferred-challenges dns certonly
vick
la source
0

Vous avez mentionné que vous utilisez Apache, mais si vous n'y êtes pas lié, il existe un chemin très facile à utiliser en utilisant Caddyserver .

Il vous suffit de définir un Caddyfileavec le contenu suivant:

example.com
tls {
    dns cloudflare
}

Mentionnez le fournisseur DNS que vous utilisez dans la configuration et configurez les clés API que vous utilisez via des variables d'environnement. Tirez parti de la liste des fournisseurs pris en charge dans la documentation .

C'est tout ce qu'il faut. La sortie au premier démarrage sera quelque chose comme:

Activating privacy features... 2019/10/21 13:36:48 [INFO][cache:0xc0001c8190] Started certificate maintenance routine
[INFO][cache:0xc000092730] Started certificate maintenance routine
2019/10/21 13:24:49 [INFO][example.com] Obtain certificate
2019/10/21 13:24:49 [INFO] [example.com] acme: Obtaining bundled SAN certificate
2019/10/21 13:24:50 [INFO] [example.com] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz-v3/876706285
2019/10/21 13:24:50 [INFO] [example.com] acme: Could not find solver for: tls-alpn-01
2019/10/21 13:24:50 [INFO] [example.com] acme: Could not find solver for: http-01
2019/10/21 13:24:50 [INFO] [example.com] acme: use dns-01 solver
2019/10/21 13:24:50 [INFO] [example.com] acme: Preparing to solve DNS-01
2019/10/21 13:24:50 [INFO] cloudflare: new record for example.com, ID XXX
2019/10/21 13:24:50 [INFO] [example.com] acme: Trying to solve DNS-01
2019/10/21 13:24:50 [INFO] [example.com] acme: Checking DNS record propagation using [127.0.0.11:53]
2019/10/21 13:24:50 [INFO] Wait for propagation [timeout: 2m0s, interval: 2s]
2019/10/21 13:24:50 [INFO] [example.com] acme: Waiting for DNS record propagation.
2019/10/21 13:24:52 [INFO] [example.com] acme: Waiting for DNS record propagation.
2019/10/21 13:24:55 [INFO] [example.com] The server validated our request
2019/10/21 13:24:55 [INFO] [example.com] acme: Cleaning DNS-01 challenge
2019/10/21 13:24:55 [INFO] [example.com] acme: Validations succeeded; requesting certificates
2019/10/21 13:24:56 [INFO] [example.com] Server responded with a certificate.
done.

Serving HTTPS on port 443
https://example.com

2019/10/21 13:36:48 [INFO] Serving https://example.com

Serving HTTP on port 80
http://example.com

2019/10/21 13:36:48 [INFO] Serving http://example.com
Gregor Müllegger
la source