Wiki-Quellcode von Lets Encrypt Zertifikat zum FreeRADIUS-Dienst im logosrv übertragen
Zuletzt geändert von Jonas Mayer am 2022/05/17 10:46
Verstecke letzte Bearbeiter
author | version | line-number | content |
---|---|---|---|
![]() |
1.1 | 1 | 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. |
2 | 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. | ||
3 | |||
![]() |
10.1 | 4 | {{toc start="4" numbered="true"/}} |
![]() |
9.1 | 5 | |
![]() |
10.1 | 6 | |
![]() |
9.1 | 7 | ==== __Nötige Konfigurationsschritte__ ==== |
8 | |||
9 | |||
![]() |
5.1 | 10 | **1.** (% style="color:#3498db" %)**[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. |
![]() |
1.1 | 11 | |
![]() |
5.1 | 12 | **2.** (% style="color:#3498db" %)**[im puppeteer]**(%%) Folgenden Inhalt in die YAML-Datei /etc/logodidact/hiera/custom.d/ldhost.yaml eintragen bzw. ergänzen (ShortName entsprechend im Codeblock anpassen) |
![]() |
1.1 | 13 | |
14 | {{code language="bash"}} | ||
15 | # Transfer Let's Encrypt SSL certificate to logosrv (target dir = /etc/freeradius/certs) | ||
16 | ld_legacy::radius::ensure: true | ||
17 | ld_legacy::radius::cn: 'wlan.ShortName.logoip.de' | ||
18 | {{/code}} | ||
19 | |||
![]() |
5.1 | 20 | **3.** (% style="color:#3498db" %)**[im ldhost]**(%%) prun ausführen zum Übertragen der Zertifikate |
![]() |
1.1 | 21 | |
![]() |
5.1 | 22 | **4.** (% style="color:#3498db" %)**[im logosrv]**(%%) Konfigurationsdatei des FreeRADIUS-Dienst bearbeiten und darin die Let's Encrypt Zertifikate verknüpfen (einmalige Anpassung, muss manuell vorgenommen werden) |
![]() |
1.1 | 23 | |
24 | In der vorhandenen Config-Datei /etc/freeradius/eap.conf die entsprechenden drei Parameter anpassen (rot markierte Zeilen) | ||
25 | |||
![]() |
5.1 | 26 | (% class="box" %) |
27 | ((( | ||
28 | ##tls { | ||
29 | (% style="color:#e74c3c" %) private_key_file = ${certdir}/wlan.ShortName.logoip.de.key (% style="color:#27ae60" %)# ShortName entsprechend anpassen(%%) | ||
30 | (% style="color:#e74c3c" %) certificate_file = ${certdir}/wlan.ShortName.logoip.de.crt (% style="color:#27ae60" %)# ShortName entsprechend anpassen(%%) | ||
31 | (% style="color:#27ae60" %) # If CA_file (below) is not used, then the certificate_file below | ||
![]() |
1.1 | 32 | # MUST include not only the server certificate, but ALSO all of |
33 | # the CA certificates used to sign the server certificate.(%%) | ||
![]() |
5.1 | 34 | (% style="color:#e74c3c" %) #CA_file = ${cadir}/ca.pem (% style="color:#27ae60" %)# diese Zeile auskommentieren(%%) |
35 | }## | ||
36 | ))) | ||
![]() |
1.1 | 37 | |
![]() |
5.1 | 38 | Danach den FreeRADIUS-Dienst mit dem Kommando {{box}}/etc/init.d/freeradius restart{{/box}} neustarten. |
![]() |
1.1 | 39 | |
![]() |
4.1 | 40 | |
![]() |
5.1 | 41 | ---- |
![]() |
4.1 | 42 | |
43 | |||
![]() |
10.1 | 44 | ==== __Kompatibilität mit Android-Geräten steigern__ ==== |
45 | |||
46 | |||
![]() |
5.1 | 47 | 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. |
![]() |
4.1 | 48 | |
![]() |
5.1 | 49 | Dafür muss das Zertifikat mit besonderen Optionen beantragt werden. Hierfür zunächst wie üblich zum LXC-Container (% style="color:#3498db" %)**puppeteer**(%%) verbinden und über den Befehl {{box}}sle{{/box}} zum Benutzer (% style="color:#27ae60" %)**le-acme**(%%) wechseln. Jetzt jedoch nicht auf das bekannte Kommando {{box}}issue [domain]{{/box}} für die Beantragung zurückgreifen, sondern stattdessen folgende beiden Kommandos verwenden (entscheidend sind die beiden Optionen in der letzten Zeile): |
![]() |
4.1 | 50 | |
![]() |
5.1 | 51 | {{code language="bash"}} |
52 | DOMAIN=wlan.ShortName.logoip.de # ShortName entsprechend anpassen | ||
![]() |
4.1 | 53 | |
![]() |
5.1 | 54 | acme.sh --issue -d "$DOMAIN" -w "/var/www" --fullchain-file "/data/le/certs/$DOMAIN.crt" \ |
55 | --key-file "/data/le/certs/$DOMAIN.key" --post-hook "/usr/share/acme.sh/fix-perm" --renew-hook "/usr/share/acme.sh/fix-perm" \ | ||
56 | --preferred-chain "ISRG Root X1" --force | ||
57 | {{/code}} | ||
![]() |
4.1 | 58 | |
59 | |||
![]() |
5.1 | 60 | |
![]() |
8.1 | 61 | Nachfolgend ein Vergleich des Zertifikats mit der speziell selektierten Zertifizierungsstelle "ISRG Root X1" im Vergleich zum gewöhnlichen Let's Encrypt Zertifikat. |
![]() |
7.1 | 62 | |
63 | * Das neue LE-Zertifikat (oberer Teil der Abbildung, (% style="color:#3498db" %)//**Path #1**//(%%)) würde von einem Android-Gerät akzeptiert werden. | ||
64 | * Das Standard LE-Zertifikat (unterer Teil der Abbildung, (% style="color:#3498db" %)//**Path #2**//(%%)) entspricht der ursprünglichen Variante, ohne Anpassung (und gemäß des CA-Datums nicht mehr gültig). | ||
65 | |||
66 | [[image:image-20220506141124-1.png||class="img-thumbnail"]] | ||
67 | |||
68 | |||
69 | |||
![]() |
5.1 | 70 | (% class="box successmessage" %) |
71 | ((( | ||
72 | **INFO: **Die Einstellung der präferierten Zertifizierungsstelle "ISRG Root X1" wird für dieses Zertifikat bei Verlängerungen auf Domainebene beibehalten. Die Option "Preferred-Chain" wird hierzu im Config-File des Zertfikats vom acme.sh Tool eingespeichert. | ||
73 | ))) | ||
74 | |||
75 | {{code language="bash"}} | ||
76 | root@ldhost:~ $ ssh puppeteer | ||
77 | root@puppeteer:~ $ cat /data/le/acme.sh/certs/wlan.ShortName.logoip.de/wlan.ShortName.logoip.de.conf | ||
78 | |||
79 | #[...] | ||
80 | Le_Preferred_Chain='__ACME_BASE64__START_SVNSRyBSb290IFgx__ACME_BASE64__END_' | ||
81 | |||
82 | # Hinweis: der eingespeicherte Base64-kodierte Wert entspricht hier "ISRG Root X1" | ||
83 | root@puppeteer:~ $ echo -n "ISRG Root X1" | base64 | ||
84 | SVNSRyBSb290IFgx | ||
![]() |
4.1 | 85 | {{/code}} |
86 | |||
87 | |||
![]() |
21.1 | 88 | ---- |
![]() |
4.1 | 89 | |
90 | |||
![]() |
13.1 | 91 | ==== __WLAN-Profil am Endgerät einrichten (anhand des Beispiels Android)__ ==== |
92 | |||
93 | |||
![]() |
20.1 | 94 | 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. |
![]() |
13.1 | 95 | |
![]() |
15.1 | 96 | [[image:android-wlan.jpg||class="img-thumbnail"]] |
![]() |
14.1 | 97 | |
98 | Darüber hinaus ist es wie immer erforderlich, dass das entsprechende Benutzerkonto per LogoDIDACT Console im Benutzermanagement für den WLAN-Zugriff freigeschaltet wurde. | ||
![]() |
17.1 | 99 | |
![]() |
18.1 | 100 | [[image:grafik.png||class="img-thumbnail"]] |