ubuntuusers.de

wpa supplicant

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist mit keiner aktuell unterstützten Ubuntu-Version getestet! Bitte teste diesen Artikel für eine Ubuntu-Version, welche aktuell unterstützt wird. Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Wiki/Icons/Oxygen/network-wireless.png wpa_supplicant 🇬🇧 ist ein Linuxprogramm, das, wie der Name schon sagt, die im WPA-Standard definierte Rolle des "supplicant" (engl. für Bittsteller) wahrnimmt.

Zur Authentifizierung existieren eine ganze Reihe von Protokollen, die wpa_supplicant auch beherrscht, wenn sie von der Hardware (auf der Client-Seite aber auch auf dem Access-Point) unterstützt werden. Der wpa_supplicant unterstützt WEP-, WPA-, WPA2-verschlüsselte und unverschlüsselte Netze. Die Vielzahl der möglichen Kombinationen macht die Konfiguration von wpa_supplicant etwas knifflig.

Hinweis:

Die in diesem Artikel beschriebene Vorgehensweise wird benötigt, sofern der NetworkManager keine Verbindung zu einem WLAN herstellen können oder für kabelgebundenes Netzwerk IEEE_802.1X Authentifizierung benötigt wird.

Sollte man allerdings ausschließlich das veraltete und unsichere WEP in einem WLAN verwenden, so gibt es keinen Grund, auf einem Client in einem solchen WLAN wpa_supplicant zu konfigurieren. iwconfig und wireless-*-Einträge in /etc/network/interfaces reichen in diesem (zu vermeidenden) Fall aus (siehe dazu wireless-tools).

Achtung!

Soll auf einem Linux-Rechner ein WLAN-Access-Point betrieben werden, so wird hostapd benötigt, nicht wpa_supplicant.

Installation

wpa_supplicant ist Bestandteil der Standardinstallation. Baut man auf eine Minimalinstallation auf, muss folgendes Pakete installiert [1] werden:

  • wpasupplicant

Hinweis:

Im gesamten Artikel wird als Beispiel-Schnittstelle wlan0 verwendet. Dies muss unbedingt durch die tatsächliche Schnittstelle ersetzt werden, die man selbst benutzt. Mehr dazu unter WLAN/Installation.

Wenn der Treiber über Ndiswrapper installiert wurde, muss die Schnittstelle evtl. auch noch in der Datei /etc/modprobe.d/ndiswrapper angepasst werden [2]. Dort steht automatisch wlan0.

WLAN-Konfigurationen eintragen

Als erstes muss die Datei /etc/wpa_supplicant/wpa_supplicant.conf angelegt und bearbeitet werden. Hierzu benötigt man einen Editor mit Root-Rechten [2]. Es sollte auch darauf geachtet werden, dass der Datei entsprechende Zugriffsrechte gegeben werden (0600), noch bevor im späteren Verlauf irgendwelche Schlüssel in ihr abgelegt werden. In dieser Datei lauten die ersten Zeilen:

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=benutzergruppe
# Die Gruppe muss natürlich angepasst werden
eapol_version=1
# 0: Der Treiber des Interfaces kümmert sich um das Scannen von Netzen und die AP-Auswahl.
#    Dieser Modus sollte benutzt werden, wenn man eine Verschlüsselung auf ein Kabelnetzwerk legt.
# 1: wpa_supplicant kümmert sich um das Scannen von Netzen und die AP-Auswahl.
# 2: Fast wie 0, es wird aber mit Hilfe von Sicherheitsrichtlinien und der SSID zu APs verbunden (BSSID wird nicht unterstützt)
#
# Normalerweise funktioniert entweder Modus 1 oder Modus 2.
ap_scan=1

Danach werden die verschiedenen Netzwerkkonfigurationen eingetragen.

Hinweis:

Bei den folgenden Beispielkonfigurationen sind folgende Änderungen vorzunehmen:

  • Netzwerkname muss durch die tatsächlich verwendete (E)SSID (ebenfalls in Anführungszeichen) ersetzt werden.

  • pre-shared key muss durch den tatsächlich verwendeten pre-shared key ersetzt werden.

Je nach Konfiguration von WPA/WPA2 können die Parameter variieren. Wenn man die Zeilen für proto, key_mgmt, pairwise und group nicht hinzufügt, werden Standardwerte gesetzt, die fast immer funktionieren.

Experten-Info:

