Zweck: Transportverschlüsselung (TLS/SSL) für die Kommunikation mit HTTPS, FTPS, RDP, SMTPS, LDAPS, usw. zu Servern
Mithilfe eines ACME-Clients können Serverzertifikate komfortabel unbeaufsichtigt automatisch beantragt, abgeholt, installiert und erneuert werden. Dies reduziert den Betreuungsaufwand und Fehleranfälligkeit des Endsystems enorm, da die Ersteinrichtung von Zertifikaten vereinfacht wird und anschließend auch kein regelmäßiger, manueller Eingriff mehr nötig ist.
Um ACME an der HSM verwenden zu können, benötigen Sie:
Key-ID und den dazugehörigen HMAC-Key erhalten Sie von der PKI-Administration, nachdem Sie einen Antrag auf Ausgabe eines ACME-Accounts aus Alfresco ausgefüllt an pki@hs-schmalkalden.de gesendet oder persönlich im Rechenzentrum abgegen. Den Antrag auf Änderung eines ACME-Accounts finden Sie ebenfalls in Alfresco unter Dokumentenservice / Verwaltung und zentrale Einrichtungen / Rechenzentrum / Software / Nutzungsvereinbarung / ACME.
Für Linux- und Unix-basierte Systeme wird als ACME-Client acme.sh vom Rechenzentrum empfohlen und unterstützt, da der von Sectigo vorgeschlagene certbot viele Abhängigkeiten (snap, systemd, …) verlangt und sich daher ggf. auf älteren Systemen nicht nutzen lässt. acme.sh setzt für die Nutzung mit Sectigo lediglich sh und cron voraus. Grundsätzlich können aber alle ACME-Clients genutzt werden, die External Account Binding (EAB) unterstützen. Diese Anleitung erfolgt daher am Beispiel von acme.sh. Alle Befehle werden auf dem Endsystem eingegeben:
curl https://get.acme.sh | sh oder wget -O - https://get.acme.sh | sh (Die manuelle Installation ist unten dokumentiert).profile bzw. .bashrc (Je nach Distribution) neuladen: . ~/.profile oder . ~/.bashrcacme.sh --set-default-ca --server acme.sectigo.com/v2/GEANTOV (Falls bei der Installation eine Warnung bzgl. des Pakets socat angezeigt wird, kann diese ignoriert werden, da dieses nur relevant für den in dieser Anleitung nicht verwendeten Standalone-Modus ist.)acme.sh --register-account --eab-kid _EIGENE_KEY_ID_ --eab-hmac-key _EIGENER_HMAC_KEY_ (Dieser Schritt kann einige Sekunden dauern und evtl. beim ersten Versuch fehlschlagen)acme.sh --issue -d _EIGENE_DOMAIN_ -w /dev/null (Auch dieser Schritt kann dauern, der Webroot-Modus wird hierbei als Dummy mit /dev/null genutzt, da Sectigo von der HSM keine Challenge verlangt)acme.sh -i -d _EIGENE_DOMAIN_ --cert-file _ABSOLUTER_PFAD_ZUM_ZERTIFIKAT_ --key-file _ABSOLUTER_PFAD_ZUM_PRIVATE_KEY_ --reloadcmd "_BEFEHL_ZUM_NEUSTART_DES_DIENSTES_"
Die eingegebenen Parameter werden standardmäßig in ~/.acme.sh gespeichert. Die automatische Installation richtet außerdem einen Cronjob ein, welcher regelmäßig acme.sh --cron aufruft. Dies liest die gespeicherten Parameter ein, um das Zertifikat bei Bedarf automatisch zu erneuern und zu installieren.
GFYlXahAbkl9aLbqmq8icfaJWvKJMVTzd1gQfSMbEhLKAKq5xmFI9WCPkM2u24M6IaVaR7dbzSRmXFRPuccdeAPEslOeBIswakMPiaPeOibBacme.sectigo.com/v2/GEANTOVwebserver1.hs-schmalkalden.de/etc/ssl/certs/webserver1.pem/etc/ssl/private/webserver1.keycurl https://get.acme.sh | sh . ~/.profile acme.sh --set-default-ca --server acme.sectigo.com/v2/GEANTOV acme.sh --register-account --eab-kid GFYlXahAbkl9aLbqmq8icf --eab-hmac-key aJWvKJMVTzd1gQfSMbEhLKAKq5xmFI9WCPkM2u24M6IaVaR7dbzSRmXFRPuccdeAPEslOeBIswakMPiaPeOibB acme.sh --issue -d webserver1.hs-schmalkalden.de -w /dev/null acme.sh -i -d webserver1.hs-schmalkalden.de --cert-file /etc/ssl/certs/webserver1.pem --key-file /etc/ssl/private/webserver1.key --reloadcmd "systemctl reload apache2"
Die automatische Online-Installation legt den für die spätere Automatisierung benötigten Cronjob und einen Alias im Profil (~/.bashrc, ~/.profile o.Ä.) automatisch an. Möchte man dies nicht und acme.sh manuell einrichten, kann auch nur das Archiv heruntergeladen und entpackt werden. Anschließend kann die acme.sh-Skriptdatei bspw. mit einem Symlink in /sbin verknüpft oder über ihren Pfad aufgerufen werden. Der Aufruf acme.sh --cron zur automatischen Erneuerung muss ebenfalls manuell eingerichtet werden.
--set-default-ca nicht angelegt wird. Es erscheint aber trotzdem eine Erfolgsmeldung!? Dieses Verzeichnis muss bei manueller Installation daher händisch vor dem Setzen der CA erstellt werden: mkdir ~/.acme.sh
acme.sh --set-default-ca --server acme.sectigo.com/v2/GEANTOV touch: cannot touch '/root/.acme.sh/account.conf': No such file or directory ./acme.sh-3.0.7/acme.sh: 2295: cannot open /root/.acme.sh/account.conf: No such file grep: /root/.acme.sh/account.conf: No such file or directory grep: /root/.acme.sh/account.conf: No such file or directory ./acme.sh-3.0.7/acme.sh: 2322: cannot create /root/.acme.sh/account.conf: Directory nonexistent grep: /root/.acme.sh/account.conf: No such file or directory [Wed Apr 17 14:51:01 UTC 2024] Changed default CA to: acme.sectigo.com/v2/GEANTOV
Bei der automatischen Installation von acme.sh, beim Registrieren des ACME-Accounts oder beim Ausstellen des ersten Zertifikates kann eine E-Mail-Adresse angegeben werden, um beim Ausstellen und Erneuern das Zertifikat zusätzlich per E-Mail zu senden. Dazu müssen die Befehle folgendermaßen modifiziert werden:
-s email=m.mustermann@hs-sm.de anhängen-m m.mustermann@hs-sm.de anhängen
Grundsätzlich können ACME-Accounts für ihre zugewiesenen Domains auch Zertifikate für Subdomains beliebiger Tiefe inkl. Wildcard ausstellen lassen. Ein ACME-Account, dem bspw. dezernat42.hs-schmalkalden.de zugewiesen wurde, kann auch Zertifikate für ftp.dezernat42.hs-schmalkalden.de, foo.bar.dezernat42.hs-schmalkalden.de oder *.dezernat42.hs-schmalkalden.de anfordern.
Um Multidomain-Zertifikate ausstellen zu lassen, genügt es, den Domain-Parameter -d mehrfach beim Aufruf zu verwenden. Zu beachten ist, dass das erzeugte Zertifikat lokal auf dem Endsystem unter der ersten Domain gespeichert wird und bei der Installation auch nur diese Domain angegeben werden muss.
In Kombination bedeutet dies, dass der Befehl acme.sh --issue -d dezernat42.hs-schmalkalden.de -d *.dezernat42.hs-schmalkalden.de -w /dev/null ein Multidomain-Zertifikat erzeugt, welches für die Hauptdomain und alle seine Subdomains gültig ist.
Beim Installationbefehl können als Pfadangaben neben dem Zertifikat und dem Schlüssel selber außerdem noch das CA-Zertifikat und/oder die komplette Kette angegeben werden:
acme.sh -i -d _DOMAIN_ --cert-file _ABSOLUTER_PFAD_ZUM_ZERTIFIKAT_ --key-file _ABSOLUTER_PFAD_ZUM_PRIVATE_KEY_ --reloadcmd "_BEFEHL_ZUM_NEUSTART_DES_DIENSTES_" --ca-file _ABSOLUTER_PFAD_ZUM_CA-ZERTIFIKAT_acme.sh -i -d _DOMAIN_ --cert-file _ABSOLUTER_PFAD_ZUM_ZERTIFIKAT_ --key-file _ABSOLUTER_PFAD_ZUM_PRIVATE_KEY_ --reloadcmd "_BEFEHL_ZUM_NEUSTART_DES_DIENSTES_" --fullchain-file _ABSOLUTER_PFAD_ZUR_FULLCHAIN_
Für Windows-Systeme wird als ACME-Client win-acme (Github) vom Rechenzentrum empfohlen und unterstützt. Mithilfe von Cygwin kann acme.sh lt. seiner Dokumentation zwar ebenfalls unter Windows genutzt werden, win-acme liefert allerdings einige nützliche PowerShell-Skripte mit, welche die Zertifikatsinstallation vereinfachen.
Beispiel:
GFYlXahAbkl9aLbqmq8icfaJWvKJMVTzd1gQfSMbEhLKAKq5xmFI9WCPkM2u24M6IaVaR7dbzSRmXFRPuccdeAPEslOeBIswakMPiaPeOibBacme.sectigo.com/v2/GEANTOVrdpserver.bereich.hs-schmalkalden.de
Folgende Schritte sind für die Einrichtung von win-acme zur Ausstellung von Zertifikaten notwendig:
win-acme auf dem Endsystem herunterladen und entpacken: https://github.com/win-acme/win-acme/releases/latest oder Download-Bereich auf https://www.win-acme.comC:\Program Files) verschoben werden, da bei der Einrichtung eine geplante Aufgabe erstellt wird, die anschließend win-acme unter seinem aktuellen Pfad aufruft. Eine nachträgliche Verschiebung des Verzeichnisses erfordert eine manuelle Korrektur der geplanten Aufgabe!win-acme über wacs.exe einmal kurz interaktiv gestartet und mit Q direkt wieder geschlossen werden, damit seine Konfigurationsdatei settings.json erstellt wird.wacs.exe ausgeführt werden.ImportRDListener.ps1 genutzt.\wacs.exe ` --source manual ` --accepttos ` --certificatestore My ` --baseuri https://acme.sectigo.com/v2/GEANTOV/ ` --eab-key-identifier GFYlXahAbkl9aLbqmq8icf ` --eab-key aJWvKJMVTzd1gQfSMbEhLKAKq5xmFI9WCPkM2u24M6IaVaR7dbzSRmXFRPuccdeAPEslOeBIswakMPiaPeOibB ` --host rdpserver.bereich.hs-schmalkalden.de[,weitere.domains,...] ` --installation script ` --script ".\Scripts\ImportRDListener.ps1" ` --scriptparameters "{CertThumbprint}"
C:\ProgramData\win-acmeHierzu wird vom Rechenzentrum folgendes PowerShell-Installationsskript zur Verfügung gestellt:
param( [Parameter(Position=0,Mandatory=$true)] [string]$cn, [Parameter(Position=1,Mandatory=$true)] [string]$thumbprint, [Parameter(Position=2,Mandatory=$true)] [string]$path, [Parameter(Position=3,Mandatory=$true)] [string]$pwd ) $destPath = "Users\$env:username\tmp.pfx" $destLocalPath = "C:\$destPath" $destUNCPath = "\\$cn\C$\$destPath" Copy "$path" "$destUNCPath" wmic /node:`"$cn`" process call create "powershell /c Import-PfxCertificate -FilePath '$destLocalPath' -CertStoreLocation Cert:\LocalMachine\My -Password ( ConvertTo-SecureString -String '$pwd' -Force -AsPlainText ); Remove-Item '$destLocalPath'" Start-Sleep 2 wmic /node:`"$cn`" /namespace:\\root\cimv2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="$thumbprint"
Erläuterung:
Der Aufruf von wacs.exe muss mit dem Skript beispielhaft in etwa folgendermaßen aussehen:
.\wacs.exe ` --source manual ` --accepttos ` --baseuri https://acme.sectigo.com/v2/GEANTOV/ ` --eab-key-identifier GFYlXahAbkl9aLbqmq8icf ` --eab-key aJWvKJMVTzd1gQfSMbEhLKAKq5xmFI9WCPkM2u24M6IaVaR7dbzSRmXFRPuccdeAPEslOeBIswakMPiaPeOibB ` --host fqdn.ihres.rdpservers.hs-schmalkalden.de ` --installation script ` --script ".\Pfad\Zum\HSM_ImportRemoteRDListener.ps1" ` --scriptparameters "'{CertCommonName}' '{CertThumbprint}' '{CacheFile}' '{CachePassword}'"
Beachten Sie, dass im Gegensatz zum obrigen Beispiel der Parameter --certificatestore nicht vorhanden ist (Ansonsten wird das Zertifikat auch im Zertifikatsspeicher der ausstellenden lokalen Maschine abgelegt) und 4 anstatt nur einem Scriptparameter übergeben werden.
Proxmox bietet einen eingebauten ACME-Client, welcher ab Version 8.2 auch offiziell benutzerdefinierte Dienstanbieter unterstützt. Für Proxmox-Instanzen mit Version < 8 kann acme.sh anhand der Linux-Anleitung genutzt werden, da acme.sh grundsätzlich auch für Proxmox funktioniert. Proxmox-Instanzen mit Version >= 8, aber < 8.2 können einfach über Upgrade auf Version >= 8.2 gebracht werden, um dieses Feature nutzen zu können. Folgende Schritte sind für die Einrichtung des PVE-ACME-Clients für Sectigo nötig:
Register Account, in dem Sie Ihren Account zuerst benennen sollten (1). Dies ist grundsätzlich optional, erleichtert aber später die Identifikation des Accounts insbesondere, wenn Sie mehrere Accounts konfigurieren. Im Beispiel wurde der Account Sectigo genannt.Custom (Eigener Dienstanbieter) bei ACME Directory (3)URL tragen Sie https://acme.sectigo.com/v2/GEANTOV ein (4) und laden Sectigos Nutzungsbedingungen / Terms of Service (TOS), indem Sie auf Query URL klicken (5).KID bei EAB Key ID (7) und Ihren HMAC-Key bei EAB Key (8) ein.System / Certifiactes (2). (System müssen Sie ggf. ausklappen)Using Account aus (3) und bestätigen Sie Ihre Auswahl mit Apply (4).Create: Domain.Challenge Type bei HTTP (1).FQDN Ihres Knotens bei Domain hinzu (2).Add den vorherigen Schritt beliebig oft wiederholen (2).Order Certificates Now. Später wird lt. PVE-Admin-Guide Abschnitt 3.12.7: Automatic renewal of ACME certificates über den Dienst pve-daily-update das Zertifikat bei Bedarf automatisch erneuert.This domain '<hostname>.hs-schmalkalden.de' is not available for enrollment. Please contact administrator. ab. Als Beispiel ist der Enrollment-Account Rechenzentrum berechtigt, Zertifikate für den FQDN webserver.rz.hs-schmalkalden.de aber nicht für webserver.hs-schmalkalden.de auszustellen.
Next bestätigen (2). Sollten Sie nur zur Nutzung eines einzelnen Accounts berechtigt sein, wird dieser automatisch ausgewählt und diese Rückfrage übersprungen. Kontaktieren Sie bitte das Rechenzentrum über pki@hs-schmalkalden.de, falls Ihnen ein benötigter Account nicht zur Auswahl steht. 
Profil (Certificate Profile) (1) für Ihr Zertifikat definieren, welches im Wesentlichen über seine Eigenschaften und weitere Auswahlmöglichkeiten bestimmt. I.d.R. ist aber das Profil OV Multi-Domain fest vorgegeben, da es am flexibelsten ist.Gültigkeit des Zertifikats (Certificate Term) ist durch Sectico immer auf 1 Jahr festgelegt (2).Schlüsseltyp (Key Type) sollten Sie mindestens RSA - 4096 oder EC - P-256 auswählen (3), um zukunftssicher zu sein. Dies bestimmt vor allem die Resistenz der Verschlüsselung gegen Brute-Force-Angriffe.Common Name (4) tragen Sie den vollständigen Domainnamen (FQDN) Ihres Dienstes ein, der mit einem Zertifikat ausgestattet werden soll.OV Multi-Domain und Unified Communications Certificate als Subject Alternative Names hinzugefügt werden (5).* am Anfang vorzugsweise bei Subject Alternative Names oder als Common Name angeben. Eine Wildcard gilt für genau einen Domain-Level! *.bereich.hs-schmalkalden.de ist daher bspw. für dienst-a.bereich.hs-schmalkalden.de oder dienst-b.bereich.hs-schmalkalden.de, aber nicht für dienst-c.labor.bereich.hs-schmalkalden.de oder bereich.hs-schmalkalden.de gültig! Es empfiehlt sich daher meist, eine Wildcard-Domain immer zusammen mit ihrer Über-Domain zu beantragen. Beachten Sie, dass Ihr Verwaltungsbereich ggf. (noch) nicht zur Ausstellung von Zertifikaten mit Wildcard berechtigt ist. Kontaktieren Sie daher bitte zur Freischaltung formlos das Rechenzentrum mit Ihrer Wunschdomain unter pki@hs-schmalkalden.de.External Requesters hinterlegen (6).Auto Renew zu aktivieren. Dies hat zur Folge, dass automatisch ein Nachfolgezertifikat beantragt und Ihnen nach der Genehmigung per E-Mail gesendet wird, sobald das Ablaufdatum des Zertifikats nur noch die darunter definierte Anzahl an Tagen (9) entfernt ist.Key protection algorithm ist an dieser Stelle nicht besonders relevant, da Sie bei der manuellen Einrichtung i.d.R. die .p12-Datei sowieso in ein anderes Format konvertieren müssen. Wählen Sie daher bevorzugt den neueren, sichereren Standard Secure AES256-SHA256 aus (1).Passwort fest (2), das den privaten Schlüssel beim anschließenden Download verschlüsselt. Bedenken Sie, dass Sie dieses Passwort später beim Einrichten des Zertifikats brauchen werden. Nutzen Sie optimalerweise einen Passwort-Manager (bspw. KeePass), um sich das Passwort zu notieren!PKCS#12-Format aufgefordert werden. Je nach Ihren persönlichen Browser-Einstellungen erfolgt dieser Download ggf. automatisch ohne Dialog. Prüfen Sie daher Ihr Download-Verzeichnis, falls Sie die ausgestellte Zertifikatsdatei vermissen.Ein großer Anteil an Serversoftware (u.A. Nginx, Apache, …) erwartet TLS-Zertifiakte im PEM- und nicht im PKCS#12-Format. Die über das Webformular im PKCS#12-Format ausgestellten Zertifikate müssen daher vorab konvertiert werden, um für diese Servertypen verwendbar zu sein. Hierfür bietet sich das OpenSSL-Toolkit an.
cert.p12| Ausgabe | Befehl | 
|---|---|
| Nur Zertifikat |  openssl pkcs12 -out cert.pem -nokeys -clcerts -in cert.p12 | 
	
