WLAN mit WPA(2)-Enterprise absichern

aus PUG, der Penguin User Group
Wechseln zu: Navigation, Suche

Hier soll eine Zusammenfassung der, im Verlauf meiner Odyssee bezüglich eines sicheren WLAN-Zugangs mittels WPA(2)-Enterprise und RADIUS-Server, gesammelten Erfahrungen und Erkenntnisse entstehen.

(Erst mal muss ich aber wohl den Umgang mit diesem Wiki lernen. ;-) )

Einleitung

Bedingt durch mangelnde Lust weiterhin ein dezentrales PSK-Management auf allen AP's, Notebooks, Netbooks, Tablets, Smartphones, etc. durchzuführen habe ich mich mal mit den Themen RADIUS (Remote Authentication Dial-In User Service) und IEEE 802.1X auseinandergesetzt. (Dank Wikipedia weis ich nun auch das bei der Schreibweise laut IEEE ein Großbuchstabe zu verwenden ist, da IEEE 802.1X ein allein stehender Standard und keine Ergänzung eines bestehenden Standards ist.)

Während die technischen Komponenten nach kurzer (hahaha) Zeit in den Griff zu bekommen sind, muss ich mir aber nochmal ein paar Grundsatzüberlegungen zum Sinn des Ganzen machen. In dem gewählten Ansatz authentisiert sich ein 'User' mittels 'identity' (RADIUS-Username) und Zertifikat via EAP-TLS gegenüber einem RADIUS-Server. Bei positiver Authentisierung (gültiges Zertifikat, bekannter User, gültige Login-Time, etc.) erfolgt eine Assoziation zwischen dem WLAN-Adapter des Clients und dem AP.

(Frage: Ist zum Zeitpunkt der EAPOL Kommunikation zwischen Supplicant und Authentication-Server der WLAN-Adapter schon mit dem AP assoziiert? )

Somit steht, nach einer erfolgreichen Authentisierung, auf einem Client mit Multi-User-OS, allen User die Netzwerkverbindung zur Verfügung. Eigentlich kann man deshalb nicht von einer User-Authentisierung sprechen, sondern muss dies als Authentisierung des Client-PC sehen. (Was eine spätere Authentisierung des Users über diese Verbindung natürlich nicht ausschließt.)

In wie weit und mit welchem Aufwand sich diese Client-Authentisierung später benutzerspezifisch ändern lässt, um z.B. einem Administrator ausserhalb der regulären Zeiten ein Wartungsfenster zu eröffnen, ist hierbei eines der Themen welche noch zu klären wären.

Um im Rahmen dieser Dokumentation die Verwendung einzelner Passphrasen zu verdeutlichen, habe ich mich entschieden 'sprechende' Passwörter zu verwenden. Für eine produktive Umgebung sind diese selbstverständlich entsprechend abzuändern!!!

Grundsätzliches

Die Authentisierung mittels IEEE 802.1X involviert drei Komponenten.

  • Den Supplicant – als Antragsteller (User oder Client), welcher sich authentisieren möchte.
  • Den Authenticator - welcher den Zugang zur Verfügung stellt und den Antrag des Supplicanten entgegen nimmt.
  • Den Authentication Server - welcher den Authentifizierungsdienst zur Verfügung stellt.

Im WLAN wären dies typischerweise:

  • der WLAN-Client als Supplicant welcher sich authentisieren möchte.
  • der AP (Access-Point) als Authenticator welcher die Anmeldeinformationen des Supplicanten vom Authentisierungsdienst überprüfen lässt, entsprechend den Zugang ermöglicht und bei Bedarf eine Reauthentisierung bzw. das Abschalten des Zuganges durchführt.
  • ein RADIUS-Server als Authentication Server welcher dem Authenticator die Richtigkeit (oder auch nicht) der Anmeldeinformationen bestätigt und weitere Verbindungsinformationen (z.B. VLAN) mitteilen kann.

Das Szenario

Mit meinem kleinen heterogenen Netzwerk verbinden sich diverse eigene Clients als auch Gäste mit unterschiedlicher Hardware (Notebooks, Netbooks, Tablets, Smartphones, Spielekonsolen, etc.) und verschiedensten Betriebssystemen via WLAN. Ein ganz normaler Familienhaushalt eben. ;-) Der Wunsch, den zukünftigen Aufwand zur Verwaltung des Netzzugangs zu minimieren und nicht bei allen Änderungen den PSK auf allen Clients ändern zu müssen, veranlasst mich die Verwendung von IEEE 802.1X im Folgenden zu untersuchen.

