Ubuntu 22.04 搭建 FreeRADIUS 并使用 EAP-TLS 进行本地测试(eapol_test)

在本教程中,我们将使用 Ubuntu 22.04 搭建 FreeRADIUS 服务器,并使用 EAP-TLS 进行本地测试。测试工具选用 eapol_test(WPA Supplicant 的测试工具)。


1️⃣ 安装 FreeRADIUS 服务器

首先,确保你的系统是 Ubuntu 22.04(其他的也可以) 并更新软件包:

1
sudo apt update && sudo apt upgrade -y

然后,安装 FreeRADIUS:

1
sudo apt install freeradius -y

安装完成后,检查 FreeRADIUS 是否正确安装:

1
freeradius -v

输出类似:

1
FreeRADIUS Version 3.0.26

2️⃣ 生成 EAP-TLS 认证所需的证书

FreeRADIUS 需要 CA(根证书)服务器证书客户端证书 来进行 EAP-TLS 认证。我们可以使用 FreeRADIUS 提供的 bootstrap 脚本生成这些证书。如果不行,就自己使用openssl生成

2.1 进入证书目录

1
cd /etc/freeradius/3.0/certs/

2.2 生成证书

执行 bootstrap 脚本:

1
sudo ./bootstrap

成功后,生成的证书包括:

  • ca.pem(根证书)
  • server.pem(服务器证书)
  • server.key(服务器私钥)
  • client.pem(客户端证书)
  • client.key(客户端私钥)

3️⃣ 配置 FreeRADIUS 启用 EAP-TLS

编辑 EAP 配置文件

1
sudo nano /etc/freeradius/3.0/mods-enabled/eap

找到 tls-config tls-common 部分,修改如下:

1
2
3
4
5
6
7
8
9
10
11
tls-config tls-common {
private_key_password = whatever
private_key_file = /etc/freeradius/3.0/certs/server.pem
certificate_file = /etc/freeradius/3.0/certs/server.pem
ca_file = /etc/freeradius/3.0/certs/ca.pem

dh_file = /etc/freeradius/3.0/certs/dh
random_file = /dev/urandom

cipher_list = "DEFAULT"
}

然后,在 eap { } 块中启用 TLS:

1
2
3
4
eap {
default_eap_type = tls
tls = tls-common
}

保存并退出(Ctrl + X,然后 Y)。


4️⃣ 启用客户端认证

clients.conf 中添加客户端:

1
sudo nano /etc/freeradius/3.0/clients.conf

添加:

1
2
3
4
client localhost {
ipaddr = 127.0.0.1
secret = testing123
}

保存并退出。(一般有默认的,可以不添加)


5️⃣ 启动 FreeRADIUS 并检查日志

重新启动 FreeRADIUS:

1
sudo systemctl restart freeradius

确保它在监听:

1
sudo freeradius -X

这会以 调试模式 运行 FreeRADIUS,你可以看到详细的日志输出。


6️⃣ 安装 eapol_test 进行本地测试

eapol_test 是 WPA Supplicant 提供的一个工具,可用于测试 EAP 认证。

6.1 安装 wpa_supplicant

1
sudo apt install wpasupplicant eapoltest -y

6.2 创建 eapol_test 配置文件

1
sudo nano eapol_test.conf

内容如下:

1
2
3
4
5
6
7
8
9
10
network={
eap=TLS
identity="testuser"
anonymous_identity="anonymous"
ca_cert="/etc/freeradius/3.0/certs/ca.pem"
client_cert="/etc/freeradius/3.0/certs/client.pem"
private_key="/etc/freeradius/3.0/certs/client.key"
private_key_passwd="whatever"
phase1="tls_disable_tlsv1_0=1 tls_disable_tlsv1_1=1"
}

保存退出。(一般情况还要更改证书权限)

需要修改证书权限,否则可能会遇到 权限拒绝 (Permission denied) 的错误。


🔹 6.3 更改证书权限

eapol_test 需要正确的权限才能访问证书文件,因此我们需要调整 CA 证书、客户端证书、私钥 的权限。

1️⃣ 确保当前用户可以访问证书

1
2
3
sudo chown $(whoami):$(whoami) /etc/freeradius/3.0/certs/client.pem
sudo chown $(whoami):$(whoami) /etc/freeradius/3.0/certs/client.key
sudo chown $(whoami):$(whoami) /etc/freeradius/3.0/certs/ca.pem

$(whoami) 会自动替换成你的用户名。

2️⃣ 只给自己权限访问私钥

1
chmod 600 /etc/freeradius/3.0/certs/client.key
  • 600 代表 只有文件所有者可读写,其他人不能访问,确保私钥安全。

3️⃣ 确保 CA 证书可被读取

1
chmod 644 /etc/freeradius/3.0/certs/ca.pem
  • 644 代表 所有人可以读取,但只有文件所有者可以写入

4️⃣ 确保客户端证书可被读取

1
chmod 644 /etc/freeradius/3.0/certs/client.pem

如果仍然报错 Permission denied

  1. 确保你是以 当前用户 运行 eapol_test,而不是 sudo eapol_test(否则权限不匹配)。
  2. 如果 FreeRADIUS 运行在 freerad 账户下,你可能需要:
    1
    sudo chown freerad:freerad /etc/freeradius/3.0/certs/*
  3. 实在不行,复制到桌面

🔹 6.5 总结

更改证书所有者chown
设置合适的权限chmod 600(私钥)和 chmod 644(证书)


7️⃣ 运行 eapol_test 进行测试

执行测试:

1
eapol_test -c eapol_test.conf -a 127.0.0.1 -p 1812 -s testing123

如果认证成功,你会看到:

1
EAP authentication succeeded

如果失败,请检查 freeradius -X 的输出日志,修正错误。


8 结论

至此,你已经:
安装 FreeRADIUS
生成 EAP-TLS 证书
配置 FreeRADIUS 启用 EAP-TLS
配置客户端 eapol_test 进行本地测试
成功完成 EAP-TLS 认证