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 . ~/.bashrc
acme.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.
GFYlXahAbkl9aLbqmq8icf
aJWvKJMVTzd1gQfSMbEhLKAKq5xmFI9WCPkM2u24M6IaVaR7dbzSRmXFRPuccdeAPEslOeBIswakMPiaPeOibB
acme.sectigo.com/v2/GEANTOV
webserver1.hs-schmalkalden.de
/etc/ssl/certs/webserver1.pem
/etc/ssl/private/webserver1.key
curl 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:
GFYlXahAbkl9aLbqmq8icf
aJWvKJMVTzd1gQfSMbEhLKAKq5xmFI9WCPkM2u24M6IaVaR7dbzSRmXFRPuccdeAPEslOeBIswakMPiaPeOibB
acme.sectigo.com/v2/GEANTOV
rdpserver.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-acme
Hierzu 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/local
pveproxy-ssl.pem
: openssl pkcs12 -out pveproxy-ssl.pem -nokeys -clcerts -in *.p12
pveproxy-ssl.key
: openssl pkcs12 -out pveproxy-ssl.key -nocerts -nodes -in *.p12
pveproxy
neu: systemctl restart pveproxy
rm *.p12
Private 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).