Zertifikate

Für Einsteiger sicher der komplexeste Teil des ganzen Themas. EAP-TLS nutzt für die gegenseitige Authentisierung von Authentication Server und Supplicant digitale Zertifikate. Ein digitales Zertifikat ist durch eine digitale Signatur der Zertifizierungsstelle (Certificate Authority, CA) geschützt, welche mit dem Zertifikat der Zertifizierungsstelle überprüft werden kann. Die enthaltenen Informationen eines jeden digitalen Zertifikats sind mit einem öffentlichen Schlüssel (public key) verknüpft, welcher einem privaten Schlüssel (private key) zugeordnet ist. Der private Schlüssel wiederum kann zusätzlich mit einer Passphrase geschützt (verschlüsselt) werden. Dieser private Schlüssel sollte sich ausschließlich in der Kontrolle / im Besitz des Zertifikatsinhaber befinden, sowie die Passphrase nur ihm bekannt sein.

Zu einem Zertifikat gehören also

  • das Zertifikat (public key, als Datei)
  • der Schlüssel (private key, als Datei)
  • die Passphrase (das 'Passwort' für den Schlüssel)
  • das Zertifikat der ausstellenden oder einer übergeordneten CA (public key, als Datei)

Das Zertifikat einer CA kann wiederum von einer 'übergeordneten' CA signiert sein. Somit lässt sich eine Zertifizierungskette aufbauen, wobei wir zumindest einer der CA's 'blind' vertrauen müssen um dem eigentlichen Zertifikat zu vertrauen.

Sollte jemand die Kontrolle über ein zertifiziertes CA-Zertifikat haben, kennt er sicherlich den geschilderten Zusammenhang und hat, mit großer Wahrscheinlichkeit, diesen Text bereits übersprungen. Für alle Anderen bietet sich die Möglichkeit sich kostenpflichtig bei einer CA zertifizieren zu lassen oder sich selbst ein CA-Zertifikat auszustellen und dies selbst zu signieren. (Wenn wir uns nicht selbst vertrauen, wem dann?)

Zum Beantragen, Erzeugen und Verwalten von Zertifikaten kommt in der Regel OpenSSL zum Einsatz. Da OpenSSL unter Debian bereits als Abhängigkeit von FreeRADIUS installiert wird, gibt es eigentlich keinen Grund es nicht zu verwenden. ;-)

Die Verwaltung der Zertifikate erfolgt mehr oder weniger in einer Verzeichnisstruktur. Es ist deshalb unbedingt notwendig sich Gedanken über die Zugriffsrechte und Sicherheit der Zertifikat- und Schlüsseldateien zu machen. Während der Verbleib der CA-Verzeichnisstrucktur und der darin enthaltenen Dateien auf dem RADIUS-Server nicht zwingend notwendig ist, macht eine Aufbewahrung auf einem Memorystick, der selbst nicht gesichert aufbewahrt wird, auch nicht wirklich Sinn.

Sowohl FreeRADIUS als auch OpenSSL stellen Scripts zur Verfügung, welche die Erstellung einer CA und weiterer Zertifikate unterstützen.

FreeRADIUS-Script

Das FreeRADIUS Script bootstrap im Verzeichnis /usr/share/doc/freeradius/examples/certs/ erstellt ein komplettes Set von Zertifikaten in genau diesem Verzeichnis. Die Vorgaben hierfür holt sich das Script aus den Dateien ca.cnf, server.cnf und client.cnf. Sollen die Zertifikate in einem anderen Verzeichnis erstellt werden, können alle Dateien aus /usr/share/doc/freeradius/examples/ in das gewünschte Verzeichnis kopiert und bootstrap dort ausgeführt werden. Ist auf dem Host das Paket make installiert, wird dies mit 'make all' für die Erstellung der Zertifikate aufgerufen. Es besteht dann allerdings auch die Möglichkeit durch Aufruf von 'make ca' , 'make server' oder 'make client' gezielt einzelne Zertifikate zu erstellen.

OpenSSL-Script

