NetworkManager WiFi 802.1X EAP-TLS
Overview
This guide configures WiFi 802.1X EAP-TLS authentication using NetworkManager (nmcli). This is the recommended approach for modern Linux distributions with desktop environments.
|
For headless servers or minimal installs, see wpa_supplicant WiFi Configuration. |
Prerequisites
-
User certificate issued by trusted CA (AD CS or Vault)
-
CA certificate in ISE trust store
-
WLC configured with WPA2-Enterprise SSID
-
ISE policy set configured for WiFi EAP-TLS
Certificate Locations
/etc/ssl/certs/<hostname>-eaptls.pem # Client certificate
/etc/ssl/private/<hostname>-eaptls.key # Private key (chmod 600)
/etc/ssl/certs/HOME-ROOT-CA.pem # CA certificate (AD CS)
# OR
/etc/ssl/certs/DOMUS-ROOT-CA.pem # CA certificate (Vault)
Step 1: Identify WiFi Interface
# List interfaces
nmcli device status
# Example output:
# DEVICE TYPE STATE CONNECTION
# wlan0 wifi disconnected --
# enp0s31f6 ethernet connected Wired-802.1X
Enterprise WiFi Backend: wpa_supplicant vs iwd
|
For enterprise 802.1X environments, NetworkManager MUST use wpa_supplicant as the WiFi backend, not iwd.
|
Configure wpa_supplicant Backend
# Create WiFi backend configuration
sudo mkdir -p /etc/NetworkManager/conf.d
echo -e "[device]\nwifi.backend=wpa_supplicant" | sudo tee /etc/NetworkManager/conf.d/wifi_backend.conf
# Disable iwd completely
sudo systemctl stop iwd
sudo systemctl disable iwd
sudo systemctl mask iwd
# Enable wpa_supplicant
sudo systemctl enable wpa_supplicant
sudo systemctl start wpa_supplicant
# Restart NetworkManager
sudo systemctl restart NetworkManager
|
Some distributions (like Arch Linux) default to iwd. Always verify the backend before configuring enterprise WiFi. |
Step 2: Identify WiFi Interface
|
WiFi interface name varies by system:
|
# Check WiFi interface name
nmcli device status | grep wifi
# Verify it's managed (not "unmanaged")
# Expected: wlan0 wifi disconnected --
# Bad: wlan0 wifi unmanaged --
# Alternative: use ip link
ip link show | grep -i wlan
# Or check wireless devices
iw dev
Step 3: Create WiFi 802.1X Connection
Basic Configuration
Arch Linux doesn’t have hostname command by default. Use cat /etc/hostname or the literal hostname.
|
|
Do NOT use |
# Get your hostname first
MYHOST=$(cat /etc/hostname)
echo "Hostname: $MYHOST"
# Verify WiFi interface name (replace wlan0 if different)
nmcli device status | grep wifi
# Create WiFi 802.1X EAP-TLS connection
sudo nmcli connection add \
type wifi \
con-name "Domus-Secure" \
ifname wlan0 \
ssid "Domus-Secure" \
wifi-sec.key-mgmt wpa-eap \
802-1x.eap tls \
802-1x.identity "$<your-hostname>.inside.domusdigitalis.dev" \
802-1x.ca-cert /etc/ssl/certs/HOME-ROOT-CA.pem \
802-1x.client-cert /etc/ssl/certs/$<your-hostname>-eaptls.pem \
802-1x.private-key /etc/ssl/private/$<your-hostname>-eaptls.key \
802-1x.private-key-password-flags 4 \
connection.autoconnect yes
| Flag | Meaning |
|---|---|
|
Store identity in connection file (not as secret) |
|
Not required (key has no password) |
With Private Key Password
If your private key has a password:
sudo nmcli connection add \
type wifi \
con-name "Domus-Secure" \
ifname wlan0 \
ssid "Domus-Secure" \
wifi-sec.key-mgmt wpa-eap \
802-1x.eap tls \
802-1x.identity "$(hostname).inside.domusdigitalis.dev" \
802-1x.ca-cert /etc/ssl/certs/HOME-ROOT-CA.pem \
802-1x.client-cert /etc/ssl/certs/$(hostname)-eaptls.pem \
802-1x.private-key /etc/ssl/private/$(hostname)-eaptls.key \
802-1x.private-key-password "your-password-here" \
connection.autoconnect yes
Home Lab Example: modestus-p50
# modestus-p50 connecting to Domus-Secure SSID
sudo nmcli connection add \
type wifi \
con-name "Domus-Secure" \
ifname wlan0 \
ssid "Domus-Secure" \
wifi-sec.key-mgmt wpa-eap \
802-1x.eap tls \
802-1x.identity "modestus-p50.inside.domusdigitalis.dev" \
802-1x.ca-cert /etc/ssl/certs/HOME-ROOT-CA.pem \
802-1x.client-cert /etc/ssl/certs/modestus-p50-eaptls.pem \
802-1x.private-key /etc/ssl/private/modestus-p50-eaptls.key \
connection.autoconnect yes
Step 4: Verify Authentication
# Check connection status
nmcli connection show "Domus-Secure"
# Check device status
nmcli device show wlan0
# View assigned IP
ip addr show wlan0
# Check WiFi details
nmcli device wifi list
# Check ISE authentication (from ISE or via netapi)
dsource d000 dev/network
netapi ise mnt session $(cat /sys/class/net/wlan0/address)
Comprehensive Troubleshooting Commands
This section provides quick reference commands for diagnosing wireless 802.1X issues using both NetworkManager (nmcli) and ISE automation (netapi).
NetworkManager Status Commands
# Quick connection status check
nmcli connection show --active | grep -E "NAME|Domus-Secure"
# Detailed connection configuration
nmcli connection show "Domus-Secure-802.1X"
# Check certificate paths and flags
nmcli connection show "Domus-Secure-802.1X" | grep -E "(802-1x.ca-cert|802-1x.client-cert|802-1x.private-key|password-flags)"
# Verify password-flags are correct (should be 4 for passwordless keys)
nmcli connection show "Domus-Secure-802.1X" | grep password-flags
# Check WiFi interface status
nmcli device status | grep wifi
# Show wireless networks in range
nmcli device wifi list
# Check current WiFi connection details
iw dev wlan0 info
# Verify VLAN assignment via IP address
ip addr show wlan0 | grep inet
# Expected for VLAN 10: 10.50.10.x/24
# Expected for VLAN 40: 10.50.40.x/24
ISE Session Verification Commands
# Get wireless MAC address
MAC=$(ip link show wlan0 | grep -oP 'link/ether \K[^ ]+')
echo "Wireless MAC: $MAC"
# Load ISE credentials (from dsec vault)
dsource d000 dev/network
# Check active ISE session
netapi ise mnt session $MAC
# Get detailed authentication diagnostics
netapi ise dc session $MAC
# Check which authorization profile was applied
netapi ise dc session $MAC | grep -i "authorization profile"
# List authorization rules in Corp WIFI policy set
netapi ise get-authz-rules "Corp WIFI"
# Verify ISE policy sets
netapi ise get-policy-sets | grep -i "corp wifi"
Certificate Verification Commands
# Verify certificate and private key match
sudo openssl x509 -in /etc/ssl/certs/modestus-razer-eaptls.pem -noout -modulus | md5sum
sudo openssl rsa -in /etc/ssl/private/modestus-razer-eaptls.key -noout -modulus | md5sum
# MD5 hashes MUST match!
# Check certificate expiration
sudo openssl x509 -in /etc/ssl/certs/modestus-razer-eaptls.pem -noout -dates
# Verify certificate subject matches identity
sudo openssl x509 -in /etc/ssl/certs/modestus-razer-eaptls.pem -noout -subject
# Check CA certificate
sudo openssl x509 -in /etc/ssl/certs/HOME-ROOT-CA.pem -noout -subject -issuer
Live Monitoring Commands
# Monitor NetworkManager logs in real-time
journalctl -u NetworkManager -f
# Monitor wpa_supplicant logs
journalctl -t wpa_supplicant -f
# Combined monitoring (NetworkManager + wpa_supplicant)
journalctl -u NetworkManager -t wpa_supplicant -f | grep -i "wlan0\|802.1x\|eap"
# Monitor with specific filters
journalctl -u NetworkManager -f | grep -E "wlan0|EAP|TLS|authentication"
Quick Diagnostic Flow
When troubleshooting wireless 802.1X issues, follow this sequence:
# 1. Verify you're connected to the correct SSID
iw dev wlan0 info | grep ssid
# Expected: ssid Domus-Secure
# 2. Check IP address to verify VLAN assignment
ip addr show wlan0 | grep "inet "
# Expected: 10.50.10.x (VLAN 10 = DATA_VLAN)
# Wrong: 10.50.40.x (VLAN 40 = RESEARCH_VLAN)
# 3. Check ISE session to see which rule matched
MAC=$(ip link show wlan0 | grep -oP 'link/ether \K[^ ]+')
dsource d000 dev/network
netapi ise dc session $MAC
# 4. If wrong VLAN, check authorization rule order
netapi ise get-authz-rules "Corp WIFI"
# 5. Test connectivity
ping -c 3 10.50.1.1 # pfSense gateway
Connection Management Commands
# Disconnect from wireless
sudo nmcli connection down "Domus-Secure-802.1X"
# Reconnect to wireless
sudo nmcli connection up "Domus-Secure-802.1X"
# Delete connection (to recreate from scratch)
sudo nmcli connection delete "Domus-Secure-802.1X"
# Fix password-flags after connection creation
sudo nmcli connection modify "Domus-Secure-802.1X" \
802-1x.private-key-password-flags 4 \
802-1x.client-cert-password-flags 4 \
802-1x.ca-cert-password-flags 4
Modifying Connection
# Change identity
sudo nmcli connection modify "Domus-Secure" \
802-1x.identity "new-identity@domain"
# Update certificate paths
sudo nmcli connection modify "Domus-Secure" \
802-1x.client-cert /etc/ssl/certs/new-cert.pem \
802-1x.private-key /etc/ssl/private/new-key.key
# Change SSID
sudo nmcli connection modify "Domus-Secure" \
wifi.ssid "New-SSID-Name"
# Disable autoconnect
sudo nmcli connection modify "Domus-Secure" \
connection.autoconnect no
# Set connection priority (higher = preferred)
sudo nmcli connection modify "Domus-Secure" \
connection.autoconnect-priority 100
Migration from wpa_supplicant
If currently using wpa_supplicant for WiFi, follow these steps.
1. Verify wpa_supplicant is Running
# Quick status check
systemctl status wpa_supplicant-wifi@wlan0.service | grep -E "Active:|loaded|running"
# Deep validation - confirm EAP-TLS is working
sudo wpa_cli -i wlan0 status | grep -E "wpa_state|eap_state|ssid|key_mgmt"
Loaded: loaded (/usr/lib/systemd/system/wpa_supplicant-wifi@.service; enabled; preset: disabled)
Active: active (running) since ...
wpa_state=COMPLETED
ssid=Domus-Secure
key_mgmt=WPA2/IEEE 802.1X/EAP
2. Stop and Disable wpa_supplicant
sudo systemctl stop wpa_supplicant-wifi@wlan0.service
sudo systemctl disable wpa_supplicant-wifi@wlan0.service
3. Verify it’s Stopped
systemctl status wpa_supplicant-wifi@wlan0.service | grep -E "Active:|loaded"
Loaded: loaded (/usr/lib/systemd/system/wpa_supplicant-wifi@.service; disabled; preset: disabled)
Active: inactive (dead)
4. Remove Unmanaged Config (if exists)
# Check if NetworkManager was told to ignore wlan0
cat /etc/NetworkManager/conf.d/unmanaged.conf 2>/dev/null
# Remove if exists
sudo rm -f /etc/NetworkManager/conf.d/unmanaged.conf
# Restart NetworkManager
sudo systemctl restart NetworkManager
5. Verify wlan0 is Managed
nmcli device status | grep wlan0
wlan0 wifi disconnected --
|
Keep wired connected during WiFi migration! If NetworkManager WiFi fails, you still have network access via wired to troubleshoot. |
6. Create and Activate Connection
# Create connection (see Step 2 above for full command)
sudo nmcli connection add \
type wifi \
con-name "Domus-Secure" \
ifname wlan0 \
ssid "Domus-Secure" \
wifi-sec.key-mgmt wpa-eap \
802-1x.eap tls \
802-1x.identity "$(hostname).inside.domusdigitalis.dev" \
802-1x.ca-cert /etc/ssl/certs/HOME-ROOT-CA.pem \
802-1x.client-cert /etc/ssl/certs/$(hostname)-eaptls.pem \
802-1x.private-key /etc/ssl/private/$(hostname)-eaptls.key \
connection.autoconnect yes
# Activate
sudo nmcli connection up "Domus-Secure"
7. Verify NetworkManager WiFi
# Quick validation
nmcli connection show "Domus-Secure" | grep -E "GENERAL.STATE|connection.type|802-1x|wifi"
# Device status
nmcli device show wlan0 | grep -E "GENERAL.STATE|IP4.ADDRESS|WIFI"
GENERAL.STATE: 100 (connected)
connection.type: 802-11-wireless
wifi.ssid: Domus-Secure
wifi-sec.key-mgmt: wpa-eap
802-1x.eap: tls
802-1x.identity: modestus-p50.inside.domusdigitalis.dev
GENERAL.STATE: 100 (connected)
IP4.ADDRESS[1]: 10.50.10.xxx/24
8. ISE Session Verification
# Load credentials
dsource d000 dev/network
# Check ISE session (should show dot1x/EAP-TLS)
netapi ise mnt session $(cat /sys/class/net/wlan0/address)
Method: dot1x
Protocol: EAP-TLS
Username: <hostname>.inside.domusdigitalis.dev
Status: PASSED
NAD Name: Home-9800-WLC
Troubleshooting
Check Logs
# NetworkManager logs
journalctl -u NetworkManager -f
# wpa_supplicant logs (NetworkManager uses this internally)
journalctl -t wpa_supplicant -f
# Combined view
journalctl -u NetworkManager -t wpa_supplicant -f
Issue 1: WiFi Interface "unmanaged"
Symptom:
nmcli device status
wlan0 wifi unmanaged --
Cause: NetworkManager configuration file explicitly marks the interface as unmanaged.
Solution:
# Check for unmanaged configuration
ls -la /etc/NetworkManager/conf.d/
# Look for files like unmanaged-wlan0.conf
cat /etc/NetworkManager/conf.d/unmanaged-wlan0.conf
# If it contains:
# [keyfile]
# unmanaged-devices=interface-name:wlan0
# Remove it
sudo rm /etc/NetworkManager/conf.d/unmanaged-wlan0.conf
# Restart NetworkManager
sudo systemctl restart NetworkManager
# Verify wlan0 is now managed
nmcli device status | grep wlan
Issue 2: "Secrets Required" Error
Symptom:
Error: Connection activation failed: Secrets were required, but not provided
Cause: NetworkManager is using iwd backend instead of wpa_supplicant, or connection file has invalid syntax.
Solution A: Verify wpa_supplicant backend
# Check backend configuration
cat /etc/NetworkManager/conf.d/wifi_backend.conf
# Should show:
# [device]
# wifi.backend=wpa_supplicant
# If it shows "iwd", fix it
echo -e "[device]\nwifi.backend=wpa_supplicant" | sudo tee /etc/NetworkManager/conf.d/wifi_backend.conf
# Disable iwd
sudo systemctl stop iwd
sudo systemctl disable iwd
sudo systemctl mask iwd
# Restart NetworkManager
sudo systemctl restart NetworkManager
Solution B: Fix connection file syntax
# Edit connection file
sudo nvim /etc/NetworkManager/system-connections/Domus-Secure.nmconnection
# In [802-1x] section, ensure NO semicolon after tls:
# WRONG: eap=tls;
# CORRECT: eap=tls
# Verify all required fields:
# eap=tls
# identity=<hostname>.inside.domusdigitalis.dev
# ca-cert=/etc/ssl/certs/HOME-ROOT-CA.pem
# client-cert=/etc/ssl/certs/<hostname>-eaptls.pem
# private-key=/etc/ssl/private/<hostname>-eaptls.key
# private-key-password-flags=4
# Reload and retry
nmcli connection reload
nmcli connection up "Domus-Secure"
Issue 3: WiFi Interface Disappeared After Disabling iwd
Symptom:
# After stopping iwd
ip link show wlan0
Device "wlan0" does not exist.
# But WiFi hardware exists
rfkill list
1: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
Cause: iwd created the wlan0 interface. When iwd is stopped without wpa_supplicant taking over, the interface disappears.
Solution:
# Option 1: Reload WiFi driver
lspci -k | grep -A 3 -i wireless # Find driver name (e.g., iwlwifi)
# Unload dependent modules first
sudo modprobe -r iwlmvm
sudo modprobe -r mac80211
sudo modprobe -r iwlwifi
# Reload driver
sudo modprobe iwlwifi
sudo modprobe mac80211
sudo modprobe iwlmvm
# Check if interface appeared (may be wlan1 instead of wlan0!)
ip link show | grep wlan
# Option 2: Reboot (cleanest solution)
sudo reboot
|
Interface name may change from Always verify the actual interface name after driver reload:
|
Issue 4: iwd Still Being Used Despite Configuration
Symptom:
journalctl -u NetworkManager | grep -i iwd
device (wlan0): new IWD device state is connecting
GDBus.Error:net.connman.iwd.Failed: Operation failed
Cause: iwd service is still running, or wifi_backend.conf has wrong value.
Solution:
# 1. Completely disable iwd
sudo systemctl stop iwd
sudo systemctl disable iwd
sudo systemctl mask iwd
# 2. Verify backend configuration
cat /etc/NetworkManager/conf.d/wifi_backend.conf
# Must show "wpa_supplicant", not "iwd"
# If wrong, fix it:
echo -e "[device]\nwifi.backend=wpa_supplicant" | sudo tee /etc/NetworkManager/conf.d/wifi_backend.conf
# 3. Ensure wpa_supplicant is running
sudo systemctl enable wpa_supplicant
sudo systemctl start wpa_supplicant
# 4. Restart NetworkManager
sudo systemctl restart NetworkManager
# 5. Verify logs show wpa_supplicant
journalctl -u NetworkManager -n 50 | grep -i "wpa_supplicant\|iwd"
Issue 5: "invalid property 'identity-flags'" Error
Symptom:
Error: invalid property 'identity-flags': 'identity-flags' not among [...]
Cause: identity-flags parameter is not valid for WiFi connections (only for wired 802.1X).
Solution:
Remove 802-1x.identity-flags 0 from the connection command. The identity is automatically stored in the connection file.
Lessons Learned: The Password-Flags Issue
|
CRITICAL LESSON: Password-flags MUST be set correctly for passwordless private keys This issue affects BOTH wired AND wireless 802.1X configurations and is one of the most common causes of "Secrets were required, but not provided" errors. |
The Problem Explained
When using EAP-TLS with passwordless private keys (keys without encryption), NetworkManager must be explicitly told that no password is required. Otherwise, it will prompt for a password that doesn’t exist, causing authentication failure.
Symptom:
Error: Connection activation failed: Secrets were required, but not provided
Why This Happens:
-
By default, NetworkManager assumes private keys are encrypted
-
When connecting, it waits for a password prompt
-
Since the key has no password, the prompt never resolves
-
Connection fails with "secrets required" error
The Fix:
Set private-key-password-flags=4 which tells NetworkManager: "This key has no password, don’t ask for one"
# For wireless connections:
sudo nmcli connection modify "Domus-Secure-802.1X" \
802-1x.private-key-password-flags 4 \
802-1x.client-cert-password-flags 4 \
802-1x.ca-cert-password-flags 4
# For wired connections:
sudo nmcli connection modify "Wired-802.1X" \
802-1x.private-key-password-flags 4 \
802-1x.client-cert-password-flags 4 \
802-1x.ca-cert-password-flags 4
Flag Values Reference
| Flag Value | Meaning |
|---|---|
|
Agent-owned secret (store in connection file) |
|
Not saved (prompt each time) |
|
Not required |
|
Not required (preferred for passwordless keys) |
Real-World Example: modestus-razer Wireless Deployment
Initial Configuration (BROKEN):
# Created connection WITHOUT password-flags parameter
sudo nmcli connection add type wifi con-name "Domus-Secure-802.1X" \
ifname wlan0 ssid "Domus-Secure" \
wifi-sec.key-mgmt wpa-eap \
802-1x.eap tls \
802-1x.identity "modestus-razer.inside.domusdigitalis.dev" \
802-1x.ca-cert /etc/ssl/certs/HOME-ROOT-CA.pem \
802-1x.client-cert /etc/ssl/certs/modestus-razer-eaptls.pem \
802-1x.private-key /etc/ssl/private/modestus-razer-eaptls.key
# MISSING: 802-1x.private-key-password-flags 4
# Attempted to connect
sudo nmcli connection up "Domus-Secure-802.1X"
# Error: Connection activation failed: Secrets were required, but not provided
After Fix (WORKING):
# Fixed password-flags
sudo nmcli connection modify "Domus-Secure-802.1X" \
802-1x.private-key-password-flags 4 \
802-1x.client-cert-password-flags 4 \
802-1x.ca-cert-password-flags 4
# Connected successfully
sudo nmcli connection up "Domus-Secure-802.1X"
# Connection successfully activated
# Verified VLAN assignment
ip addr show wlan0 | grep inet
# inet 10.50.10.111/24 brd 10.50.10.255 scope global dynamic noprefixroute wlan0
# ✓ Correct: VLAN 10 (DATA_VLAN)
Why This Applies to Both Wired AND Wireless
The 802-1x.* parameters are shared between wired and wireless connections in NetworkManager:
-
Wired 802.1X: Uses NetworkManager with 802-1x authentication
-
Wireless 802.1X: Uses NetworkManager with 802-1x authentication + WiFi parameters
Both use the same underlying EAP-TLS implementation, so password-flags behavior is identical.
Prevention: Always Include in Initial Configuration
Best Practice for Wireless:
sudo nmcli connection add type wifi con-name "Domus-Secure-802.1X" \
ifname wlan0 ssid "Domus-Secure" \
wifi-sec.key-mgmt wpa-eap \
802-1x.eap tls \
802-1x.identity "$(hostname).inside.domusdigitalis.dev" \
802-1x.ca-cert /etc/ssl/certs/HOME-ROOT-CA.pem \
802-1x.client-cert /etc/ssl/certs/$(hostname)-eaptls.pem \
802-1x.private-key /etc/ssl/private/$(hostname)-eaptls.key \
802-1x.private-key-password-flags 4 \ # ← CRITICAL!
connection.autoconnect yes
Best Practice for Wired:
sudo nmcli connection add type ethernet con-name "Wired-802.1X" \
ifname enp0s31f6 \
802-1x.eap tls \
802-1x.identity "$(hostname).inside.domusdigitalis.dev" \
802-1x.ca-cert /etc/ssl/certs/HOME-ROOT-CA.pem \
802-1x.client-cert /etc/ssl/certs/$(hostname)-eaptls.pem \
802-1x.private-key /etc/ssl/private/$(hostname)-eaptls.key \
802-1x.private-key-password-flags 4 \ # ← CRITICAL!
802-1x.identity-flags 0 \
connection.autoconnect yes
Key Takeaways
-
Always set
private-key-password-flags 4for passwordless keys -
This applies to both wired AND wireless 802.1X
-
Can be fixed after connection creation with
nmcli connection modify -
Symptoms include "Secrets required" error despite valid certificates
-
This is a NetworkManager behavior, not an ISE or certificate issue
Cross-References
-
Wired 802.1X: NetworkManager Wired - Password Flags
-
Wireless troubleshooting: Issue 2: Secrets Required
Common Issues
| Issue | Solution |
|---|---|
"No secrets provided" |
Check certificate paths and permissions, verify wpa_supplicant backend |
"TLS handshake failed" |
Verify CA cert matches ISE trust store |
"Authentication rejected" |
Check ISE logs, verify identity matches certificate CN |
Connection keeps disconnecting |
Check WLC policy profile, verify AAA override and NAC enabled |
"Secrets required but not provided" |
Set |
SSID not found |
Verify SSID spelling, check WiFi radio is enabled |
Debug Mode
# Enable debug logging
sudo nmcli general logging level DEBUG domains ALL
# Attempt connection
sudo nmcli connection up "Domus-Secure"
# View debug output
journalctl -u NetworkManager --since "1 minute ago"
# Reset logging
sudo nmcli general logging level INFO domains DEFAULT
GUI Alternative
For GNOME/KDE users:
-
Settings → Wi-Fi → Select "Domus-Secure" network
-
Security: WPA/WPA2 Enterprise
-
Authentication: TLS
-
Identity:
hostname.inside.domusdigitalis.dev -
CA Certificate: Browse to
/etc/ssl/certs/HOME-ROOT-CA.pem -
User Certificate: Browse to
/etc/ssl/certs/<hostname>-eaptls.pem -
User Private Key: Browse to
/etc/ssl/private/<hostname>-eaptls.key -
Connect
Quick Reference
# Create WiFi 802.1X connection
sudo nmcli connection add type wifi con-name "Domus-Secure" \
ifname wlan0 ssid "Domus-Secure" wifi-sec.key-mgmt wpa-eap \
802-1x.eap tls \
802-1x.identity "$(hostname).inside.domusdigitalis.dev" \
802-1x.ca-cert /etc/ssl/certs/HOME-ROOT-CA.pem \
802-1x.client-cert /etc/ssl/certs/$(hostname)-eaptls.pem \
802-1x.private-key /etc/ssl/private/$(hostname)-eaptls.key
# Activate
sudo nmcli connection up "Domus-Secure"
# Status
nmcli device status
nmcli connection show --active
# Logs
journalctl -u NetworkManager -f
# ISE verification
netapi ise mnt session $(cat /sys/class/net/wlan0/address)
Comparison: wpa_supplicant vs NetworkManager
| Aspect | wpa_supplicant | NetworkManager |
|---|---|---|
Config file |
|
Stored in |
Service |
|
|
Management |
Manual (config file edits) |
|
Desktop integration |
Limited |
Full (GNOME, KDE, etc.) |
Network switching |
Manual |
Automatic |