Lets Encrypt Zertifikat zum FreeRADIUS-Dienst im logosrv übertragen
Im Zuge der stärkeren Verbreitung von Android 11 (oder neuer) und des WPA3-Standards ist es nötig, bei RADIUS-gesicherten WLAN-Netzen sauber signierte SSL-Zertifikate am RADIUS-Server einzusetzen, damit die Clients eine Verbindung herstellen können.
Daher wurde ab Puppet-Version 1.5.0 die Möglichkeit implementiert, ein ausgewähltes Let's Encrypt Zertifikat zum FreeRADIUS-Dienst im logosrv zu übertragen. Folgende Anpassungen sind dazu nötig.
- Nötige Konfigurationsschritte
- Kompatibilität mit Android-Geräten steigern
- WLAN-Profil am Endgerät einrichten (anhand des Beispiels Android)
Nötige Konfigurationsschritte
1. [im puppeteer] Neues Let's Encrypt SSL-Zertifikat per acmetool oder acme.sh beantragen, hierfür einen geeigneten Namen verwenden (z.B. wlan.ShortName.logoip.de oder radius.ShortName.logoip.de). Danach 2x prun ausführen.
2. [im puppeteer] Folgenden Inhalt in die YAML-Datei /etc/logodidact/hiera/custom.d/ldhost.yaml eintragen bzw. ergänzen (ShortName entsprechend im Codeblock anpassen)
ld_legacy::radius::ensure: true
ld_legacy::radius::cn: 'wlan.ShortName.logoip.de'
3. [im ldhost] prun ausführen zum Übertragen der Zertifikate
4. [im logosrv] Konfigurationsdatei des FreeRADIUS-Dienst bearbeiten und darin die Let's Encrypt Zertifikate verknüpfen (einmalige Anpassung, muss manuell vorgenommen werden)
In der vorhandenen Config-Datei /etc/freeradius/eap.conf die entsprechenden drei Parameter anpassen (rot markierte Zeilen)
tls {
private_key_file = ${certdir}/wlan.ShortName.logoip.de.key # ShortName entsprechend anpassen
certificate_file = ${certdir}/wlan.ShortName.logoip.de.crt # ShortName entsprechend anpassen
# If CA_file (below) is not used, then the certificate_file below
# MUST include not only the server certificate, but ALSO all of
# the CA certificates used to sign the server certificate.
#CA_file = ${cadir}/ca.pem # diese Zeile auskommentieren
}
Danach den FreeRADIUS-Dienst mit dem Kommando /etc/init.d/freeradius restart neustarten.
Kompatibilität mit Android-Geräten steigern
Zur Steigerung der Kompatibilität mit Android 11 / 12 Geräten kann man ein Let's Encrypt Zertifikat per acme.sh Tool beantragen, welches nicht durch zwei Zertifizierungsstellen "cross-signed" wurde.
Dafür muss das Zertifikat mit besonderen Optionen beantragt werden. Hierfür zunächst wie üblich zum LXC-Container puppeteer verbinden und über den Befehl sle zum Benutzer le-acme wechseln. Jetzt jedoch nicht auf das bekannte Kommando issue [domain] für die Beantragung zurückgreifen, sondern stattdessen folgende beiden Kommandos verwenden (entscheidend sind die beiden Optionen in der letzten Zeile):
acme.sh --issue -d "$DOMAIN" -w "/var/www" --fullchain-file "/data/le/certs/$DOMAIN.crt" \
--key-file "/data/le/certs/$DOMAIN.key" --post-hook "/usr/share/acme.sh/fix-perm" --renew-hook "/usr/share/acme.sh/fix-perm" \
--preferred-chain "ISRG Root X1" --force
Nachfolgend ein Vergleich des Zertifikats mit der speziell selektierten Zertifizierungsstelle "ISRG Root X1" im Vergleich zum gewöhnlichen Let's Encrypt Zertifikat.
- Das neue LE-Zertifikat (oberer Teil der Abbildung, Path #1) würde von einem Android-Gerät akzeptiert werden.
- Das Standard LE-Zertifikat (unterer Teil der Abbildung, Path #2) entspricht der ursprünglichen Variante, ohne Anpassung (und gemäß des CA-Datums nicht mehr gültig).
root@puppeteer:~ $ cat /data/le/acme.sh/certs/wlan.ShortName.logoip.de/wlan.ShortName.logoip.de.conf
#[...]
Le_Preferred_Chain='__ACME_BASE64__START_SVNSRyBSb290IFgx__ACME_BASE64__END_'
# Hinweis: der eingespeicherte Base64-kodierte Wert entspricht hier "ISRG Root X1"
root@puppeteer:~ $ echo -n "ISRG Root X1" | base64
SVNSRyBSb290IFgx
WLAN-Profil am Endgerät einrichten (anhand des Beispiels Android)
Am Endgerät muss gemäß WPA3-Spezifikation für die Einrichtung des WLAN-Netzwerks neben den RADIUS-Anmeldedaten (Benutzername + Kennwort) auch die passende Domain eingetragen werden. Der richtige Wert für das Feld Domäne ergibt sich also aus dem Let's Encrypt Zertifikat, welches in den vorherigen Schritten zu diesem Zweck beantragt und mit dem FreeRADIUS-Dienst am Server verknüpft wurde.
Darüber hinaus ist es wie immer erforderlich, dass das entsprechende Benutzerkonto per LogoDIDACT Console im Benutzermanagement für den WLAN-Zugriff freigeschaltet wurde.