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:
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 -ynpm 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:
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.logPlugins selected: Authenticator manual, Installer NoneCert not yet due for renewalYou 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 now2: Renew & replace the cert (limit ~5 per 7 days)- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2Renewing an existing certificatePerforming the following challenges:dns-01 challenge for nodeweb.tkhttp-01 challenge for nodeweb.tk- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -NOTE: The IP of this machine will be publicly logged as having requested thiscertificate. If you're running certbot in manual mode on a machine that is notyour 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_oOimW8dMBefore 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:
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-95f6HeVCmrdeHD8And 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 challengesIMPORTANT NOTES:- Congratulations! Your certificate and chain have been saved at:/etc/letsencrypt/live/nodeweb.tk/fullchain.pemYour key file has been saved at:/etc/letsencrypt/live/nodeweb.tk/privkey.pemYour cert will expire on 2021-03-31. To obtain a new or tweakedversion of this certificate in the future, simply run certbotagain. 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/donateDonating 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