top of page

Configuring 802.1X Authentication in Linux

By Eric Geier (NoWiresSecurity Founder & Owner)  - originally published on


In this tutorial, we'll first see how 802.1X authentication fits into the big picture of wireless LAN security. Then we'll configure the authentication settings in Ubuntu. Lastly, we'll review the manual configuration of 802.1X supplicants. Lets get started!

The transition from WEP to WPA to WPA2

Back when the vulnerabilities of WEP encryption for Wi-Fi networks were uncovered, the IEEE and wireless industry started developing new protocols and standards. They came up with the 802.11i, a standard to finally implement a fully secure encryption mechanism for wireless LANs. Before it was completed, the Wi-Fi Alliance released the Wi-Fi Protected Access (WPA) encryption standard, loosely based on 802.11i using RC4/TKIP for the underlying encryption. Later they released WPA2, which includes full support for 802.11i using CCMP/AES encryption.

As many news outlets have discussed lately, there have been more flaws found in the first version of WPA. However, unlike some reports say, it hasn't been cracked; full encryption keys or passphrases haven't been recovered. The flaws apply to the underlying RC4/TKIP encryption and affects both the Enterprise and PSK modes of the first version of WPA. This does not have anything to do with WPA2, which uses a fully secure CCMP/AES encryption. Though WPA currently provides adequate security, especially with long and mixed character passphrases, you should try to migrate to WPA2--and make sure you don't use WEP at all.

The two modes of Wi-Fi Protected Access

Both WPA and WPA2 can be used in two very different modes: Enterprise (802.1X/EAP) and Personal (PSK). In full WPA and WPA2 implementations, wireless clients authenticate themselves via the 802.1X/EAP protocol to an external RADIUS server, whereas the Personal mode doesn't. Though the Personal mode is much easier to setup and is fine for residential use, it is necessary to authenticate clients on business networks. Instead of entering static encryption keys into clients, the keys in the Enterprise mode are negotiated and changed automatically in the background after authentication when connecting to the network.

This dynamic keying of the Enterprise mode has real-world benefits. The actual encryption keys that unlock the Wi-Fi connections aren't stored on the computers like with the Personal mode. Therefore, if a computer is stolen, the thief doesn't have the keys to the network. Plus employees would never see the keys. They'd present a username and password, digital certificate, or smart card in order to access the network, which would be used in the 802.1X authentication. These credentials could be revoked by the network administrators as needed, unlike when using the Personal mode, where they'd have to change the encryption keys on all the computers.

802.1X supplicants

A fancy name for the client software that represents the client end of the authentication is a 802.1X supplicant. You input the credentials into the supplicant. The supplicant communicates with the authenticator, such as a wireless access point or switch, which then talks to the authentication (RADIUS) server.

So in order to connect to a 802.1X-enabled network, you must install a client. Years ago this wasn't the easiest task when using Linux. Cisco and Microsoft basically held the only supplicants. Even though open source supplicants were developed, they weren't very simple to configure. However, now some Linux distributions have integrated the 802.1X settings into the OS GUI, where configuring them and inputting the credentials is pretty trivial.

The two main 802.1X supplicants projects in Linux are Xsupplicant and wpa_supplicant. The Xsupplicant has been around since 2003 and is developed by Open1X and backed by the OpenSEA Alliance. The wpa_supplicant has been around since 2004 and is developed by Jouni Malinen and other contributors. Both clients run on Linux and Windows and have a GUI application in addition to text-based configuration. The wpa_supplicant project also supports BSD and Mac OS X.


Not only is Ubuntu 9.10 already loaded with the wpa_supplicant, its own networking GUI communicates directly with the supplicant. Configuring 802.1X authentication and connecting to WPA or WPA2 Enterprise networks in Ubuntu is pretty straightforward. When you're ready to connect, simply click the network icon on the top of the screen and select the network from the list.

If you're using a password-based EAP protocol, like the popular PEAPv0/EAP-MSCHAPv2, you'll be prompted to enter the authentication settings, such as seen in Figure 1. This also assumes the wireless card and driver supports WPA/WPA2.


First, verify Wireless Security is set to WPA & WPA2 Enterprise. Then choose the Authentication protocol that's supported by the authentication server, such as the popular PEAP protocol. Unless your authentication server is set to accept anonymous connections, ignore that setting.