Wer mehr über die verfügbaren Optionen lernen möchte, kann sich diese Beispielkonfiguration mit ausführlichen englischen Kommentaren ansehen: wpa_supplicant.conf.examples

Verschlüsselung

Um ein WPA2-verschlüsseltes Netzwerk einzutragen, wird folgender Text hinzugefügt:

network={
        ssid="Netzwerkname"
        scan_ssid=1
        proto=RSN
        key_mgmt=WPA-PSK
        pairwise=CCMP
        group=CCMP
        psk="meinschluessel"
}

Je nach Konfiguration des Access-Points könnte es aber auch sein, dass noch eine gemischte Verschlüsselung mit veraltetem WPA1-TKIP verwendet wird

        proto=RSN WPA
...
        pairwise=CCMP
        group=TKIP

oder reine WPA1-Verschlüsselung:

        proto=WPA
...
        pairwise=TKIP
        group=TKIP

oder für alle möglichen Variationen

        proto=RSN WPA
...
        pairwise=CCMP TKIP
        group=CCMP TKIP

Der Supplicant handelt dann mit dem Access-Point die Verbindung entsprechend aus.

Verschlüsselung nach WPA1-TKIP beruht auf der veralteten WEP-Verschlüselung, ist rel. unsicher und sollte nicht mehr verwendet werden!. Weitere Beschreibungen dazu in WLAN - WLAN-Sicherheit. Aktuell ist WPA2-Verschlüsselung die beste und sicherste Methode.

Wie man die genaue Konfiguration des Access-Points herausfinden kann, steht im Abschnitt Verschlüsselungskonfiguration des Access-Points ermitteln.

WEP-Verschlüsselung

Achtung!

Eine WEP-Verschlüsselung kann innerhalb weniger Minuten (abhängig vom Netzwerkverkehr) entschlüsselt werden und ist deshalb unsicher. Die WEP-Verschlüsselung sollte deshalb nicht eingesetzt werden.

network={
        ssid="Netzwerkname"
        scan_ssid=1
        key_mgmt=NONE
        wep_tx_keyidx=0
        wep_key0="Netzwerkschlüssel"
}

Erfolgt die Verschlüsselung als "WEP-shared", so sollte noch folgendes angefügt werden:

        auth_alg=SHARED
        priority=2

Unverschlüsselte Netzwerke

Achtung!

Bei einem unverschlüsselten WLAN kann jeder den Datenstrom zwischen PC und Router mitschneiden. Ein unverschlüsseltes WLAN sollte deshalb nicht eingesetzt werden. Deshalb gibt es an dieser Stelle auch keine Beispielkonfiguration. Man beachte auch mögliche rechtliche Konsequenzen.

In bestimmten Situationen muss man sich mit unverschlüsselten Netzen verbinden (z.B. Universitätsfunknetze mit SSH-Authentifikation). Zur Verbindung mit einem unverschlüsselten Netz ist wpa_supplicant jedoch nicht nötig. Siehe wireless-tools.

802.1X Netzwerke

IEEE_802.1X Netzwerke werden in Firmen sowie Hochschulen eingesetzt. Durch die große Anzahl an Authentifizierungsarten kann hier nur beispielhaft eine Konfiguration eines unverschlüsselten Netzwerkes mit 802.1X Authentifizierung angeführt werden. Diese Konfiguration dürfte für alle Hochschulen, die am DFN-Roaming (Hochschulen die am DFN-Roaming teilnehmen 🇩🇪, Beschreibung des Dienstes 🇩🇪) teilnehmen, stimmen.

Für die Authentifizierung wird zusätzlich das Paket openssl (Standard von wpa_supplicant) oder gnutls benötigt.

Um sich mit Funknetzwerken mit 802.1X Authentifizierung anzumelden, bedarf es eines Eintrages folgender Art:

network={
  ssid="Netzwerkname" 
  key_mgmt=IEEE8021X
  eap=TTLS                                       #Verschlüsselung während der Authentifizierung
  anonymous_identity="anonymous"                 #Äussere Identität
  identity="Benutzer@Authentifizierungs-Server"  #Innere Identität
  password="Passwort"                            #Passwort
  phase2="auth=PAP"
  #ca_cert="PFAD_ZUM_STAMMZERTIZIKAT/ZERTIFIKAT" #optionale Angabe des zu verwendenden Stammzertifikats
}