Auch das OpenSSL Script CA.sh im Verzeichnis /usr/lib/ssl/misc/ ermöglich das Erstellen und signieren von Zertifikaten. Eine kurze Übersicht über die Benutzung gibt './CA.sh -h' . Jedoch sollten hier zuerst die Zuweisungen des Verzeichnisses für die CA, im Script und in /etc/ssl/openssl.cnf entsprechend den eigenen Vorstellungen abgeändert werden.

in /usr/lib/ssl/misc/CA.sh
  if [ -z "$CATOP" ] ; then CATOP=/pfad/verzeichnis ; fi

in /etc/ssl/openssl.cnf
  dir = /pfad/verzeichnis

per pedes

Natürlich kann OpenSSL auch direkt genutzt werden um die Benötigten Zertifikate zu erstellen. Um die Eingabe der für die Zertifikate benötigten Informationen zu vereinfachen können in /etc/ssl/openssl.cnf entsprechende Vorgaben (default) gesetzt werden. Folgende Einträge sind hierfür abzuändern.

countryName_default            = DE
stateOrProvinceName_default    = Bundesland
0.organizationName_default     = Firma
organizationalUnitName_default = Abteilung

Zusätzlich können noch folgende Vorgaben an geeigneter Stelle zur Konfigurationsdatei /etc/ssl/openssl.cnf hinzugefügt werden.

localityName_default      = Stadt
emailAddress_default      = name@domain.tld
challengePassword_default = ChallengePW
unstructuredName_default  = OptCompName

Alternativ können die benötigten Informationen bei dem Aufruf von openssl auch als Parameter übergeben werden.

-subj /C=DE/ST=Bundesland/L=Stadt/O=Firma/OU=Abteilung/CN=hostname.domain.tld/emailAddress=name@domain.tld

Im nächsten Schritt wird als User 'root' eine geeignete Verzeichnisstruktur erstellt.

sudo su - 
# In einem Script sollte man hier erst einmal prüfen ob das Verzeichnis schon existiert und dann entsprechend verfahren. 
mkdir myCA 
mkdir -p myCA/certs
mkdir -p myCA/crl
mkdir -p myCA/newcerts
mkdir -p myCA/private
mkdir -p myCA/requests
cd myCA 
openssl rand -out .rnd 5120
openssl rand -out private/.rand 5120
openssl dhparam -check -text -5 -out dh 1024
touch index.txt

Weiterhin wird die Datei xpextensions mit folgendem Inhalt im Verzeichnis der CA ('myCA') benötigt.

[xpclient_ext]
extendedKeyUsage=1.3.6.1.5.5.7.3.2

[xpserver_ext]
extendedKeyUsage=1.3.6.1.5.5.7.3.1

Das CA-Zertifikat

Als nächstes ist das Zertifikat für die eigene CA zu erstellen Hierfür kann nun mittels openssl das Zertifikat der CA 'beantragt' werden.

openssl req -batch -newkey rsa:2048 \
        -subj /C=DE/ST=Bundesland/L=Stadt/O=Firma/OU=Abteilung/CN=EigeneCA.domain.tld/emailAddress=name@domain.tld
        -out requests/ca.req.pem \
        -passout pass:ca_key_passphrase \
        -keyout private/cakey.pem

Da wir uns auch selbst vertauen, kann der Antrag auch gleich 'genehmigt' werden.

openssl ca -batch -create_serial -days 1461 \
        -in requests/ca.req.pem \
        -passin pass:ca_key_passphrase \
        -keyfile private/cakey.pem \
        -selfsign -extensions v3_ca \
        -out certs/cacert.pem

Das 'Server'-Zertifikat

Als nächstes kann das Zertifikat für den RADIUS-Server erstellt werden. Eigentlich würde hier ein 'normales' Zertifikat genügen, würde Windows bei den Zertifikaten keinen Unterschied zwischen einem NAS (Network Access Server) und einem Client (Host der sich an einem NAS anmeldet) machen. (Siehe xpextensions) Ein Windows-Client, welcher sich mit einem NAS verbindet, scheint diese Server-Extensions, unabhängig von dem tatsächlich auf dem NAS installierten OS, zu erwarten.

Im ersten Schritt wird das Zertifikat beantragt.