Next you should choose a CA Certificate file, so the client can verify it's connecting to a legitimate authentication server before completing its authentication. Though you can skip this setting, it's recommended to validate the server's certificate for full security. If the authentication server is loaded with a SSL certificate purchased from a Certificate Authority like VeriSign or Godaddy, you'll have to download their public root certificates from their site since Ubuntu isn't already loaded with them like in Windows. If you created your own self signed certificates like with openssl, you need to select the root CA certificate that was created.

Now you can set the other settings for the EAP type you selected. If you selected PEAP, for example, you can leave the PEAP Version as Automatic and the Inner Authentication as MSCHAPv2.

Finally, input a Username and Password that's setup in the authentication server or backend database.

When you're done, click Connect. Give it a couple of seconds to complete the 802.1X process and it should successfully connect up to the network. If not, double-check the settings and check the debug or logs on the authentication server.

Configuring wpa_supplicant via the config file

If you've installed wpa_supplicant yourself, you can set it up via the configuration file. If the supplicant came with your Linux distribution, you still might choose to use the configuration file to fine-tune the authentication and encryption settings.

Here are a few general parameters you may want to set that apply to all networks you connect to:


  • eapol_version: Set to either 1 or 2. By default, wpa_supplicant uses version 2 of EAPOL, as specified in the IEEE 802.1X-2004 standard. However, some APs still support only the first version.

  • fast_reauth: Leave set to 1 to enable fast re-authentication for all supported EAP methods, or set to 2 to disable fast re-authentication.


You specify the details of networks you want to connect to in blocks using brackets. The supplicant will try to connect to the listed networks in the order they appear in. Before you take the time to configure all the settings, you might want to check if the supplicant is working fine with your wireless driver by connecting to an unencrypted AP first, using the following block:


# Connects to the specified open or unencrypted network

network = {





Before you configure more network blocks, let's review some of the possible fields you can use in them to configure the network settings:


  • ssid: This required field specifies the network name.

  • scan_ssid: When set to 1, this will add the SSID to the probe requests, in case you're connecting to a hidden network or an AP with multiple SSIDs.

  • key_mgmt: Possible options include WPA-PSK (requires the psk field), WPA-EAP, IEEE8021X (authentication with or without dynamically generated WEP keys), and NONE (for open or static WEP networks).

  • pairwise: If WPA is used, specify either CCMP (WPA2) or TKIP (WPA).

  • eap: Space-separated list of the acceptable EAP methods: MD5, MSCHAPV2, OTP, GTC, TLS, PEAP, or TTLS.

  • identity: String used for EAP identity, such as the username.

  • password: String used for the EAP password.

  • ca_cert: Full file path to CA certificate file in PEM or DER format, so the server certificate can be validated.

  • ca_path: Full path to a directory where there are CA certificate files in PEM format you want to be added to the trusted list, so the server certificate can be validated.

  • client_cert: Full file path to a client certificate file in PEM or DER format, so you can use EAP methods like TLS.


Now lets put some of these fields to use in some network block examples.

Here's an example of a network block configured to connect to a WPA-Enterprise network with 802.1X authentication (using the PEAP protocol which requires users to enter login credentials):


network = {

ssid="wpa-enterpise-peap example"












For instance, this is an example of a network block configured to connect to a WPA2-Enterprise network with 802.1X authentication (using EAP-TLS which requires client and server certificates):


network = {

ssid="wpa2-enterpise-tls example"







private_key_passwd="PKCS#12 your_password"



Once you have the wpa_supplicant.conf file configured with the desired settings and network block(s), you can go ahead and give it a try. Here's an example of what you can run from the command-line:


wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf


This runs the daemon in the background, uses the wlan0 network interface, and reads the configuration files from the etc directory. If you need additional help, run man wpa_supplicant to see it's manual. If you have any problems, try running the following command to see debugging information:


wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -d


So you don't have to run these commands after every boot, consider adding the following to the file at /etc/network/interfaces:


auto wlan0

iface wlan0 inet dhcp

pre-up wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf

post-down killall -q wpa_supplicant


Using the wpa_gui application

If the command-line isn't appealing, you can use wpa_gui. It's a graphical utility that you can use to configure most of the wpa_supplicant settings. Depending upon your Linux distribution, this may be installed with the wpa_supplicant package or may have to be installed from a separate wpa_gui package.

Figure 2 shows an example of wpa_gui in Ubuntu. It is basically a graphical version of the command-line and configuration file method. You can scan for networks and save profiles for them. Plus you can see the network status, review the event history, and configure WPS settings.

Getting more help

We reviewed only some aspects of wpa_supplicant. The project offers many more examples in a full configuration file. Plus you can communicate and search on their mailing list.

bottom of page