Zertifikat

Zertifikate vonLet’s Encrypt sind kostenlos. Wir wollen eines für unsere Domain erzeugen.

Es beginnt mit der Installation voncertbot. Die ist einfach, wir geben

sudo apt-get install certbot

in einem Terminalfenster ein.

Die Zertifizierung stellt zwei Herausforderungen:

  1. Es muss ein bestimmter Text-Eintrag im DNS der Domain vorhanden sein
  2. Auf dem Server, der unter diesem Domainnamen erreichbar ist, muss in einem bestimmten Verzeichnis eine Datei mit einem bestimmten Dateinamen und Inhalt liegen.

Für die zweite Herausforderung konfigurieren wir einen einfachenExpressServer in einem beliebigen Unterverzeichnis (im Beispiel express) der virtuellen Maschine. Mit der Eingabe folgender Kommandos

npm init -y
npm install express

erzeugen wir in diesem Verzeichnis eine package.json-Datei und installieren anschließend express:

Das Aufwändigste an dem Server ist seine Konfigurationsdatei server.js, die im Basisverzeichnis liegt und folgendes Aussehen hat:

const express = require('express');
const app = express();
app.use("/.well-known", express.static(".well-known"));
app.get('*', (req, res) => {
res.sendStatus(200)
});
app.listen(80, () => {
console.log('HTTP server running on port 80');
});
// starten mit sudo node server.js

Der ungewöhnliche Verzeichnisname .well-known wird für certbot benötigt. Wir legen deshalb dieses Verzeichnis auch im Dateibaum des Servers an. Zu Testzwecken können wir in diesem Verzeichnis eine beliebige html-Datei unterbringen. Das Verzeichnis sieht dann so aus:

Express-Server
Express-Server

Nach dem Starten des Express-Servers (sudo node server.js) sollte die HTML-Datei unter http://domainname/.well-known/index.html erreichbar sein. Dies ist Voraussetzung für die Zertifizierung.

Das Terminal-Kommando für eine Testzertifizierung ist:

sudo certbot certonly --manual -d *.nodeweb.tk,nodeweb.tk --test-cert

Beim allerersten Mal ist das Vorgehen etwas knifflig, daher die Testzertifizierung.

Der Ablauf am Bildschirm ist der folgende:

anton_beton@web-node-server:~$ sudo certbot certonly --manual -d *.nodeweb.tk,nodeweb.tk --test-cert
"Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
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/nodeweb.tk.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 nodeweb.tk
http-01 challenge for nodeweb.tk
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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.nodeweb.tk with the following value:
Le7uDyZlW3OZv1zklFSBlfCcurvzvCibon_oOimW8dM
Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"

An dieser Stelle die erste Herausforderung: Es soll im DNS ein TEXT Resource Record mit bestimmtem Inhalt für die Subdomain _acme-challenge vorhanden sein. Im DNS Management sieht das so aus:

Zertifikat DNS-challenge
Zertifikat DNS-challenge

Die ergänzten DNS-Einträge sind nicht sofort wirksam. Ein zu frühes Drücken auf ⏎ bricht die Zertifizierung ab. Den DNS-Status kann man z.B. hier abfragen. Wird hier der gewünschte TXT-Eintrag angezeigt, kann man getrost auf ⏎ drücken. Es geht weiter mit der zweiten Herausforderung:

"Create a file containing just this data:
V4wH9uEGJAvmCcGQJOLypYr8kMuVCEl1S05iqzyvv2M.xCd_mSgGAVbCIfp5Ol-Wd0omTFH-95f6HeVCmrdeHD8
And make it available on your web server at this URL:
http://nodeweb.tk/.well-known/acme-challenge/V4wH9uEGJAvmCcGQJOLypYr8kMuVCEl1S05iqzyvv2M
(This must be set up in addition to the previous challenges; do not remove,
replace, or undo the previous challenge tasks yet.)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue "

Im Verzeichnis ./.well-known soll das Unterverzeichnis acme-challenge und darin die Datei V4wH9uEGJAvmCcGQJOLypYr8kMuVCEl1S05iqzyvv2M angelegt werden. Inhalt dieser Datei soll die Zeichenkette V4wH9uEGJAvmCcGQJOLypYr8kMuVCEl1S05iqzyvv2M.xCd_mSgGAVbCIfp5Ol-Wd0omTFH-95f6HeVCmrdeHD8 sein.

Nachdem das alles, wie gewünscht, angelegt ist, können wir wieder auf ⏎ drücken. Wenn die Zertifizierung erfolgreich war, sieht die Meldung so aus:

"Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/nodeweb.tk/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/nodeweb.tk/privkey.pem
Your cert will expire on 2021-03-31. 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"
anton_beton@web-node-server:~$

Da es nur ein Testzertifizierung war, muss die eigentliche Zertifizierung mit obigem Kommando, jetzt aber ohne den Parameter --test-cert, gestartet werden. Der Ablauf ist identisch, allerdings mit anderen Parametern.

Die Zertifikate lassen sich mit folgendem Kommando auflisten:
sudo certbot certificates