Enterprise-Class Wi-Fi Security
Published: 03/12/2009
While using a pre-shared key-based WPA / WPA2 802.11 network can be generally secure if a strong passphrase value is chosen, it still has the same disadvantage as any other shared-key system such as WEP. If a fired employee knows the value of the passphrase, then the only other thing required to access the wireless network is the WPA 4-way handshake which can be trivially sniffed through the air. Having the pre-shared key and the 4-way handshake allows anyone to capture and decrypt 802.11 transmissions since the Pairwise Master Key (PMK) (and hence the Pairwise Transient Key (PTK)) for the given client-to-AP session is now determined.
Updating this pre-shared key across dozens, hundreds, or thousands of machines in a private corporate environment is a serious administrative burden and also provides no real authentication to determine which specific individuals accessed the network since everyone shares the same credential (the shared key).
This is where the 802.1X scheme comes in to help provide both a unique PMK for each association attempt, as well as link-layer authentication before the wireless client is completely bridged onto the network to receive a DHCP lease. However, there are quite a few moving parts which all must coordinate seamlessly together, otherwise the system fails and troubleshooting can be difficult if the engineer does not have the tools or know where to isolate the problem. The complexity of an environment can also be further compounded by the number of choices in client authentication methods (certificates, usernames / passwords, smart cards, etc.) as well as the variety of supplicant / wireless client software which sometimes conflict with each other if there's more than one on a given machine.
This article uses the supplicant built into Windows XP / Vista configured with the EAP capabilities available in a native Microsoft-centric network (this is typically either PEAP or EAP-TLS) in implementing an 802.11i environment. If it is preferred that the users authenticate themselves by traditional username /password credentials, then choose PEAP / MS-CHAPv2. If the users should be required to authenticate by certificates, EAP-TLS or PEAP-TLS are the standard options. There are naturally more configuration options in the 802.1X world such as other EAP types, RADIUS products (Juniper SBR, Cisco ACS, etc.), etc.. This article will get through with the minimum amount of parts as possible.
The Breakdown of Network Components
There are five main parts to configuring an 802.1X-based Microsoft enterprise Wi-Fi network:
- Set up Active Directory (if not already done so).
- Create a root enterprise certificate authority.
- Create / configure a RADIUS server (in this example, using Microsoft IAS).
- Configure the access point to perform 802.1X ("WPA Enterprise") authentication with IAS.
- Configure the client machine supplicant (in this example, Wireless Zero Config (WZC).
In this article, the network will have the following basic layout with the DNS namespace corp.mycorp.com:
Domain controller |
CORP-DC01 |
10.1.1.11 |
Certificate authority |
CORP-ROOTCA |
10.1.1.12 |
RADIUS server (IAS) |
CORP-IAS |
10.1.1.13 |
Access point |
CORP-AP01 |
10.1.1.21 |
1. Set up Active Directory
This should be self-explanatory to any Windows administrator. Promote a server to be a domain controller, set up the LDAP namespace, raise the forest and domain functional levels, install DNS / DHCP, set the domain password policy to enforce 127-character passwords which have a maximum lifetime of three days, etc..
2. Create / Configure an Enterprise (Active Directory-Integrated) Root CA
More Information
Note: if the deployment calls for using EAP-TLS / PEAP-TLS / user certificates for client-side authentication, then Windows Server 2003 Enterprise edition is required, not Standard edition. The User certificate template referenced later in the article is only supported by Enterprise edition or higher.
On the machine designated as the enterprise certificate authority (CORP-ROOTCA), open Control Panel and go to Add / Remove Programs (or go there directly by typing in "appwiz.cpl" at the Run line). Then go to Add / Remove Windows Components.
Install an enterprise root certificate authority by selecting the Certificate Services component (comprised of the subcomponents Certificate Services CA and Web Enrollment Suppport, the latter being optional if all users and clients are going to be domain members):
![](ca_install_01.gif)
Select IIS / WWW service to support web-based enrollment capability if required:
![](ca_install_02.gif)
Select the Enterprise root CA option:
![](ca_install_03.gif)
Provide a Common Name (CN) value for the CA's self-signed certificate (the basic hostname is used in this example):
![](ca_install_04.gif)
Allow enabling of ASP for IIS:
![](ca_install_05.gif)
During CA install wizard, a prompt for the Windows Server 2003 install may be displayed for IIS-related files. Once completed, the root CA will be registered within Active Directory.
Autoenrollment is configured by default in Group Policy (Computer Configuration » Windows Settings » Security Settings » Public Key Policies) under the Default Domain Policy. This allows the root CA's certificate to automatically be pushed out to domain member machines. It also automatically publishes certificates for all domain entities.
If there are any non-domain computers which need to use the 802.1X authentication service, then copy the root CA's certificate from the CA's CertEnroll network share to the client station. This file will need to be properly imported into the client machines' Trusted Root Certification Authorities store later on.
3. Install / Configure (IAS), a la Microsoft RADIUS
More Information
Microsoft's RADIUS implementation, known as Internet Authentication Service (IAS) (it's been renamed to NPS in Server 2008) is also installed through the Add / Remove Programs » Add / Remove Windows Components » Networking Services. Install the IIS World Wide Web Service as well since the IAS service itself cannot bind to a certificate (it uses the local WWW service for it).
![](ias_install_01.gif)
Once the services are installed, open the IIS Manager (within Administrative Tools) to create a server certificate request, drill down to the Default Web Site's properties, go to the Directory Security tab, and then click on the Server Certificate button. Go through the wizard and select Send the request immediately to an online certification authority. If this second option is grayed out, reboot the IAS server in order to recognize the enterprise PKI services if recently instantiated in Active Directory.
Complete the wizard by entering in values specific to the internal corporate network:
![](ias_install_02.gif)
![](ias_install_03.gif)
![](ias_install_04.gif)
![](ias_install_05.gif)
![](ias_install_06.gif)
![](ias_install_07.gif)
![](ias_install_08.gif)
![](ias_install_09.gif)
This will send the certificate signing request to the enterprise certificate authority as listed in Active Directory and the CA will immediately return a signed server certificate. Within the Default Web Site Properties dialog, the View Certificate should no longer be grayed out and clicking on it will display the server certificate signed by the root CA. Notice that the server has its own private key.
![](ias_install_10.gif)
Open the Internet Authentication Service console (ias.msc).
Enter a RADIUS client config with a shared secret value to be used by the access point:
![](ias_config_01.gif)
![](ias_config_02.gif)
Under Remote Access Logging, open the properties of Local File and check all logging options:
![](ias_config_03.gif)
Under Remote Access Policies, create a new custom policy so any domain users who are authenticating via 802.11 link media can be granted access to the network:
![](ias_config_04.gif)
Set the NAS-Port Type attribute to match Wireless - IEEE 802.11:
![](ias_config_05.gif)
![](ias_config_06.gif)
![](ias_config_07.gif)
Set the Windows group attribute to match Domain Users (note: the Select Groups dialog may default to a location pointing to the local machine - re-point this to Active Directory by clicking on Locations and then the value of the DNS namespace of AD):
![](ias_config_08.gif)
![](ias_config_09.gif)
![](ias_config_10.gif)
Set permissions to Grant remote access permission.
![](ias_config_11.gif)
Click Edit Profile:
![](ias_config_12.gif)
Under the Authentication tab, click EAP Methods, add PEAP (or for EAP-TLS, select Smart Card or other certificate) and click OK.
![](ias_config_13.gif)
![](ias_config_14.gif)
![](ias_config_15.gif)
Back at the Select Eap Providers dialog, click Edit and ensure the Certififed issued pulldown lists the certificate assigned to the local host. The value of the Certificate issued field should match the Common Name (CN) value on the server certificate installed earlier. Within the same dialog, the Eap Types section should contain at least one entry for the "inner" authentication method for 802.1X (for PEAP, the Secured password option; for PEAP-TLS or EAP-TLS, the Smart card option).
![](ias_config_16.gif)
OK out of all dialog boxes until back to the New Remote Access Policy Wizard (ignore the prompt to view Help topic on Dial-in Settings by clicking No.). Finish the wizard. The new policy should be at the top of the order list.
![](ias_config_17.gif)
Back at the IAS MMC, register the server in Active Directory so the IAS server can read the dial-in permissions attribute for user objects in Active Directory and also become a member of the RAS and IAS Servers domain group.
![](ias_config_18.gif)
![](ias_config_19.gif)
![](ias_config_20.gif)
Restart the IAS service. When restarting this service, using the IAS MMC may not be the most reliable method. Use services.msc or "net stop ias" / " net start ias" instead.
4. Access Point Configuration
In 802.1X terminology, the middle-man between the client and server (in this case the AP) is known as the "authenticator" and serves as the relay point between the "supplicant" (client) and the "authentication server" (RADIUS server).
Configure a RADIUS client entry for the IAS server using the same shared secret entered previously in the IAS configuration. Depending on the access point, other items may need to be set such as support for TKIP and / or CCMP, VLAN, etc.. Consumer-grade access points by Linksys, Netgear, D-Link, Buffalo, etc. which support 802.1X may not have very many options compared to a business-grade Cisco unit. In general, consumer access points do not support 802.1X / EAPOL functionality unless an Open Source firmware is applied.
For example, on a Cisco 1200 series access point, the authentication type for the configured SSID to be used in an 802.1X configuration may need to be set for Open authentication with EAP.
Cisco 1200 Series Configuration Example
aaa group server radius rad_eap
server 10.1.1.13 auth-port 1812 acct-port 1813
aaa group server radius rad_acct
server 10.1.1.13 auth-port 1812 acct-port 1813
dot11 vlan-name MyCorp vlan 199
dot11 ssid MyCorpWi-Fi
vlan 199
authentication open eap eap_methods
authentication key-management wpa
accounting acct_methods
guest-mode
interface Dot11Radio0
no ip address
no ip route-cache
encryption vlan 199 mode ciphers aes-ccm tkip
ssid MyCorpWi-Fi
radius-server host 10.1.1.13 auth-port 1812 acct-port 1813 key 7 104719181604435B5E
|
Bear in mind that this same concept can be applied to 802.1X-capable LAN switches as well (for example, Cisco's 2950 series using the dot1x commands).
5. Client Supplicant Configuration
Determine if there's a supplicant on the machine other than Wireless Zero Configuration (WZC), such as Dell TrueMobile, Intel PROSet Wireless, ThinkVantage Access Connections (commonly installed on IBM and Lenovo machines), Juniper (formerly Funk Software) Odyssey, SecureW2, etc.. If WZC is preferred, then disable the others (typically a service) so there's no contention for the wireless radio hardware. Sometimes, installing the driver of a given 802.11 card might force the use of a third-party supplicant.
If the client is XP and WPA2 is required for the network, then a Microsoft update may be required (http://www.microsoft.com/downloads/details.aspx?familyid=2726F32F-D52B-4F84-ACE8-F7FC20195769&displaylang=en). Otherwise, the best that XP's WZC can support is WPA / TKIP. If there are any 802.11b-only clients in the network, then they will be limited to this as well.
Root CA Certificate
The root CA's certificate is automatically installed in a domain member's Trusted Root Certification Authorities store of the local computer account context, not the user's. If the machine is not a member of the Active Directory domain, then manually import the root CA certificate by opening the certifcate file from the root CA host's CertEnroll share (in this article's example, that would be \\CORP-ROOTCA\CertEnroll).
View Manual Root CA Certificate Import Process
Open the root CA certificate file. A security warning dialog will prompt:
![](root_ca_manual_import_01.gif)
Click on Install Certificate:
![](root_ca_manual_import_02.gif)
Start the Certificate Import Wizard:
![](root_ca_manual_import_03.gif)
Select Place all certificates in the following store and click on Browse:
![](root_ca_manual_import_04.gif)
First check the Show physical stores checkbox, then drill down into Trusted Root Certification Authorities » Local Computer:
![](root_ca_manual_import_05.gif)
Finish the wizard and a import confirmation dialog prompts:
![](root_ca_manual_import_06.gif)
Username / Password Authentication: Protected EAP (PEAP) with MS-CHAPv2
If the IAS is configured for PEAP (with MS-CHAPv2 as the inner authentication method), then perform the following supplicant configuration on the client-side:
PEAP Configuration for Windows XP
Open the Properties dialog of the wireless card, select the Wireles Networks tab (the WZC service will need to be running), and click Add to create a preferred network profile:
![](supplicant_xp_config_01.gif)
In the Association tab, enter the SSID and choose the WPA combination:
![](supplicant_xp_config_02.gif)
In the Authentication tab, select Protected EAP for the EAP type, then click Properties:
![](supplicant_xp_config_03.gif)
Ensure that the Validate server certificate checkbox is enabled, otherwise MITM attacks may be possible. Select the enterprise root certificate authority previously created:
![](supplicant_xp_config_04.gif)
If desired, enable Fast Reconnect in the low-left corner to allow session-key re-use if the client station may be moving between access points acting under the same ESSID, but this will also need to be set in the IAS policy as well.
![](supplicant_xp_config_06.gif)
PEAP Configuration for Windows Vista
Go to the Network and Sharing Center » Manage Wireless Networks, and click Add. Select Manually create a network profile:
![](supplicant_vista_config_01.gif)
Set the basic parameters of the wireless connction profile:
![](supplicant_vista_config_02.gif)
In the profile properties dialog, go the Security tab and click Settings:
![](supplicant_vista_config_03.gif)
Ensure that the Validate server certificate checkbox is enabled, otherwise MITM attacks may be possible. Select the enterprise root certificate authority previously created:
![](supplicant_vista_config_04.gif)
By default, WZC automatically sends the credentials of the currently-logged-on user to the network. If the credentials reflect a valid domain account, then the wireless authentication will be transparent to the user. However, if the logged-on user is a local account or otherwise a non-domain member, then the following dialog will need to be unchecked so the user is prompted when the wireless association occurs (this is under the PEAP profile created earlier within the Protected EAP Properties dialog):
![](supplicant_xp_config_05.gif)
Once the client machine is configured, create a domain user in Active Directory and under the Dial-in tab, select Control access through Remote Access Policy. This allows control of user access based on the policy controls set within IAS. The typical scenario is to have the new user log into the machine once while connected to the LAN so domain credentials are cached locally on the machine. Then the next time the user logs onto the desktop while disconnected from the LAN, WZC will automatically initiate an association and EAP authentication with the AP / back-end domain services (IAS and AD).
Client Certificate Authentication (EAP-TLS or PEAP-TLS)
While username / password credentials for 802.11i networks are convenient and somewhat easier to implement, the security around passwords are always the weak link because in most cases users choose cryptographically weak password values. Certificates are a much stronger alternative, although traditionally this has meant the extra step of deploying certificates to all users. With Active Directory's Autoenrollment feature, this should not present much of a problem for domain users. However, a few configuration steps need to be performed within Active Directory as well as on the server functioning as the enterprise certificate authority.
Show Active Directory User Certificate Configuration
Within Active Directory, all user objects / accounts which will be assigned User certificates will need to have the E-mail field populated. In Exchange environments, there probably is an entry already here.
![](ad_user_e-mail.gif)
Next, a user certificate template will need to be created for 802.11 authentication so the proper certificates can be published for domain users. On the root CA machine (running Windows Server 2003 Enterprise edition), open the Certificate Authority console (certsrv.msc), right-click on Certificate Templates, and select Manage. This will open a separate Certificate Templates MMC window. Find the User template and right-click to make a duplicate:
![](user_template_duplicate_01.gif)
Provide a name for the template:
![](user_template_duplicate_02.gif)
Click on the Security tab and highlight the Domain Users ACE and grant Allow permissions for Autoenroll:
![](user_template_duplicate_03.gif)
Then back at the Certificate Authority console, right-click Certificate Templates and go to New » Certificate Template to Issue:
![](user_template_duplicate_04.gif)
Then within the Enable Certificate Templates dialog, select the template just created. The new template should now be listed under the Certificate Templates container:
![](user_template_duplicate_05.gif)
Domain users will eventually get a user certificate assigned to them while logged into their machine. This can be verified by opening the Certificate Manager (certmgr.msc) in the context of the logged-on user and looking under the Personal store. However, rather than wait for the autoenrollment to occur, users can force the issuance of a certificate to them within the Certificate Manager window.
Manual User Certificate Request Process
Right-click on the Personal container, go to All Tasks, and Request New Certificate:
![](user_cert_req_01.gif)
This will start the Certificate Request Wizard:
![](user_cert_req_02.gif)
Select the certificate template created earlier:
![](user_cert_req_03.gif)
Provide a friendly name for the request submission:
![](user_cert_req_04.gif)
Click Finish to complete the wizard:
![](user_cert_req_05.gif)
A CSR will be immediately submitted to the certificate authority (as listed within Active Directory) and a signed user certificate will be immediately returned and put into the Personal store's newly-created Certificates container:
![](user_cert_req_06.gif)
Double-click on the certificate to view its contents:
![](user_cert_req_07.gif)
Once user certificates are issued, then client station supplicants can be configured:
EAP-TLS / PEAP-TLS Configuration for Windows XP
The first few steps in creating an EAP-TLS profile is exactly the same as PEAP described above. However, on the Authentication tab, select Smart Card or other Certificate:
![](supplicant_xp_eap-tls_config_01.gif)
Click on Properties and be sure the Active Directory enterprise root CA is selected:
![](supplicant_xp_eap-tls_config_02.gif)
For PEAP-TLS, it's exactly like the original PEAP configuration except within the Protected EAP Properties dialog, the authentication selected at the bottom should be Smart Card or other Certificate (click Configure and ensure that the proper root CA is checked):
![](supplicant_xp_peap-tls_config_01.gif)
EAP-TLS / PEAP-TLS Configuration for Windows Vista
Just follow the same explanation as XP above.
Configuring Non-domain Clients / Users
There are always exceptions in any environment and no matter what the corporate IT security policy says, someone will drum up an excuse to have a guest or personal machine (unauthorized by IT) be given access to the secure 802.11i network. If the C / EO / IO / FO / OO or whoever is demanding the exception, then it's just a few steps to allow the unclean, filthy, virus-ridden zombie machine onto the WLAN:
Configuration for Non-Domain Entities
1. Get a copy of the root CA certificate from the CA machine's CertEnroll share and then import it into the client's "Computer account" Trusted Root Certification Authorities store (see section entitled "Root CA Certificate" above).
2. For PEAP / MS-CHAPv2 users, provide them with temporary domain credentials and in the client PEAP configuration, uncheck "Automatically use my Windows logon name and password" option (see screenshot above). When associating to the network, the users will see a dialog asking for credentials:
![](non-domain_peap_01.gif)
Clicking on the notification bubble will present a login dialog:
![](non-domain_peap_02.gif)
3. EAP-TLS and PEAP-TLS users will require client side certificates. Create the guest user in Active Directory being sure to populate the e-mail address field with some value. Then launch a web browser to the certificate authority's web enrollment services website (http://corp-rootca.corp.mycorp.com/certsrv/).
- When prompted for credentials, enter in domain credentials of the guest user in "domain\user" format.
- Click on Request a certificate.
- Click on Advanced certificate request.
- Click on Create and submit a request to this CA.
- On the next page, chooose the certificate template created earlier, and then hit Submit.
- The next page will offer to install the certificate. If this process was done on the client station, then allow it to install into the user's Personal store.
- If this process was done on the server, install it anyway, open certmgr.msc, and the export the cert from the Personal store with the private key into a file. Then re-import this on the client machine.
Mac OS X Clients
The supplicant built into Mac OS X (at least Leopard as of this writing) natively supports more EAP types than Windows, although PEAP-TLS may not be one of them. Selecting PEAP within OS X will assume that the inner identity is MS-CHAPv2 based.
Mac OS X Configuration
Mac OS X users can set up a wireless connection profile by opening System Preferences, clicking on AirPort, then clicking on the Advanced button. Then click on 802.1X and add a new User Profile. Fill in the blanks as needed.
![](mac_os_x_peap-mschapv2.png)
A copy of the root CA certificate file will need to be imported into the OS X Keychain. Double-clicking on the file will start the import process. If more than one account on the Mac will be used to access the WLAN, then it may be advisable to import it into the System keychain. When prompted, click Always trust.
![](mac_os_x_root_ca_import.png)
For EAP-TLS, a user certificate will also need to be exported from the Certificate Authority (possibly through the web enrollment form, imported into a Windows machine, then exported from the user's personal store as a Personal Information Exchange .pfx format) and then imported into the Mac's user "login" keychain. The operating system's eapolclient will need to be configured for EAP-TLS accordingly similar to the above instructions for PEAP.
Group Policy Wireless Connection Profile Distribution
If Active Directory's schema is properly updated, 802.11 wireless connection profiles can be centrally configured and deployed via Group Policy for Windows Vista clients. See http://technet.microsoft.com/en-us/library/bb727029.aspx for more details.
What the Traffic Looks Like
The following are example packet traces which can be viewed with Wireshark (the captures have extraneous packets filtered out to highlight the key events in the authentication process):
PEAP / MS-CHAPv2:
Traffic Between Client and AP (capture file:
example_peap_ms-chapv2_client.cap)
Packet-by-packet analysis coming later...
Traffic Between AP and IAS (capture file:
example_peap_ms-chapv2_ias.cap)
Packet-by-packet analysis coming later...
EAP-TLS:
Traffic Between Client and AP (capture file:
example_eap-tls_client.cap)
Packet-by-packet analysis coming later...
Traffic Between AP and IAS (capture file:
example_eap-tls_ias.cap)
Packet-by-packet analysis coming later...
PEAP-TLS:
Traffic Between Client and AP (capture file:
example_peap_tls_client.cap)
Packet-by-packet analysis coming later...
Traffic Between AP and IAS (capture file:
example_peap_tls_ias.cap)
Packet-by-packet analysis coming later...
Troubleshooting
There are several places to check regarding authentication issues. IAS logs all authentication attempts to files under %SystemRoot%\system32\LogFiles. While interpreting the raw log files may be confusing, a utility like the IAS Log Viewer can aid in translating the values of the fields. Authentication attempts can also be seen in the System event logs on the IAS server:
IAS System Event Log Example
User MYCORP\jsmith was granted access.
Fully-Qualified-User-Name = corp.mycorp.com/MyCorp Accounts/James Smith
NAS-IP-Address = 10.1.1.21
NAS-Identifier = corp-ap01
Client-Friendly-Name = My Access Point
Client-IP-Address = 10.1.1.21
Calling-Station-Identifier = 000e.35cb.4bf8
NAS-Port-Type = Wireless - IEEE 802.11
NAS-Port = 295
Proxy-Policy-Name = Use Windows authentication for all users
Authentication-Provider = Windows
Authentication-Server =
Policy-Name = My Policy 01
Authentication-Type = PEAP
EAP-Type = Secured password (EAP-MSCHAP v2)
|
Another method of debugging the RADIUS stream between the access point and IAS is to insert a FreeRADIUS server (running on Linux or FreeBSD) between them. Therefore, the AP sends the RADIUS requests to FreeRADIUS, and FreeRADIUS relays the message to IAS. With FreeRADIUS (radiusd) running in debug mode and sending runtime output to a file (radiusd -X >> /var/log/radiusd/debugs) it would be possible to tail the file and see very verbose RADIUS protocol-level messages.
However, having packet-level visibility provides the most benefit since seeing the problems at this level provides immediate insight into the exact reasons why something fails. The two best places to monitor traffic is at the RADIUS server (with a sniffer located either on the server itself or via switch mirror port) and the client side.
Installing a sniffer on the client will allow visibility on EAP / 802.1X messages, but due to limitations with most Windows drivers, 802.11 link messages such as Probe Requests, Association Requests, etc. will not be displayed. If using Wireshark to sniff on the client station itself, uncheck the Promiscious Mode option.
The other (free) option in monitoring the client side is to use a second machine with the BackTrack Linux LiveCD in order to see all the beautiful 802.11 management frames pass between the client station and the AP.
Is All This Really Worth It?
For business environments with more than a dozen or two users, relying on a common passphrase-key is risky due to the relatively easy traffic exposure to anyone who knows the pre-shared key value, because obtaining the WPA 4-way handshake and nonce values is trivial. The administrative burden of updating a single pre-shared key across all network clients in itself makes it worth migrating to a longer-term solution that also provides user-specific logging of who gets onto the network (and at what time).
Home users, on the other hand, generally wouldn't have a need for this level of security unless they're either extremely paranoid, interested in examining the potential of 802.11i, or just want Wi-Fi bragging rights in the neighborhood. Like yours truly. =)
Go back to the main articles list.