Let’s Encrypt Zertifikate für lokale IP Adressen

Let’s Encrypt Zertifikate für lokale IP Adressen

Einführung

In meinem vorherigen Beitrag habe ich beschrieben, wie wir SNI, nginx und Let’s Encrypt dafür verwenden, um externe Dienste auf öffentlichen IP Adressen zu betreiben.

Aber was ist mit lokalen, privaten IP Adressen. Im nachfolgenden Fall so eine lokale Gitlab Installation über let’s encrypt Zertifikate abgesichert werden. Dies ist u.a. notwendig, weil z.B. Docker sich ohne Anpassung nur noch mit Registries per SSL verbindet, die in korrektes Zertifikat erhalten.

Jeder der einmal selbst eine Chain mit self-signed Zertifikaten aufgesetzt hat, wird es zu schätzen wissen, wie viel Arbeit einem durch den nachfolgenden Ansatz erspart bleibt.

Folgende Domains werden verwendet:

gitlab.smartos.p22.de           192.168.168.230
mattermost.smartos.p22.de       192.168.168.230
plantuml.smartos.p22.de         192.168.168.230

Alle Domains mappen auf die identische (lokale) IP Adresse 192.168.168.230. Die IP Adresse selbst ist von außerhalb nicht erreichbar. Let’s Encrypt verwendet sogenannte Challenges um den Besitzt einer Domain zu verifizieren (siehe auch Let’s Encrypt – How It Works.

Im letzten Post haben wir die sogenannte HTTP Validation verwendet. Da unser Knoten von außen nicht erreichbar ist, können wir diese Variante nicht verwenden.

Stattdessen verwenden wir nachfolgend die sogenannten DNS Validation.

Aufruf von certbot

Der Aufruf des certbot tools sieht ähnlich aus:

certbot –expand –agree-tos –email admin@example.com -d gitlab.smartos.p22.de -d mattermost.smartos.p22.de -d plantuml.smartos.p22.de –manual –preferred-challenges dns certonly

Der große Unterschied ist --manual --preferred-challenges dns:

  • Wir wollen die Schritte manuell durchführen
  • Als Validation Challenge verwenden wir DNS

Der Ablauf ist dann wie folgt:

# certbot –expand –agree-tos –email admin@example.com -d gitlab.smartos.p22.de -d mattermost.smartos.p22.de -d plantuml.smartos.p22.de –manual –preferred-challenges dns certonly

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
Cert not yet due for renewal

You have an existing certificate that has exactly the same domains or certificate name you requested and isn't close to expiry.
(ref: /etc/letsencrypt/renewal/gitlab.smartos.p22.de.conf)

What would you like to do?
-------------------------------------------------------------------------------
1: Keep the existing certificate for now
2: Renew & replace the cert (limit ~5 per 7 days)
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Renewing an existing certificate
Performing the following challenges:
dns-01 challenge for gitlab.smartos.p22.de
dns-01 challenge for mattermost.smartos.p22.de
dns-01 challenge for plantuml.smartos.p22.de

-------------------------------------------------------------------------------
NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot in manual mode on a machine that is not
your server, please ensure you're okay with that.

Are you OK with your IP being logged?
-------------------------------------------------------------------------------
(Y)es/(N)o: y

-------------------------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.gitlab.smartos.p22.de with the following value:

CffCGXGf9D3ffuN0fbg8kYAsTwbGy7L-22VYu3Qum_A

Once this is deployed,
-------------------------------------------------------------------------------
Press Enter to Continue

-------------------------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.mattermost.smartos.p22.de with the following value:

34qILskl8XUKXcLRu2PNxvA_GegQJgcBsBRXOQtJoY4

Once this is deployed,
-------------------------------------------------------------------------------
Press Enter to Continue

-------------------------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.plantuml.smartos.p22.de with the following value:

4S9Q8WUZT3JpMt030ewSs4s9AW5Nz2DMgpWEIAOcY5I

Once this is deployed,
-------------------------------------------------------------------------------
Press Enter to Continue
Waiting for verification...
Cleaning up challenges
Generating key (2048 bits): /etc/letsencrypt/keys/0002_key-certbot.pem
Creating CSR: /etc/letsencrypt/csr/0002_csr-certbot.pem

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/gitlab.smartos.p22.de/fullchain.pem. Your
   cert will expire on 2017-06-21. To obtain a new or tweaked version
   of this certificate in the future, simply run certbot again. To
   non-interactively renew *all* of your certificates, run "certbot
   renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

TXT Resource Record

Was Let’s Encrypt nun verlangt ist, dass in dem entsprechenden DNS Server – der für die Domain p22.de zuständig ist – für jede Subdomain entsprechende TXT Resource Records erstellt wird.

Übrigens, einzelne TXT Records lassen sich auch direkt per CLI abfragen:

# host -t txt _acme-challenge.gitlab.smartos.p22.de

_acme-challenge.gitlab.smartos.p22.de descriptive text "CffCGXGf9D3ffuN0fbg8kYAsTwbGy7L-22VYu3Qum_A"

Nachbarbeiten

Nach dem Erstellen dieser Records bestätigt man die Domain mit Enter. Am Ende landet das entsprechende Zertifikat in /etc/letsencrypt/live/gitlab.smartos.p22.de/fullchain.pem.

Zur besseren Übersicht erstellen wir noch ein paar Softlinks:

gitlab.smartos.p22.de.crt -> /etc/letsencrypt/live/gitlab.smartos.p22.de/fullchain.pem
gitlab.smartos.p22.de.key -> /etc/letsencrypt/live/gitlab.smartos.p22.de/privkey.pem
mattermost.smartos.p22.de.crt -> /etc/letsencrypt/live/gitlab.smartos.p22.de/fullchain.pem
mattermost.smartos.p22.de.key -> /etc/letsencrypt/live/gitlab.smartos.p22.de/privkey.pem
plantuml.smartos.p22.de.crt -> /etc/letsencrypt/live/gitlab.smartos.p22.de/fullchain.pem
plantuml.smartos.p22.de.key -> /etc/letsencrypt/live/gitlab.smartos.p22.de/privkey.pem

Danach kann man die einzelnen https Adressen wie gewohnt in der Gitlab Konfiguration eintragen.

Philipp Haußleiter

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert