资讯动态

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

发布时间:2026/10/29 21:07:15 来源:尧图企业网站定制
简介面向网络运维与无线安全方向的学习者这份文档聚焦 Ubuntu 环境下基于 FreeRADIUS 搭建 802.1X EAP-TLS 双向认证测试环境的完整流程适合已具备 Linux 基础、希望动手验证企业级无线认证方案的初中级技术人员参考。资源包内仅含 1 个 docx 文件体积约 472KB以图文步骤形式组织内容便于边看边在虚拟机或实体机上复现。文档从系统与工具准备讲起依次覆盖 FreeRADIUS 与 OpenSSL 安装、users 与 client.conf 配置、TLS 模块参数调整、CA 根证书及服务器证书与客户端 p12 证书的生成、路由器 RADIUS 对接以及服务启动与客户端证书导入测试等环节并对权限不足、1812 端口占用等常见报错给出排查提示。目前已有 2924 人学习适合作为 EAP-TLS 认证实验的入门操作手册与排错参考。1. 一台 Ubuntu 加一个 FreeRADIUS把 802.1X 的 EAP-TLS 双向认证跑通手上有个无线设备要过 802.1X 认证厂商文档只丢一句“支持 EAP-TLS”剩下的全靠自己搭环境验证。真到动手时才发现证书怎么生成、CA 怎么下发、客户端证书怎么装、FreeRADIUS 的 eap 模块参数怎么对每一步都能卡半天。这份资源就是干这件事的在一台 Ubuntu 上用 FreeRADIUS 搭一套 EAP-TLS 双向认证测试环境服务端和客户端互相验证证书跑通之后再去对接真实设备就有底了。适合做无线接入认证的测试人员、嵌入式网络模块的开发者以及需要给设备做 802.1X 兼容性验证的工程师。整套流程不依赖特殊硬件一台能桥接上网的 Ubuntu 虚拟机加一个支持 WPA-Enterprise 的路由器就能复现。2. 环境准备与 FreeRADIUS 安装先把地基打平EAP-TLS 这套东西对网络拓扑比一般服务敏感装软件之前先把两件事定下来系统版本和网络模式。资源里明确要求服务器用 Ubuntu虚拟机场景必须把网络连接方式改成桥接模式。原因不复杂——认证过程里路由器要主动把 RADIUS 请求发到服务器的 1812 端口NAT 模式下虚拟机的地址对路由器不可见请求根本到不了后面所有排错都是白费。2.1 系统与网络模式的选择理由桥接模式让虚拟机在局域网里拿到一个和物理机同网段的地址路由器才能把它当成一台独立的 RADIUS 服务器来访问。如果坚持用 NAT就得在宿主机上做端口转发把 UDP 1812 和 1813 转到虚拟机配置量翻倍且容易漏。我一般直接桥接省掉这层不确定性。装系统时选最小化安装即可不需要桌面环境后面全在终端里操作。装完系统先确认网络连通性用ip addr看虚拟机拿到的地址记下来后面配 client.conf 和路由器都要用。假设这里拿到的是192.168.1.100路由器网关是192.168.1.1这个网段信息贯穿全文。2.2 安装 FreeRADIUS 与 OpenSSL资源给的安装命令很直接切 root、更新源、装两个包。这里补一句Ubuntu 仓库里的 freeradius 版本通常是 3.0.x目录结构就是/etc/freeradius/3.0/和资源里写的一致。如果系统里没有 vim先装上否则后面编辑配置文件会卡住。sudo su # 切换至 root 用户后续配置都在 root 下进行 apt update # 刷新 apt 源索引 apt-get install freeradius openssl # 安装 FreeRADIUS 服务端与证书工具 apt-get install vim # 补装编辑器避免后续 vim 命令不可用装完之后确认服务状态和版本别急着改配置freeradius -v # 查看版本确认是 3.0.x systemctl status freeradius # 看服务是否已注册此时先不用启动 ls /etc/freeradius/3.0/ # 确认配置目录存在freeradius -v输出的版本号决定了配置路径3.0 和 4.x 的目录结构差别很大资源里所有路径都按 3.0 写。systemctl status此时显示 inactive 是正常的我们后面会用调试模式手动拉起不走 systemd方便看日志。ls那一步是确认users、clients.conf、mods-enabled/这些关键文件都在缺了说明包装得不完整重装比硬修快。提示安装过程中如果弹出 debconf 配置界面询问是否启动服务选否。我们要先改完配置再用freeradius -X前台启动让服务自启反而会占住 1812 端口后面调试时端口冲突的报错就是这么来的。3. 用户、客户端与 TLS 模块三处配置决定认证能不能过FreeRADIUS 的配置分散在几个文件里EAP-TLS 场景下真正要动的就三处users里放测试身份clients.conf里登记认证终端这里是路由器mods-enabled/eap里配证书路径和 EAP 类型。三处任何一处对不上认证都会在某个阶段静默失败所以每改一处都要清楚它在认证流程里扮演什么角色。3.1 users 文件放一个测试身份users文件定义的是认证账号。EAP-TLS 理论上靠证书认证但 FreeRADIUS 的默认配置里仍然会走一遍用户查找放一个测试身份能让流程更顺也方便先用 PAP 验证服务本身是通的。cd /etc/freeradius/3.0/ vim users在文件末尾添加Testing Cleartext-Password : passwordTesting是身份名称password是明文密码两个都可以自定义但客户端连接时填的身份要和这里一致。Cleartext-Password是 FreeRADIUS 的标准属性写法表示以明文比对密码测试环境够用生产环境应换成哈希形式。改完保存后面用freeradius -X启动时如果这行有语法错误日志里会直接指出行号。3.2 clients.conf登记路由器这个认证终端clients.conf定义哪些设备有权向 RADIUS 服务器发请求。这里的“客户端”指的是路由器认证者不是手机或终端设备这个概念第一次搭环境时最容易搞混。vim clients.conf加入如下配置块client client1 { ipaddr 192.168.1.1 secret testing123 require_message_authenticator no }client1是别名随便起ipaddr填路由器的管理地址必须和实际网段一致secret是共享密钥路由器的 RADIUS 配置里要填同一个值两边不一致时日志里会出现“invalid shared secret”之类的提示require_message_authenticator no是资源特别强调的一点老设备的 RADIUS 实现不带 Message-Authenticator 属性设成 yes 会直接拒掉请求测试环境建议先关掉等设备确认支持再打开。注意ipaddr写错是最高频的翻车点。路由器从哪个接口发 RADIUS 请求源地址就是哪个如果路由器有多个网段要确认它用的是和服务器同网段的那个地址必要时在路由器上指定 RADIUS 源接口。3.3 eap 模块证书路径与 EAP 类型这是 EAP-TLS 的核心配置。先确认mods-enabled/eap是软链接还是实体文件Ubuntu 包默认是软链到mods-available/eap直接编辑即可。cd /etc/freeradius/3.0/mods-enabled/ vim eap找到eap {块把default_eap_type改成 tls并核对tls-config tls-common里的证书路径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把默认认证方式从 PEAP 切到 TLS不改这一行客户端协商时会走错分支。private_key_password要和生成证书时设的密码一致资源里默认是whatever这个值在certs/Makefile里定义改过证书密码的话这里必须同步。${certdir}和${cadir}是 FreeRADIUS 的内置变量分别指向证书目录和 CA 目录用变量比写绝对路径更稳。dh_file是 Diffie-Hellman 参数文件make生成证书时会一并产出缺了它 TLS 握手会在密钥交换阶段失败。4. 证书生成与权限EAP-TLS 最容易翻车的一段EAP-TLS 的双向认证本质是两张证书的互相验证服务器用server.pem证明自己客户端用client.p12证明自己两边都拿ca.pem验对方。证书生成靠certs目录下的 Makefile一条make全出但生成之后的权限和导入环节才是真正花时间的地方。4.1 用 Makefile 一次性生成证书链cd /etc/freeradius/3.0/certs make执行后目录里会多出一批文件关键几个的作用如下文件作用使用方ca.pem自签发根证书服务器与客户端互验server.pem服务器证书FreeRADIUSserver.key服务器私钥密码默认 whateverFreeRADIUSclient.p12PKCS#12 个人证书含证书、私钥密码默认 whatever终端设备导入dhDiffie-Hellman 参数TLS 密钥交换make过程中会提示输入一些信息测试环境一路回车用默认值即可唯一要记住的是私钥密码默认whatever和 eap 文件里的private_key_password对应。client.p12是给终端设备用的里面打包了客户端证书和私钥导入设备时需要的密码也是whatever。4.2 权限问题与端口占用两个必踩的坑第一次freeradius -X启动十有八九会看到证书读取失败的报错原因是server.key默认权限过严FreeRADIUS 以非 root 身份运行时读不到。资源给的解法是放宽权限cd /etc/freeradius/3.0/certs chmod 777 ca.pem dh server.key server.pem chmod o-w ca.pem dh server.key server.pem第一行给所有用户读写执行权限第二行再去掉其他用户的写权限最终效果是证书可读、私钥可读但不可被随意改写。测试环境这么处理没问题生产环境应该用属组加 640 的方式把 freeradius 运行用户加进证书属组而不是放开到 777。第二个坑是 1812 端口被占用。如果之前用 systemd 启动过服务或者上一次freeradius -X没退干净再次启动就会报地址已被使用。资源里的做法是重启服务器这招有效但重。更快的做法是先查再杀ss -ulnp | grep 1812 # 查谁占着 1812 systemctl stop freeradius # 如果是 systemd 拉起的先停掉 pkill -f freeradius # 兜底清掉残留进程 freeradius -X # 重新前台启动看到Ready to process requests才算真正起来了。这一行出现之前的所有输出都值得逐行看证书路径错、密码错、模块加载失败都会在这之前暴露。4.3 路由器侧配置与客户端证书导入路由器用网线连到同一局域网浏览器登录管理页面资源里是192.168.1.1无线设置里把安全模式设为 WPA-Enterprise认证服务器地址填 Ubuntu 的地址共享密钥填clients.conf里的testing123保存生效。这一步的关键是地址和密钥两边严格一致端口默认 1812 不用改。终端侧把client.p12拷出来导入设备。以常见移动端为例导入时会要求输入证书密码填whatever连接 Wi-Fi 时 EAP 方法选 TLS身份填TestingCA 证书可以不选测试环境客户端证书选刚导入的那张。连接过程中如果卡在“正在验证”回到服务器看freeradius -X的输出握手停在哪一步一目了然。5. 避坑与排查认证失败的五个典型现场EAP-TLS 的失败大多不报明确错误客户端只显示“认证失败”真正的线索全在freeradius -X的前台日志里。下面五条是按出现频率排的每条都按现象、原因、解决写照着对基本能定位。现象一客户端一直停在“正在连接”服务器日志没有任何请求。原因通常是网络层不通虚拟机用了 NAT 或者防火墙挡了 UDP 1812。解决确认虚拟机是桥接模式ip addr看地址是否和路由器同网段再在服务器上tcpdump -i any udp port 1812看有没有包进来没包就是路由或防火墙问题和 FreeRADIUS 配置无关。现象二日志出现“Invalid shared secret”。原因是对clients.conf里的secret和路由器上填的不一致或者路由器的 RADIUS 请求源地址不在ipaddr范围内。解决两边密钥逐字符核对注意有没有多余空格再看日志里记录的源 IP把它补进clients.conf或改成对应网段。现象三TLS 握手到一半断开日志提示证书相关错误。原因是证书权限不足或路径写错。解决按 4.2 节处理权限再核对eap文件里${certdir}、${cadir}展开后的实际路径用ls逐个确认文件存在。私钥密码不一致也会表现成类似错误检查private_key_password是否和生成时一致。现象四客户端提示证书不受信任或直接拒绝连接。原因是终端没有正确导入client.p12或者导入时密码输错导致证书链不完整。解决删掉设备上已导入的证书重新导入密码填whatever部分设备要求同时安装 CA 证书把ca.pem也导进去再试。现象五服务启动时报 1812 端口占用。原因是 systemd 服务或残留进程占着端口。解决按 4.2 节的ss加pkill组合清理确认端口释放后再前台启动。别直接 reboot重启解决的是表象下次还会复现。提示调试期间始终用freeradius -X前台启动不要用systemctl start。前台模式会把每个请求的认证阶段、模块调用、属性比对全打出来是这套环境里唯一的“黑匣子”。等全部跑通再切回 systemd 做常驻。6. 进阶验证用 radtest 和日志把认证链路拆开看环境跑通一次不算完真正有价值的是能独立判断“失败发生在哪一段”。我的习惯是先用radtest把 RADIUS 服务本身和证书链路分开验证再上真实设备这样出问题时能立刻排除一半变量。radtest是 freeradius-utils 里带的命令行工具直接对 1812 端口发认证请求不经过无线环节apt-get install freeradius-utils radtest Testing password 127.0.0.1 0 testing123参数依次是用户名、密码、服务器地址、NAS 端口号、共享密钥。返回Access-Accept说明users配置和服务监听都正常返回Access-Reject就去看freeradius -X的日志问题在用户或密码如果连不上问题在服务没起或端口不对。这一步把“服务通不通”和“无线通不通”彻底分开了比直接拿手机反复试高效得多。再进一步可以打开详细日志观察 EAP 协商的每个阶段。在freeradius -X的输出里一次成功的 EAP-TLS 认证会依次出现 TLS 握手开始、证书交换、客户端证书校验通过、最终 Access-Accept。如果握手在证书交换后中断基本可以锁定客户端证书问题如果在 TLS 开始前就断了多半是 EAP 类型协商或共享密钥的问题。把这几个阶段的日志特征记下来以后看任何一台设备的认证失败都能快速归类。还有一个容易被忽略的点client.p12的密码和server.key的密码默认都是whatever但它们是两个独立的密码分别定义在certs/Makefile的不同变量里。改其中一个不会影响另一个排查时别想当然认为改一处就全同步了。我一般会在生成证书后立刻把这两个密码和eap文件里的值对一遍写进自己的环境记录里避免过几天回来完全想不起当时改了什么。从那以后我每次搭这类认证环境都强制先跑一遍radtest再碰真实设备把服务端和无线端的问题隔离开省下的时间远比多敲一行命令多。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