2026/10/29 21:07:31

Ubuntu + freeradius 搭建 802.1X EAP-TLS 双向认证测试环境实战

Ubuntu + freeradius 搭建 802.1X EAP-TLS 双向认证测试环境实战 简介面向网络运维与无线安全方向学习者的实操文档聚焦在 Ubuntu 系统上使用 Freeradius 搭建 802.1X EAP-TLS 双向认证测试环境这一典型场景适合已具备 Linux 基础命令操作能力、希望动手验证企业级无线认证流程的中级读者参考。资源包内仅含 1 个 docx 文档压缩后约 472KB篇幅精炼但内容成体系围绕环境准备、Freeradius 与 openssl 安装、users 与 client.conf 配置、TLS 模块证书生成及 eap 参数调整、路由器对接和启动测试等环节展开并附有端口占用、证书权限等常见报错的排查提示。已有 2924 人学习说明该主题在实验环境搭建中需求稳定。读者可据此获得一套可复现的 EAP-TLS 认证配置思路与证书文件用途说明减少从零摸索的时间成本。1. 一台 Ubuntu 加一份 freeradius把 802.1X 的 EAP-TLS 双向认证跑通手里有个无线终端要接 802.1X 网络认证方式指定 EAP-TLS可生产环境不敢直接上得先在实验室把整条链路跑通——这是很多做网络接入、终端适配的工程师都会遇到的场景。这份资源就是围绕这个诉求展开的在 Ubuntu 上用 freeradius 搭一套 EAP-TLS 双向认证测试环境从装包、配 users、配 client、生成证书、改 eap 模块到路由器对接和终端导入 client.p12一条线走完。它适合需要验证终端 EAP-TLS 兼容性、给设备做入网预演、或者想搞明白 802.1X 认证到底怎么握手的人。下面按我实际拆这套东西的顺序讲重点放在参数怎么设、证书怎么生成、启动报错怎么排。2. 环境与依赖为什么是 freeradius 3.0 加 openssl 这套组合2.1 选型逻辑freeradius 在测试环境里的位置802.1X 的本质是「终端—认证者路由器/交换机—认证服务器」三方结构终端不直接和服务器说话中间那台设备把 EAP 报文封装进 RADIUS 转给服务器。所以测试环境里必须有一个能跑 EAP-TLS 的 RADIUS 服务端freeradius 是这类场景里最常见的选择开源、配置全暴露在文本文件里、EAP 模块自带 TLS 支持出问题能一层层看日志不像商业控制器那样把细节包成黑匣子。EAP-TLS 和 EAP-PEAP、EAP-TTLS 最大的区别是双向证书认证——服务器要拿证书证明自己终端也要拿证书证明自己双方都验对方的链。这意味着测试环境里证书体系是核心工作量不是配个密码就完事。freeradius 3.0 的目录结构是/etc/freeradius/3.0/配置分散在users、clients.conf、mods-enabled/eap、certs/几处改错一个文件启动就报错所以下面每一步都标清楚改哪个文件、改哪一行。2.2 装包与网络模式桥接这一步别省服务器系统用 Ubuntu虚拟机跑的话网络连接方式必须改成桥接。原因是认证者和 RADIUS 服务器要在同一个二层广播域里NAT 模式下路由器根本看不到虚拟机的 RADIUS 端口终端连上来认证请求发不出去表现就是一直转圈然后失败很多人卡在这里以为是证书问题。sudo su # 切到 root后面改配置都要权限 apt update # 刷新软件源索引 apt-get install freeradius openssl # 装 freeradius 和 opensslapt update先跑不然装包可能拿到旧索引报依赖错。openssl 单独装是因为后面生成证书、排查证书链都要用它虽然 freeradius 依赖里可能带但显式装上省得后面openssl x509命令找不到。装完确认版本目录存在ls /etc/freeradius/3.0/能看到users、clients.conf、mods-enabled、certs这几个就对了。如果系统里是/etc/freeradius/直接放配置老版本 2.x 的结构说明装到了旧版本路径要相应调整本文按 3.0 的路径走。提示装完先别急着改配置直接freeradius -X跑一次确认默认配置能起来再动手改。基线能跑通后面出问题才知道是自己改坏的。3. 三个配置文件users、clients.conf、eap 各管什么3.1 users 文件测试账号的兜底users文件管的是本地认证账号EAP-TLS 走证书认证其实不查这个文件但测试阶段留一个明文账号很有用——先用它验证 RADIUS 服务本身通不通排除证书因素再切到 TLS。改法是在文件末尾加一行cd /etc/freeradius/3.0/ vim users在末尾添加Testing Cleartext-Password : passwordTesting是身份名password是密码两个都可以自定义但要注意大小写和引号Cleartext-Password是固定属性名不能改。这行的作用是给一个已知账号做连通性测试等 TLS 配好后可以留着也可以删。如果系统没装 vimapt-get install vim补上或者直接用nano。改完保存语法错的话启动时会直接报行号照着改就行。3.2 clients.conf认证者的身份和共享密钥这个文件定义「谁有资格来问 RADIUS 要认证结果」也就是路由器/交换机这些认证者。每个认证者一个 client 块vim clients.conf加入client client1 { ipaddr 192.168.1.1 secret testing123 require_message_authenticator no }client1是别名随便起ipaddr填认证者路由器的地址这里写的是示例实际要换成你路由器 LAN 口或管理口的地址secret是共享密钥必须和路由器上配的完全一致不一致的表现是认证者侧直接丢弃响应日志里看不到任何请求进来require_message_authenticator no是兼容性开关老设备不支持 Message-Authenticator 属性设成 yes 会直接拒掉这些设备的请求测试环境建议先 no跑通后再按需收紧。注意ipaddr写错是最高频的翻车点。路由器实际出口地址和你想的不一样时freeradius 日志里连一条 Access-Request 都没有看起来像服务没起来其实是包根本没被接受。3.3 eap 模块把默认认证方式切成 TLSmods-enabled/eap是 EAP 认证的核心配置默认可能是 peap 或 md5要改成 tls 并指向证书cd /etc/freeradius/3.0/mods-enabled/ vim eap关键段落改成eap { default_eap_type tls tls-config tls-common { private_key_password whatever private_key_file ${certdir}/server.key certificate_file ${certdir}/server.pem ca_file ${cadir}/ca.pem dh_file ${certdir}/dh } }default_eap_type tls决定服务器首选哪种 EAP 方法终端协商时如果只支持 TLS这里必须是 tlsprivate_key_password要和生成 server.key 时设的密码一致默认 makefile 里是whatever改过证书密码这里必须同步改否则启动时报私钥解密失败${certdir}和${cadir}是 freeradius 内置变量分别指向 certs 目录和 CA 目录不用写绝对路径dh_file是 Diffie-Hellman 参数文件TLS 握手密钥交换要用certs 目录的 makefile 会一起生成。这四个路径任何一个指错启动日志里都会明确报「failed to load」或「No such file」照着路径去ls一下就能定位。4. 证书体系make 一把生成但权限和密码是两道坎4.1 生成证书链freeradius 的 certs 目录自带一个 makefile一条 make 把整套证书生成出来cd /etc/freeradius/3.0/certs make生成的关键文件文件作用备注ca.pem自签发根证书服务器验客户端、客户端验服务器都靠它server.pem服务器证书eap 模块里 certificate_file 指向它server.key服务器私钥受密码保护默认 whateverclient.p12客户端个人证书包含证书私钥导入终端用dhDH 参数TLS 密钥交换用client.p12是给终端用的里面打包了客户端证书和私钥导入时需要一个密码默认也是whatever。这个文件要拷到终端设备上安装是整个双向认证里「终端证明自己」的那一半。4.2 权限启动报证书读取失败先看这里freeradius -X启动时如果报证书读取权限问题是 certs 目录下文件权限不对freeradius 运行用户读不到。在 certs 目录下执行chmod 777 ca.pem dh server.key server.pem chmod o-w ca.pem dh server.key server.pem第一条给足读权限第二条去掉其他用户的写权限——私钥文件可写是安全隐患虽然测试环境无所谓但养成习惯。两条连着跑最终效果是运行用户能读、不能改。提示chmod 777只是临时把权限放开让服务先起来生产环境不要这么干私钥文件权限应该收到 640 且属主是 freeradius 运行用户。4.3 端口占用1812 被占就重启启动时另一个常见报错是 1812 端口被占用说明之前有 freeradius 进程没退干净或者别的服务占了 RADIUS 端口。最直接的处理是reboot服务器再启动比手动 kill 进程稳因为 freeradius 可能起了多个子进程。重启后执行freeradius -X看到Ready to process requests就说明服务正常起来了证书、配置、端口全过了。-X是调试模式前台运行并打印详细日志测试阶段就用它别用后台服务方式不然出问题看不到握手细节。5. 路由器对接与终端导入最后一百米最容易翻车5.1 路由器侧参数路由器用网线连好登录管理页面示例是 192.168.1.1实际按你的设备来无线安全方式设为 WPA/WPA2-Enterprise也就是 802.1X 模式然后填 RADIUS 服务器地址和共享密钥。服务器地址填 Ubuntu 机器的地址密钥填clients.conf里那个testing123两边必须一字不差。保存后路由器会开始向 RADIUS 转发认证请求。这一步的验证方法是看 freeradius 的-X输出终端尝试连接时日志里应该出现 Access-Request如果一条都没有回去查clients.conf的 ipaddr 和 secret。5.2 终端侧证书导入与连接把 certs 目录下的client.p12拷到终端设备上安装安装时会要求输入 p12 密码默认whatever。装完后连接路由器广播的热点认证方式选 EAP-TLSCA 证书可以不选测试环境用自签 CA终端不强制校验时能过客户端证书选刚装的那个然后连接。连接成功的标志是 freeradius 日志里走完 TLS 握手并返回 Access-Accept。如果终端侧报证书错误先确认 p12 导入时密码对不对、证书有没有真正装进系统的证书存储安卓和 iOS 对用户证书的存放位置要求不一样装错位置在选证书那一步根本看不到。6. 避坑与排查五条血泪记录6.1 终端一直认证失败日志里没有任何请求现象终端连热点转圈后失败freeradius-X输出干干净净。原因认证者的地址不在clients.conf里或者虚拟机用了 NAT 模式包到不了服务器。解决确认虚拟机网络是桥接ipaddr填路由器实际出口地址改完重启 freeradius。6.2 启动报私钥解密失败现象freeradius -X报无法加载 server.key 或密码错误。原因eap里private_key_password和生成证书时设的密码不一致或者证书被重新生成过密码变了。解决核对 makefile 里的密码和 eap 配置两边统一改完重启。6.3 证书读取权限报错现象启动时提示证书文件无法读取。原因certs 目录下文件权限过严freeradius 运行用户读不到。解决按 4.2 的两条 chmod 处理先放开读再收写权限。6.4 1812 端口被占用现象启动直接退出提示地址已被使用。原因旧 freeradius 进程残留或端口被别的服务占。解决reboot后重新freeradius -X比手动找进程杀更省事。6.5 终端选不到客户端证书现象连接时客户端证书下拉框是空的。原因p12 没装进系统证书存储或装到了用户证书以外的位置。解决重新导入 p12确认密码正确安卓要装到「用户凭据」而不是 Wi-Fi 证书iOS 装完还要在「关于本机—证书信任设置」里确认。7. 进阶验证用 openssl 和日志把握手拆开看环境跑通只是第一步真正要确认「双向」两个字落实了得会看握手细节。我一般用两个手段交叉验证。第一个是 openssl 直接验服务器证书链确认服务器证书能被 ca.pem 验过openssl verify -CAfile /etc/freeradius/3.0/certs/ca.pem \ /etc/freeradius/3.0/certs/server.pem输出OK说明服务器证书链完整。再验客户端证书把 server.pem 换成 client.pem如果 makefile 生成了的话确认客户端证书也是同一 CA 签的。双向认证的前提是两端证书同源不同源握手时一方验不过直接断。第二个是看freeradius -X的 TLS 日志段。成功握手会看到TLS_accept和证书主题信息失败会明确写verify failure或certificate unknown。日志里出现客户端证书的 CN 就说明终端确实把证书递上来了这才叫双向如果只有服务器证书没有客户端证书段说明终端侧没选证书或没装成功退化成单向了。还有一个容易被忽略的点client.p12的密码和server.key的密码默认都是whatever测试环境图省事可以不改但只要这套环境要给别人用或者要接真实设备两个密码都得换换完 eap 配置和终端导入两边同步改。我吃过一次亏改了 server.key 密码忘了改 eap服务起不来排查了半小时从那以后每次动证书密码都强制把 eap 里private_key_password、p12 导入密码、终端连接测试这三步连着走一遍不跳步。希望这套流程能帮到你少在证书权限和端口占用上耗时间。本文还有配套的精品资源点击获取