openssl req -batch -newkey rsa:2048 \
        -subj /C=DE/ST=Bundesland/L=Stadt/O=Firma/OU=Abteilung/CN=server.domain.tld/emailAddress=name@domain.tld
        -out requests/new.server.req.pem \
        -passout pass:server_cert_key_passphrase \
        -keyout private/new.server.key.pem

Im zweiten Schritt wird das Zertifikat von der CA 'genehmigt/beglaubigt'.

openssl ca -batch -days 730 \
        -in requests/new.server.req.pem \
        -cert certs/cacert.pem \
        -passin pass:ca_key_passphrase \
        -keyfile private/cakey.pem \
        -extfile xpextensions \
        -extensions xpserver_ext \
        -out certs/new.server.cert.pem

Es macht durchaus Sinn die in dieser Dokumentation verwendeten Beispiele auf die eigene Umgebung anzupassen. Hierzu gehört insbesondere die Änderung des jeweiligen Common Name (CN=...). OpenSSL 'merkt' sich die vergebenen Zertifikate und weigert sich in der Standardeinstellung mehrere Zertifikate für den gleichen Common Name zu vergeben. Auch die Dateinamen der Zertifikate sollten entsprechend eindeutig sein. Eine gute Vorgehensweise ist es die Dateinamen und den CN dem Hostname bzw. dem FQDN (Fully Qualified Domain Name) des Servers/Clients anzupassen Bsp.:

CN=radius01.home.local 
Dateiname für Zertifikat: radius01.crt.pem
                    Key : radius01.key.pem

Das 'Client'-Zertifikat

Scheinbar hat das Einbinden bzw. das nicht Einbinden der 'Windows Extensions' keinen Einfluss auf den Verbindungsaufbau eines none-Windows-Client mit einem none-Windows-NAS. Da sie aber anscheinend auch nicht stören, erleichtert es den Verwaltungsaufwand erheblich wenn die Extensions grundsätzlich eingebunden werden. Auch Client-Zertifikate werden im ersten Schritt 'beantragt' ...

openssl req -batch -newkey rsa:2048 \
        -subj /C=DE/ST=Bundesland/L=Stadt/O=Firma/OU=Abteilung/CN=client.domain.tld/emailAddress=name@domain.tld
        -out requests/new.client.req.pem \
        -passout pass:client_cert_key_passphrase \
        -keyout private/new.client.key.pem

... und im zweiten Schritt 'genehmigt/beglaubigt'.

openssl ca -batch -days 730 \
        -in requests/new.client.req.pem \
        -cert certs/cacert.pem \
        -passin pass:ca_key_passphrase \
        -keyfile private/cakey.pem \
        -extfile xpextensions \
        -extensions xpclient_ext \
        -out certs/new.client.cert.pem

Es macht durchaus Sinn die in dieser Dokumentation verwendeten Beispiele auf die eigene Umgebung anzupassen. Hierzu gehört insbesondere die Änderung des jeweiligen Common Name (CN=...). OpenSSL 'merkt' sich die vergebenen Zertifikate und weigert sich in der Standardeinstellung mehrere Zertifikate für den gleichen Common Name zu vergeben. Auch die Dateinamen der Zertifikate sollten entsprechend eindeutig sein. Eine gute Vorgehensweise ist es die Dateinamen und den CN dem Hostname bzw. dem FQDN (Fully Qualified Domain Name) des Servers/Clients anzupassen Bsp.:

CN=schlepptop01.home.local 
Dateiname für Zertifikat: schlepptop01.crt.pem
                    Key : schlepptop01.key.pem

Der Authenticator

Als Authenticator kommen mehrere Netgear WG602 in der Version v3 und v4 zum Einsatz. (Einem geschenkten Barsch ...) Die original Firmware der AP's wurde, aufgrund mangelnder IEEE 802.1X Funktionalität, durch eine Firmware von dd-wrt ersetzt. Profifunktionalität auf einem 08/15 Device. Ein Hammer was die Entwickler in die Firmware gezaubert haben!!