Es ist ebenfalls möglich einen externen Supplikanten für 802.1X Netzwerke zu verwenden, z.B. xsupplicant 🇬🇧. In diesem Fall ist die Option -e in dem Aufruf von wpasupplicant zu verwenden. Siehe hierzu: Hilfe zu wpa_supplicant, zu erreichen mit:

man wpa_supplicant 
Beispiel Fachhochschule Südwestfalen (NRW)

network={
  ssid="802.1X"
  key_mgmt=IEEE8021X
  eap=TTLS          
  anonymous_identity="anonymous"
  identity="Benutzername@urmel.fh-swf.de"
  password="swordfish"
  ca_cert="/etc/wpa_supplicant/wlanCA.dvz.fh-swf.de.pem"
  phase2="auth=PAP"
}

Das Stammzertifikat (wlanCA.dvz.fh-swf.de.pem) sowie das standortabhängige Zertifikat (Meschede: meswlangate.dvz.fh-swf.de.pem, Soest: sowlangate.dvz.fh-swf.de.pem) liegen im Ordner /etc/wpa_supplicant. In dieser Beispielkonfiguration wurden die benutzerspezifischen Daten durch die Worte Benutzername und swordfish ersetzt. Die Dateiendungen können je nach Quelle der Zertifikate variieren (z.B. wenn diese aus MS Windows exportiert wurden).

Verschlüsselungskonfiguration des Access-Points ermitteln

Der Befehl

sudo iwlist scanning
# oder 
sudo iwlist scan
# oder gefiltert und übersichtlicher mit den wesentlichen Informationen
sudo iwlist wlan0 scan | egrep -i 'cell|chan|essid|wpa|cipher|qual' 
# der Network-Manager zeigt das ebenfalls bei manueller Abfrage
nmcli dev wifi list 

Bei Geräten die durch das mac80211-Subsystem unterstützt werden, zeigt iw alle Details:

sudo iw dev [WLAN-Interface] scan 

zeigt alle WLAN-Netze in Reichweite, inklusive ihrer Verschlüsselungskonfiguration, an. Für diese Aktion sind Root-Rechte [4] notwendig.

Die Konfiguration der WLAN-Verschlüsselung wird in folgender Form ausgegeben:

                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : TKIP
                        Pairwise Ciphers (2) : CCMP TKIP
                        Authentication Suites (1) : PSK

In diesem Fall wird WPA2 benutzt (proto=RSN), wie die erste Zeile verrät. Die Angabe bei "Group Cipher" muss der Option "group=" in der wpa_supplicant.conf entsprechen. Die Angabe bei "Pairwise Ciphers" zeigt einem, welche Verschlüsselungsalgorithmen der Access-Point anbietet. In diesem Fall CCMP oder TKIP. Die Option, die man benutzen will, muss man entsprechend bei "pairwise=" angeben. Die letzte Zeile gibt an, welches Authentifizierungsverfahren eingesetzt wird: in diesem Fall ein vorher verteilter Schlüssel (key_mgmt=WPA-PSK). Zusammengefasst handelt es sich hierbei um ein WLAN, das WPA2 mit "Pre Shared Key" (PSK) verwendet und bei dem die Clients sich bei dem Verschlüsselungsalgorithmus zwischen CCMP (AES) und TKIP (RC4) entscheiden können.

Für WPA mit nur CCMP sieht die Ausgabe folgendermaßen aus:

                    IE: WPA Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK

Wenn ein Access-Point sowohl WPA als auch WPA2 anbietet, können auch zwei solche Abschnitte in der Ausgabe für ein WLAN erscheinen. Die Angaben in der Datei wpa_supplicant.conf entscheiden dann darüber, ob der Client für die Verbindung mit dem Access-Point WPA oder WPA2 benutzt.

Wichtig ist, darauf zu achten, welche "Ciphers" angeboten werden, und die wpa_supplicant.conf entsprechend zu bearbeiten. Werden bei "Pairwise Ciphers" CCMP und TKIP angezeigt, so kann. je nachdem was man in der wpa_supplicant.conf bei "pairwise" angibt, TKIP oder CCMP für die Verschlüsselung zwischen Client und Access-Point genutzt werden. Wenn bei "Pairwise Ciphers" CCMP und TKIP angeboten werden, ist der "Group Cipher" immer TKIP, damit es abwärtskompatibel bleibt. Wenn ausschließlich CCMP benutzt wird, ist auch der "Group Cipher" CCMP.

wpa_supplicant testen und manuell starten

Hinweis:

