Alle (Web-)Server innerhalb des MWN benötigen Zertifikate für sichere TLS Verbindungen. Der von uns empfohlene Anbieter ist Let's Encrypt. Die primäre Validierung von Let's Encrypt ist das HTTP-Challenge Verfahren. Dies ist aber nicht möglich wenn der Server nur vom MWN aus erreichbar ist. Als Alternative bietet Let's Encrypt auch ein DNS Challenge Verfahren an, welches aber aktuell manuell gepflegt werden muss, sofern Ihr DNS Eintrag beim LRZ Nameserver liegt.
Um dieses Problem zu lösen, bietet das IT-Management der TUM einen ACME-DNS-Dienst an, der den Prozess der DNS-Validierung automatisiert und den Erhalt und die automatische Erneuerung von Let's Encrypt-Zertifikaten mit einem CNAME-Eintrag vereinfacht.
Wichtig: Wenn Ihr Server von außerhalb des MWN erreichbar ist, sollten Sie anstelle des DNS- das Let's Encrypt-HTTP-Challenge Verfahren verwenden.
ACME-DNS löst zwei Probleme
- Automatisierung des DNS-Challenge Verfahrens: die DNS Records können per API gesetzt werden.
- Sicherheit: ACME-DNS bietet eine API mit begrenztem Umfang ausschließlich für TXT-Datenaktualisierung auf der Subdomäne „_acme-challenge“, wodurch Sicherheitsrisiken minimiert werden, falls die API-Credentials kompromittiert werden.
Weitere technische Details finden Sie im EFF deeplinks blog post.
| ACME-DNS Host | acme-dns.it.tum.de |
|---|
Anleitung (am Beispiel Ubuntu 22.04)
Nehmen wir an, dass Sie einen internen Server unter <my-internal-server.it.tum.de> betreiben, der ein Zertifikat braucht (entsprechend anpassen, ohne spitze Klammern).
- Certbot installieren: eine Anleitung finden Sie hier https://certbot.eff.org/instructions
- ACME-DNS-Client installieren: https://github.com/acme-dns/acme-dns-client
- Auf https://github.com/acme-dns/acme-dns-client/releases/latest den Client laden
- Entpacken Sie das Archiv und verschieben Sie den Client:
sudo mv acme-dns-client /usr/local/bin
- Machen Sie die Client ausführbar:
chmod +x /usr/local/bin/acme-dns-client
- MWN Verbindung aktivieren z.B. über VPN
- Registrieren Sie die Domain bei acme-dns:Exemplarische Ausgabe:
sudo /usr/local/bin/acme-dns-client register -d my-internal-server.it.tum.de -s https://acme-dns.it.tum.de
_acme-challenge.my-internal-server.it.tum.de. IN CNAME 407147b1-2c1a-4a7a-9698-bfbf11b58d2a.acme-dns.it.tum.de
- Es wurde eine zufällige Subdomain (
407147b1-2c1a-4a7a-9698-bfbf11b58d2a.acme-dns.it.tum.de) erzeugt, welche Sie über einen CNAME Eintrag (_acme-challenge.my-internal-server.it.tum.de) unter Ihrer Domain referenzieren müssen. - Sofern Sie Zugang zum Webdns haben, können Sie den Eintrag wie folgt anlegen:
- Wenn Sie keinen Zugang zum Webdns haben wenden Sie sich an Ihren Domain Admin um den Eintrag (exemplarisches Beispiel oben) anlegen zu lassen
- Zertifikat mit Certbot anfordern:→ Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/my-internal-server.it.tum.de/fullchain.pem ...
sudo certbot -v certonly --manual --preferred-challenges dns --manual-auth-hook 'acme-dns-client' -d my-internal-server.it.tum.de
- Automatische Erneuerung einrichten: https://eff-certbot.readthedocs.io/en/latest/using.html#setting-up-automated-renewal
Anleitung (am Beispiel Windows Server )
Verbinden Sie sich per RDP zu Ihrem Windows Server und führen Sie dort folgende Schritte aus:
- Ordner simple-acme auf Laufwerk C:\ anlegen
- Windows ACME Tool herunterladen https://simple-acme.com/download (Full, x64) und in C:\simple-acme speichern
- ZIP Datei in den Ordner C:\simple-acme entpacken
- Windows PowerShell als Administrator ausführen (Start klicken, 'Power' tippen, Rechts-Klick auf den Eintrag 'Windows PowerShell' und im Kontext Menü 'Als Administrator ausführen' klicken)
- Ins Verzeichnis C:\simple-acme wechseln
Windows PowerShell Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten. Lernen Sie das neue plattformübergreifende PowerShell kennen – https://aka.ms/pscore6 PS C:\WINDOWS\system32> cd c:\simple-acme
- den Assistenten zum Erstellen eines LE Zertifikates starten
PS C:\simple-acme> .\wacs.exe --acmednsserver "https://acme-dns.it.tum.de"
- Create cerificate (full options) durch drücken der Taste M wählen
A simple cross platform ACME client (WACS) Software version 2.3.4.2084 (release, pluggable, standalone, 64-bit) Connecting to https://acme-v02.api.letsencrypt.org/... Scheduled task not configured yet Check the manual at https://simple-acme.com Please leave a ★ at https://github.com/simple-acme/simple-acme N: Create certificate (default settings) M: Create certificate (full options) R: Run renewals (0 currently due) A: Manage renewals (0 total) O: More options... Q: Quit Please choose from the menu:m
- Manual enter host names durch drücken der Taste 2 auswählen
Running in mode: Interactive, Advanced Source plugin IIS bindings not available: Unsupported version of IIS detected. Please specify how the list of domain names that will be included in the certificate should be determined. If you choose for one of the "all bindings" options, the list will automatically be updated for future renewals to reflect the bindings at that time. 1: Read bindings from IIS 2: Manually enter host names 3: CSR created by another program C: Abort How shall we determine the domain(s) to include in the certificate?: A: Manage renewals (0 total) O: More options... Q: Quit Please choose from the menu:2
- geben Sie den hostname für den das Zertifikat erstellt werden soll an
Description: A host name to get a certificate for. This may be a comma-separated list. Host: my-internal-server.it.tum.de - bestätigen Sie die Eingabe durch Enter drücken
Source generated using plugin Manual input: my-internal-server.it.tum.de Friendly name '[Manual] my-internal-server.it.tum.de'. <Enter> to accept or type desired name:
- Single cerificate durch drücken der Taste 4 auswählen
By default your source identifiers are covered by a single certificate. But if you want to avoid the 100 domain limit, want to prevent information disclosure via the SAN list, and/or reduce the operational impact of a single validation failure, you may choose to convert one source into multiple certificates, using different strategies. 1: Separate certificate for each host (e.g. sub.example.com) 2: Separate certificate for each IIS site 3: Separate certificate for each registerable domain (e.g. *.example.com) 4: Single certificate C: Abort Would you like to split this source into multiple certificates?:4
- dns Validierung durch drücken der Taste 6 auswählen
The ACME server will need to verify that you are the owner of the domain names that you are requesting the certificate for. This happens both during initial setup *and* for every future renewal. There are two main methods of doing so: answering specific http requests (http-01) or create specific dns records (dns-01). For wildcard identifiers the latter is the only option. Various additional plugins are available from https://github.com/simple-acme/simple-acme/. 1: [http] Let simple-acme answer HTTP validation request 2: [http] Save verification files on (network) path 3: [http] Upload verification files via FTP(S) 4: [http] Upload verification files via SSH-FTP 5: [http] Upload verification files via WebDav 6: [dns] Create verification records with acme-dns (https://github.com/joohoi/acme-dns) 7: [tls-alpn] Let simple-acme answer TLS validation request 8: [any] Certificate(s) are pre-authorized outside of simple-acme 9: [any] Perform validation challenge manually (auto-renew not possible) 10: [any] Perform validation challenge with your own script C: Abort How would you like prove ownership for the domain(s)?: 6
- Enter drücken um den ACME-DNS Dienst zu bestätigen
Description: Root URI of the acme-dns service Argument: https://acme-dns.it.tum.de (press <Enter> to use this) AcmeDnsServer:
- Sofern Sie Zugang zum Webdns haben, legen Sie bitte folgenden CNAME Eintrag an:
Creating new acme-dns registration for domain my-internal-server.it.tum.de Domain: my-internal-server.it.tum.de Record: _acme-challenge.my-internal-server.it.tum.de Type: CNAME Content: c905bc21-368e-4aa8-b838-707a32b9ae7b.acme-dns.it.tum.de. Note: Some DNS control panels add the final dot automatically. Only one is required. Please press <Enter> after you've created and verified the record
Wenn Sie keinen Zugang zum Webdns haben wenden Sie sich an Ihren Domain Admin um den Eintrag (exemplarisches Beispiel oben) anlegen zu lassen - Drücken Sie Enter um die Erstellung uns Validierung des Zertifikates durchzuführen (nachdem der DNS Eintrag erstellt wurde!)
- Generate an EC public/private key pair durch drücken der Taste 1 auswählen
Verification of acme-dns configuration succesful. After ownership of the domain(s) has been proven, we will create a Certificate Signing Request (CSR) to obtain the actual certificate. The CSR determines properties of the certificate like which (type of) key to use. If you are not sure what to pick here, RSA is the safe default. 1: Generate an EC public/private key pair 2: Generate an RSA public/private key pair C: Abort What kind of private key should be used for the certificate?: 1
- Speichern Sie das Zertifikat im Windows Certificate Store durch drücken der Taste 2
When we have the certificate, you can store in one or more ways to make it accessible to your applications. The Windows Certificate Store is the default location for IIS (unless you are managing a cluster of them). 1: Add to IIS Central Certificate Store 2: Add to Windows Certificate Store (Local Computer) 3: Create P7B archive file (no private key!) 4: Create PEM encoded files (for Apache, nginx, etc.) 5: Create PFX/PKCS12 archive file 6: No (additional) store steps How would you like to store the certificate?: 2
- Default Store auswählen durch drücken der Taste 2
1: [My] - General computer store (for Exchange/RDS) 2: [Default] - Use global default, currently My Choose store to use, or type the name of another unlisted store: 2
- No (additional) store steps durch drücken der Taste 6 wählen
1: [My] - General computer store (for Exchange/RDS) 2: [Default] - Use global default, currently My Choose store to use, or type the name of another unlisted store: 2
- Optional falls Sie ein Zertifikat für den Windows Remote Desktop Zugang erstellen wollen: speichern Sie folgendes Skript unter C:\simple-acme\Scripts\ImportRDP.ps1Sie konnen die Datei auch hier herunterladen ImportRDP.ps1
Param( [Parameter(Position=0,Mandatory=$True)] [string]$SSLCertificateSHA1Hash ) $tsgs = Get-WmiObject -class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices -Filter "TerminalName='RDP-tcp'" Set-WmiInstance -path $tsgs.__path -argument @{SSLCertificateSHA1Hash=$SSLCertificateSHA1Hash} - Optional falls Sie ein Zertifikat für den Windows Remote Desktop Zugang erstellen wollen: Start external scripts or program durch drücken der Taste 2 auswählen
Installation plugin Manage IIS bindings not available: Unsupported version of IIS detected. With the certificate saved to the store(s) of your choice, you may choose one or more steps to update your applications, e.g. to configure the new thumbprint, or to update bindings. 1: Create or update bindings in IIS 2: Start external script or program 3: No (additional) installation steps Which installation step should run first?: 2
- Optional falls Sie ein Zertifikat für den Windows Remote Desktop Zugang erstellen wollen: geben Sie den Pfad und das Skript zum an
Description: Path to script file to run after retrieving the certificate. This may be any executable file or a Powershell (.ps1) script. File: .\Scripts\ImportRDP.ps1 - Optional falls Sie ein Zertifikat für den Windows Remote Desktop Zugang erstellen wollen: geben Sie den Aufrufparameter CertThumbprint als Parameter für das Script an
{CertCommonName}: Common name (primary domain name) {CachePassword}: .pfx password {CacheFile}: .pfx full path {CertFriendlyName}: Certificate friendly name {CertThumbprint}: Certificate thumbprint {StoreType}: Type of store (e.g. CertificateStore, PfxFile, ...) {StorePath}: Path to the store {RenewalId}: Renewal identifier {OldCertCommonName}: Common name (primary domain name) of the previously issued certificate {OldCertFriendlyName}: Friendly name of the previously issued certificate {OldCertThumbprint}: Thumbprint of the previously issued certificate {vault://json/key}: Secret from the vault Description: Parameters for the script to run after retrieving the certificate. Refer to https://simple-acme.com/reference/plugins/installation/script for further instructions. Arguments: {CertThumbprint} - wählen Sie No (additional) installation steps durch drücken der Taste 3
1: Create or update bindings in IIS 2: Start external script or program 3: No (additional) installation steps Add another installation step?: 3
- wählen Sie unspecified durch drücken der Taste 1
1: Unspecified (fallback to default in setting) 2: classic: https://letsencrypt.org/docs/profiles#classic 3: shortlived: https://letsencrypt.org/docs/profiles#shortlived (not yet generally available) 4: tlsclient: https://letsencrypt.org/docs/profiles#tlsclient 5: tlsserver: https://letsencrypt.org/docs/profiles#tlsserver Certificate profile to use: 1
- Lesen und Akzeptieren Sie die Servicebedingungen
Terms of service: C:\ProgramData\simple-acme\acme-v02.api.letsencrypt.org\LE-SA-v1.6-August-18-2025.pdf Open in default application? (y/n*) - yes Do you agree with the terms? (y*/n) - yes Enter email(s) for notifications about problems and abuse (comma-separated): <Enter>
- warten Sie bis die Erstellung und Validierung durchgeführt wurde
Plugin Manual input generated source my-internal-server.it.tum.de with 1 identifiers Plugin Single created 1 order [my-internal-server.it.tum.de] Authorizing... [my-internal-server.it.tum.de] Authorizing using dns-01 validation (acme-dns) Verification of acme-dns configuration succesful. [my-internal-server.it.tum.de] Record tpvTzqGjMx_rqGZz7VG7834dCEuYpnvWi1mIuH_l7Ug successfully created [my-internal-server.it.tum.de] Preliminary validation succeeded Waiting 30 seconds for global DNS propagation... [my-internal-server.it.tum.de] Authorization result: valid [my-internal-server.it.tum.de] Record tpvTzqGjMx_rqGZz7VG7834dCEuYpnvWi1mIuH_l7Ug deleted Downloading certificate [Manual] my-internal-server.it.tum.de Store with Windows Certificate Store... Installing certificate in the certificate store Unable to save using CryptoAPI, retrying with CNG... Adding certificate [Manual] my-internal-server.it.tum.de @ 2025.11.18 in store My Adding certificate CN=E8, O=Let's Encrypt, C=US in store CA Add FullControl rights for VORDEFINIERT\Administratoren Installing with Custom script... Script .\Scripts\ImportRDP.ps1 starting with parameters 424C111E55DE69C9DDB31CCDE1B5D203D6E5F5C0 Script finished Adding Task Scheduler entry with the following settings - Name simple-acme renew (acme-v02.api.letsencrypt.org) - Path C:\simple-acme - Command wacs.exe --renew --baseuri "https://acme-v02.api.letsencrypt.org/" - Start at 09:00:00 - Random delay 04:00:00 - Time limit 02:00:00
- beantworten Sie die Frage nach dem user mit no
Do you want to specify the user the task will run as? (y/n*) - no
- Fertig. Die können das Programm mit drücken der Taste q beenden
N: Create certificate (default settings) M: Create certificate (full options) R: Run renewals (0 currently due) A: Manage renewals (1 total) O: More options... Q: Quit Please choose from the menu: q
Weitere Links für Plugins zu ACME-DNS
- Caddy plugin: https://github.com/caddy-dns/acmedns
- Lego: https://go-acme.github.io/lego/dns/acme-dns/
- Traefik plugin: https://doc.traefik.io/traefik/user-guides/docker-compose/acme-dns/
- Windows / IIS: https://www.win-acme.com / https://simple-acme.com