Neben der üblichen Konfiguration (IP, DHCP, SSID, etc.) auf die hier nicht im Detail eingegangen werden, wurde unter Wireless->Wireless Security folgende Einstellungen gewählt:

  • Security Mode : WPA Enterprise, WPA2 Enterprise oder WPA2 Enterprise Mixed
  • WPA Algorithms : TKIP, AES oder TKIP+AES
  • IP-Adresse des Radius-Servers : die IP-Adresse des Hosts auf dem der radiusd Deamon läuft
  • Port des Radius-Dienstes auf dem Radius Server : 1812 (default)
  • Radius Shared Secret : radius_shared_secret
  • Key renewal interval : 300

Zum Einstieg fiel die Wahl auf WPA Enterprise mit TKIP, da ich hier erst einmal die wenigsten Probleme mit den Clients zu erwarten sind. Später sollte dies, wenn mit allen Clients möglich, auf WPA2 Enterprise und AES hochgeschraubt werden.

Der EAP Datenverkehr zwischen Supplicant (Client-PC) und Authenticator (AP) wird in EAPOL Frames eingepackt und zwischen Authenticator und Authentication Server mittels des RADIUS oder DIAMETER-Protokols übertragen. Das Radius Shared Secret wird zur Verschlüsselung der Datenübertragung zwischen Authenticator und Authentication Server (RADIUS) verwendet und muss dementsprechend beiden Seiten bekannt sein.

Der Authentication Server

Als Authentication Server kommt eine rudimentäre (ohne GUI) Debian GNU/Linux 6.0 (Squeeze) Installation mit FreeRADIUS 2.1.10 zur Verwendung. Die Installation des FreeRADIUS erfolgt unspektakulär mittels

:# apt-get install freeradius 

und sollte alle benötigten Abhängigkeiten (z.B. OpenSSL) auflösen.

Nach der Installation ist zu beachten das Debian, im Rahmen der Installation, den installierten Dienste in die Startup-Routine des Systems (z.b. SystemV Init-Scripte) einbindet und den Dienst auch sofort startet. Deshalb sollte der RADIUS-Server für den Verlaufe der Konfiguration und das Testen gestoppt werden.

~# sudo /etc/init.d/freeradius stop 

Im Verlaufe der Konfiguration und dem anschließenden Testen kann der Dienst, mit nachfolgendem Befehl auf der Kommandozeile, im Debugmode gestartet werden.

~# sudo freeradius -X 

Nach der Konfiguration und dem erfolgreichen Testen derselben kann der Dienst wieder mit folgendem Befehl gestartet werden.

~# sudo /etc/init.d/freeradius start 

Hinweis: Sollte sich später der Supplicant (Client) nicht mit dem WLAN verbinden sollte überprüft werden ob der FreeRADIUS Dienst auch wirklich aktiviert ist !!!

Die Installation legt die die Konfigurationsdateien in folgendem Verzeichnis ab:

/etc/freeradius/ 

/etc/freeradius/radiusd.conf

In der Konfigurationsdatei des radiusd Daemon sollte zuerst überprüft werden dass 'freerad' als User und als Gruppe eingetragen ist. Bei Bedarf die folgenden Einträge anpassen:

user = freerad 
group = freerad 

/etc/freeradius/proxy.conf