Sollte zuvor schon einmal eine WLAN-Verbindung über WEP eingerichtet gewesen sein, so muss diese deaktiviert werden. Es kann sonst zu Problemen beim Verbindungstest kommen. Unter GNOME findet man die Option dafür am einfachsten unter "System → Systemverwaltung/Administration → Netzwerk".

Hinweis:

Im Folgenden wird die Option -D wext verwendet. Diese ist ggf. auf den richtigen Treiber einzustellen!

Bevor nun der wpa_supplicant fest eingebunden wird, sollte er getestet werden. Dies kann über die Debugging-Funktion geschehen, indem man Folgendes in ein Terminal [3] eingibt:

sudo wpa_supplicant -i wlan0 -D wext -c /etc/wpa_supplicant/wpa_supplicant.conf -d 

Dabei ist -i der Name des Wireless Interface, -D der Name des Treibers (siehe auch Tabelle unten), -c Pfad zur Konfigurationsdatei und -d Debug Modus. Falls nun Fehler auftreten sollten, werden diese aufgelistet; um noch weitere Informationen zu erhalten, kann auch -dd als Debug Modus verwendet werden.

Um nun zu überprüfen, ob eine Verbindung ordnungsgemäß aufgebaut wurde, sollte in einem neuen Terminal der Befehl

iwconfig 

eingegeben werden. Die Verbindung war erfolgreich, wenngleich nach dem Interface nicht mehr "unassociated", sondern die Art des Drahtlosnetzwerkes steht, z.B. "IEEE 802.11g."

Um die Verbindung nun zu benutzen, ohne sie fest in das System einzubinden, muss der WPA-Supplicant im Daemon-Modus gestartet werden (-B Daemon (Background) Modus):

sudo wpa_supplicant -i wlan0 -D wext -c /etc/wpa_supplicant/wpa_supplicant.conf -B 

Als letztes ist noch der DHCP-Client für das Wireless Interface zu starten (damit man eine IP-Adresse bekommt):

sudo dhclient wlan0 

Der DHCP-Client sollte dann eine IP-Adresse liefern, und die Verbindung ist somit hergestellt.

wpa_supplicant aktivieren

Um den wpa_supplicant zu aktivieren, fehlt noch ein entsprechender Verweis in der Datei /etc/network/interfaces. Diese wird mit einem Editor mit Root-Rechten geöffnet [2] und folgende Zeile zum entsprechenden Interface hinzugefügt:

        wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

Alternativ kann folgender Eintrag angefügt werden:

        wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf

Die vollständige Datei kann so aussehen:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface

auto wlan0
iface wlan0 inet dhcp
        wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

Mehr Informationen zur /etc/network/interfaces gibt es in einem gesonderten Artikel.

Treiber

Falls wpa_supplicant nicht läuft, muss noch ein Treiber gewählt werden. Dies geschieht in der /etc/network/interfaces (siehe Artikel interfaces) mit der wpa-driver-Option, welche vor der Zeile mit wpa-conf stehen sollte.

Bei der Wahl des richtigen Treibers können die Artikel Karten und Chipsatztabelle hilfreich sein.

Eine vollständige Kofiguration kann z.B. wie folgt aussehen:

auto wlan0
iface wlan0 inet dhcp
        wpa-driver wext
        wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf

Wird kein Treiber angegeben, wird automatisch der generische wext-Treiber genutzt. Dieser funktioniert bei vielen Karten sehr gut (und ist auch empfohlen). Bei neueren Versionen von ndiswrapper (> 1.16) und ipw muss der wext-Treiber verwendet werden.

Verbindung aufbauen

Danach muss das entsprechende Interface (hier wlan0 - durch das tatsächliche Interface ersetzen) neu gestartet werden. Dies kann durch einen Neustart des Rechners geschehen oder durch Eingabe folgender Befehle in einem Terminal [3]:

sudo ifdown wlan0
sudo ifup wlan0 

Verbindung automatisch aufbauen

Normalerweise sollte die Anweisung auto wlan0 in der Datei /etc/network/interfaces bereits dafür sorgen, dass die Verbindung beim Systemstart automatisch hergestellt wird. Zumindest mit manchen Geräten scheint dies aber nicht zu funktionieren. In diesem Fall kann mit folgenden Schritten möglicherweise nachgeholfen werden:

In der Datei /etc/rc.local als root [2] über die Zeile exit =0 entsprechend dem Interface (hier wlan0 - durch das tatsächliche Interface ersetzen)

