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
Weitere technische Details finden Sie im EFF deeplinks blog post.
| ACME-DNS Host | acme-dns.it.tum.de |
|---|
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).
sudo mv acme-dns-client /usr/local/bin
chmod +x /usr/local/bin/acme-dns-client
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
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.sudo /usr/local/bin/acme-dns-client register -d my-internal-server.it.tum.de -s https://acme-dns.it.tum.de
Verbinden Sie sich per RDP zu Ihrem Windows Server und führen Sie dort folgende Schritte aus:
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
PS C:\simple-acme> .\wacs.exe --acmednsserver "https://acme-dns.it.tum.de"
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
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
Description: A host name to get a certificate for. This may be a
comma-separated list.
Host: my-internal-server.it.tum.de
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:
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
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
Description: Root URI of the acme-dns service Argument: https://acme-dns.it.tum.de (press <Enter> to use this) AcmeDnsServer:
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
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
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
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
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
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}
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
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
{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}
1: Create or update bindings in IIS 2: Start external script or program 3: No (additional) installation steps Add another installation step?: 3
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
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>
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
Do you want to specify the user the task will run as? (y/n*) - no
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