Unter home_server localhost{ wird der Eintrag für das Radius Shared Secret angepasst.

secret = radius_shared_secret 

/etc/freeradius/clients.conf

In der clients.conf werden die Informationen betreffend der Authenticator, welche für den RADIUS-Server Clients darstellen, konfiguriert. Als Erstes ist im Abschnitt für localhost der Eintrag 'secret' mit dem Radius Shared Secret anzupassen. Dies ermöglicht eine Kommunikation zwischen den in freeradius-utils mitgelieferten und auf dem lokalen Host installierten Utilities und dem RADIUS-Server. Der folgende Abschnitt für localhost ist nur zur Übersicht gedacht.

Der Abschnitt für localhost sollte schon existieren. Also hier nur den Eintrag 'secret' anpassen!!!

client localhost { 
        ipaddr = 127.0.0.1 
        secret = radius_shared_secret 
        require_message_authenticator = no 
        nastype = other 
} 

Des weiteren ist auch für jeden Authenticator ein entsprechender Abschnitt zu erstellen.

client AP_HOSTNAME {                   # z.B. dd-wrt unter Setup->Basic Setup->Optional Settings->Router Name eingetragene Name 
        ipaddr = xxx.xxx.xxx.xxx       # IP-Adresse des Authenticators (Access-Point) 
        secret = radius_shared_secret 
        require_message_authenticator = no 
        nastype = other 
} 

/etc/freeradius/users

Wenn der RADIUS-Server, wie in diesem Beispiel, ohne Anbindung an eine Datenbank (z.B. LDAP) aufgesetzt ist, werden in der Datei /etc/freeradius/users alle Konfigurationen zur Authentisierung von Benutzer verwaltet. Der Aufbau eines Eintrages beginnt mit dem username am Anfang einer Zeile, gefolgt von ein oder mehreren check items. Wenn mehrere check items angegeben werden, sind diese mit einem Komma zu trennen. Nachfolgende Zeilen, welche mit einem 'tab' beginnen, können ein oder mehrere reply items enthalten. Werden mehrere reply items angegeben sind diese, auch bei einer Verteilung über mehrere Zeilen, mit Kommas zu trennen.

username   name = wert[, name = wert][, name = wert][, \ ] 
           [name = wert][, name = wert]                    # zählt durch Zeilenumbruch mit '\' noch zur vorhergehenden Zeile 
<tab>      name = wert[, name = wert], 
<tab>      name = wert[, name = wert]                      # Abschließende Zeile mit reply items ohne abschließendes Komma!

In dem hier vorgestellten Ansatz ist jedoch kein Benutzer sondern ein Client-PC der Supplicant. (Treffender wäre also ein Dateiname 'supplicants'.) Trotzdem nutzen wir die Datei und tragen einfach den FQDN (Fully Qualified Domain Name) des Clients als username ein. (z.B. schlepptop01.home.local)

schlepptop01.home.local   Cleartext-Password := "\!none\!" 

INFO: Das 'Cleartext-Password' ist hier erstmal ohne Funktion 
INFO: Die Angabe verhindert aber eine Fehlermeldung bezüglich eines fehlenden Passwortes beim debugen. 

Später wird dann für jeden Client, der sich am WLAN anmelden möchte/darf, ein entsprechender Eintrag benötigt.

/etc/freeradius/eap.conf

In der eap.conf gilt es als erstes im Abschnitt 'eap {' den Eintrag 'default_eap_type = md5' abzuändern.

default_eap_type = tls 

Als nächstes sollten im Abschnitt 'tls {' folgende Einträge angepasst werden.

private_key_password = radius1_pass_phrase 
private_key_file = ${certdir}/radius01.key.pem 
certificate_file = ${certdir}/radius01.cert.pem 
CA_file = ${cadir}/myCA.cert.pem 

Wie zu sehen ist werden hier die Pfade und Dateinamen der für TLS benötigten Zertifikat.- und Schlüsseldateien eingetragen. Um dem Server die Nutzung seines eigenen Zertifikates zu ermöglichen, sollte natürlich auch die bei der Erstellung des Schlüssels benutzte Passphrase eingetragen werden.

Installation der Zertifikate

Mit den Informationen aus radius.conf

raddbdir = /etc/freeradius 
confdir = ${raddbdir} 

und eap.conf

certdir = ${confdir}/certs 
cadir = ${confdir}/certs 

ist nun klar das der RADIUS-Server die Zertifikate und Schlüssel im Verzeichnis /etc/freeradius/certs erwartet. Das Erzeugen der benötigten Zertifikate und Schlüssel wird beispielhaft im Kapitel 'Zertifikate' erklärt. Die entsprechenden Dateien für das CA-Zertifikat (z.B. cacert.pem), das Server-Zertifikat (z.B. radius01.crt.pem) und den zum Server-Zertifikat zugehörigen Key (z.B. radius01.key.pem) Dateien müssen in das von FreeRADIUS vorgesehene Verzeichnis verbracht werden. Um zumindest einen gewisse Sicherheit zu gewährleisten, sollten die Benutzer und Recht der Dateien entsprechend angepasst werden. Zertifikate haben einen 'public' Status und sollten also für alle lesbar sein. Schlüsseldateien (Keys) dagegen haben einen 'private' Status und sollten also nur für berechtigte Personen und Dienste lesbar sein. Es empfiehlt sich also folgende Einstellung:

chown root:freerad cacert.pem radius01.crt.pem radius01.key.pem
chmod 444 cacert.pem radius01.crt.pem
chmod 440 radius01.key.pem

ls -l
-r--r--r-- 1 root freerad 4828 Jul 20 16:41 cacert.pem
-r--r--r-- 1 root freerad 4148 Jul 20 16:45 radius01.crt.pem
-r--r----- 1 root freerad 1718 Jul 20 16:45 radius01.key.pem

Der Supplicant

Als Supplicants sollen letztendlich ein ganzer Zoo an WLAN-fähigen Geräten (Notebooks, Netbooks, Tablets, Smartphones, Spielekonsolen, WebCams, etc.) zum Einsatz kommen. Zug um Zug wird also dieser Abschnitt um die entsprechenden Devices und deren Konfiguration erweitert.

Debian GNU/Linux mit wpa_supplicant

Die vorhandenen Linux-PCs verwenden im Normallfall Debian GNU/Linux 6.0 (Squeeze) oder Debian GNU/Linux Wheezy und steuern das WLAN über die Dateien /etc/network/interfaces und /etc/wpa_supplicant/wpa_supplicant.conf. Vor den Änderungen an den Konfigurationsdateien empfiehlt es sich das WLAN_Interface zu stoppen.

sudo ifdown wlan0 
# relevante Einstellungen für das WLAN-Interface in 
# /etc/network/interfaces 

allow-hotplug wlan0 
iface wlan0 inet manual 
        wpa-driver              wext 
        wpa-roam                /etc/wpa_supplicant/wpa_supplicant.conf 
        wpa-roam-default-iface  wlan.dhcp 
#       wpa-roam-default-iface  wlan.static 

iface wlan.dhcp inet dhcp 
        pre-up                  /sbin/ip link set $IFACE mtu 1492 

iface wlan.static inet static 
        address                 192.168.1.10 
        broadcast               192.168.1.255 
        network                 192.168.1.0 
        netmask                 255.255.255.0 
#       gateway                 192.168.1.1 
        pre-up                  /sbin/ip link set $IFACE mtu 1492 
# relevante Einstellungen für das WLAN-Interface in 
# /etc/wpa_supplicant/wpa_supplicant.conf 

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev 
eapol_version=2 
ap_Scan=1 
fast_reauth=1 

network={ 
        ssid="your-(e)ssid" 
        scan_ssid=1 
        key_mgmt=WPA-EAP 
        pairwise=TKIP 
        group=TKIP 
        eap=TLS 
        identity="schlepptop01.home.local" 
        ca_cert="/etc/wpa_supplicant/certs/cacert.pem" 
        client_cert="/etc/wpa_supplicant/certs/schlepptop01.crt.pem" 
        private_key="/etc/wpa_supplicant/certs/schlepptop01.key.pem" 
        private_key_passwd="client_cert_key_passphrase" 
        priority=10 
} 

Nachdem die Konfigurationsdateien entsprechend angepasst wurden, wird unter /etc/wap_supplicant ein weiteres Verzeichnis certs erstellt. Prinzipiell können die Zertifikate und Keys in fast jedem beliebigen Verzeichnis liegen, aber hier gibt es zumindest einen Bezug zum Thema. Nun werden die Dateien 'cacert.pem', 'schlepptop01.crt.pem' und 'schlepptop01.key.pem' in das Verzeichnis /etc/wpa_supplicant/certs/ verbracht sowie die Benutzer und Rechte entsprechend angepasst um zumindest einen gewisse Sicherheit zu gewährleisten. Zertifikate haben einen 'public' Status und sollten also für alle lesbar sein. Schlüsseldateien (Keys) dagegen haben einen 'private' Status und sollten also nur für berechtigte Personen und Dienste lesbar sein. Es empfiehlt sich also folgende Einstellung:

chown root:root cacert.pem schlepptop01.crt.pem schlepptop01.key.pem 
chmod 444 cacert.pem schlepptop01.crt.pem 
chmod 440 schlepptop01.key.pem 

ls -l 
-r--r--r-- 1 root root 4828 Jul 20 16:41 cacert.pem 
-r--r--r-- 1 root root 4175 Jul 20 16:47 schlepptop01.crt.pem 
-r--r----- 1 root root 1723 Jul 20 16:47 schlepptop01.key.pem 

Nach dem aktivieren des WLAN-Interfaces sollte sich der Client mit dem WLAN verbinden.

sudo ifup wlan0

Windows XP

(Work in progress)