| Nur privater Schlüssel mit Passwort |  openssl pkcs12 -out cert.enc.key -nocerts -in cert.p12 | 
	
| Nur privater Schlüssel ohne Passwort |  openssl pkcs12 -out cert.key -nocerts -nodes -in cert.p12 | 
	
| Zertifikat und privater Schlüssel mit Passwort in einer Datei |  openssl pkcs12 -out cert+key.enc.pem -clcerts -in cert.p12 | 
	
| Zertifikat und privater Schlüssel ohne Passwort in einer Datei |  openssl pkcs12 -out cert+key.pem -clcerts -nodes -in cert.p12 | 
	
| Nur CA-Zertifikate / Zertifikatskette |  openssl pkcs12 -out chain.pem -nokeys -cacerts -in cert.p12 | 
	
| Zertifikat und CA-Zertifikate / komplette Zertifikatskette |  openssl pkcs12 -out fullchain.pem -nokeys -in cert.p12 | 
	
| Alles mit Passwort in einer Datei |  openssl pkcs12 -out all.enc.pem -in cert.p12  | 
	
| Alles ohne Passwort in einer Datei |  openssl pkcs12 -out all.pem -nodes -in cert.p12  | 
	
Offizielle Dokumentation: https://pve.proxmox.com/wiki/Certificate_Management
scp oder SFTP-Browser) auf Ihren Proxmox-Knoten nach /etc/pve/local hoch: scp _LOKALER_PFAD_IHRES_ZERTIFIKATS_.p12 root@_IHR_HOST_:/etc/pve/local//etc/pve/local: cd /etc/pve/localpveproxy-ssl.pem: openssl pkcs12 -out pveproxy-ssl.pem -nokeys -clcerts -in *.p12pveproxy-ssl.key: openssl pkcs12 -out pveproxy-ssl.key -nocerts -nodes -in *.p12pveproxy neu: systemctl restart pveproxyrm *.p12Private Key (1) den zuvor exportierten privaten Schlüssel und als Certifiate Chain (2) Ihr Zertifikat ein. Sie können entweder die Dateiinhalte in das entsprechende Textfeld einfügen (3) oder die Dateien hochladen (4). Im Gegensatz zur Einrichtung über die Konsole müssen Sie in beiden Feldern abschließend noch einige Zusatzzeilen ("Bag Attributes") oberhalb der Zeilen —–BEGIN … entfernen, die zur Ablehnung Ihrer Eingaben führen würden (5). Löschen Sie keinesfalls andere Zeilen! Bestätigen Sie zum Schluss den Dialog mit Upload (6). 