ifdown wlan0
ifup wlan0

einfügen und abspeichern.

Roaming

Eine automatische Umschaltung zwischen bekannten Netzwerken ist ebenfalls möglich. Zusätzliche Pakete müssen nicht installiert werden. wpasupplicant führt bei entsprechender Konfiguration die Skripte wpa_action und wpa_cli im Verzeichnis /sbin aus, und verbindet sich automatisch mit dem in Reichweite befindlichen Netzwerk. Gemischte Konfigurationen mit statischer IP-Adresse und automatischer Zuordnung über DHCP (engl. Dynamic Host Configuration Protocol) sind ebenfalls möglich.

Damit wpa_supplicant die Mehrfachkonfiguration erkennt und die Umgebung nach bekannten Netzwerken absucht, sind besondere Einstellungen in der Datei /etc/network/interfaces vorzunehmen. Der Name des Netzwerks ist frei wählbar, deutsche Umlaute und Sonderzeichen sollten aber vermieden werden.

Statische IP-Adressen sind den tatsächlichen Gegebenheiten anzupassen. Hier eine Beispielkonfiguration für Netzwerke mit statischer IP-Adresse, automatischer Zuordnung über DHCP, WPA- und WPA2 Verschlüsselung und offene Netzwerke:

auto lo
iface lo inet loopback
iface eth1 inet dhcp
iface eth2 inet dhcp
iface ath0 inet dhcp

# Schnittstelle prüfen
pre-up ifconfig wlan0 up
pre-up ifconfig wlan0 down

# Mehrfachkonfiguration aktivieren
iface wlan0 inet manual

# Roaming aktivieren
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf

# erstes bekanntes WLAN Name:zuhause mit DHCP
iface zuhause inet dhcp

# zweites bekanntes WLAN Name:uni mit statischer IP-Adresse
iface uni inet static
address 192.168.0.20
netmask 255.255.255.0
network 192.168.0.255
gateway 192.168.0.1

# verbindet sich mit allen unverschlüsselten Netzwerken über DHCP
iface offen inet dhcp

# Optional - Schnittstelle automatisch aktivieren
auto wlan0

Wird die Zeile auto wlan0 weggelassen kann das WLAN zunächst mit Networkmanager verwendet werden. Zum aktivieren/deaktivieren werden dann folgende Befehle verwendet:

sudo ifup wlan0      # aktiviert die WLAN-Schnittstelle
sudo ifdown wlan0    # deaktiviert die WLAN-Schnittstelle 

Für jedes zu nutzende Funknetzwerk ist ein eigener Eintrag mit den Angaben von SSID, Verschlüsselungsart und Netzwerkschlüssel zu erstellen. Der Eintrag id_str="Name" muß mit den Einstellungen in der Datei interfaces übereinstimmen.

Entsprechende Konfiguration der /etc/wpa_supplicant/wpa_supplicant.conf:

ctrl_interface=/var/run/wpa_supplicant
eapol_version=1
ap_scan=1

# erstes bekanntes WLAN Name:zuhause mit WPA2-Verschlüsselung
network={
ssid="WLAN-ID 1"
id_str="zuhause"
scan_ssid=1
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
group=TKIP CCMP
psk="WPA2 Netzwerkschlüssel"
}

# zweites bekanntes WLAN Name:uni mit WPA-Verschlüsselung
network={
ssid="WLAN-ID 2"
id_str="uni"
scan_ssid=1
proto=WPA
key_mgmt=WPA-PSK
pairwise=TKIP
group=TKIP
psk="WPA Netzwerkschlüssel"
}

# unverschlüsselte Netzwerke
network={
ssid=""
id_str="offen"
scan_ssid=1
key_mgmt=NONE
}

Werden Einträge angepasst, um Fehler zu beheben oder um ein neues Netzwerk einzufügen, kann der Vorgang im laufenden Betrieb mit folgenden Befehlen[3] unterbrochen und mit den geänderten Werten neu gestartet werden:

sudo wpa_action wlan0 stop
sudo wpa_action wlan0 reload
sudo ifup wlan0 

Experten-Info:

Unter /usr/share/doc/wpasupplicant/README.modes findet man Informationen, wie die Einstellungen für die /etc/wpa_supplicant/wpa_supplicant.conf auch direkt in der /etc/network/interfaces eingetragen werden können.

Diese Revision wurde am 4. September 2022 08:59 von DJKUhpisse erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Netzwerk, WLAN, System, ungetestet