Lets Encrypt Zertifikat zum FreeRADIUS-Dienst im logosrv übertragen

Version 4.1 von Christian Germann am 2022/05/06 14:17

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.

1. [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. [puppeteer] Folgenden Inhalt in die YAML-Datei /etc/logodidact/hiera/custom.d/ldhost.yaml eintragen bzw. ergänzen (ShortName entsprechend im Codeblock anpassen)

# Transfer Let's Encrypt SSL certificate to logosrv (target dir = /etc/freeradius/certs)
ld_legacy::radius::ensure: true
ld_legacy::radius::cn: 'wlan.ShortName.logoip.de'

3. [ldhost] prun ausführen zum Übertragen der Zertifikate

4. [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                                             #Zeile auskommentieren
}

Danach den FreeRADIUS-Dienst mit dem Kommando /etc/init.d/freeradius restart neustarten.

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.

Daür ist folgende Anpassung im puppeteer nötig.

Ändern Sie die /usr/share/acme.sh/issue wie folgt ab.

#!/bin/bash

source /usr/share/acme.sh/sbe.conf
export PATH="${SBE_SCRIPT_DIR}:$PATH"

domain="$1"
if [ -z "${domain}" ]; then
   echo "No domain specified"
   exit 1
fi

"${SBE_SCRIPT_DIR}/acme.sh" \
   --issue \
   -d "${domain}" \
   -w "${SBE_WEBROOT}" \
   --fullchain-file "${SBE_PUBLISH}/${domain}.crt" \
   --key-file "${SBE_PUBLISH}/${domain}.key" \
   --post-hook "${SBE_SCRIPT_DIR}/fix-perm" \
   --renew-hook "${SBE_SCRIPT_DIR}/fix-perm" \
   --preferred-chain "ISRG Root X1" \
   --force

Danach wie gewohnt das Zertifikat über sle beantragen.

Hier der Unterschied zwischen den Zertifikaten.

Das neue Zertifikat (oben) würde von einem Android-Gerät akzeptiert werden.

Das untere Zertifikat entspricht der ursprünglichen Variante, ohne Anpassung.

image-20220506141124-1.png