多系统FreeRADIUS出现证书链不受信任警告问题求助
解决FreeRADIUS默认配置下的"Certificate chain untrusted"警告
问题原因
你碰到的警告是因为新版本FreeRADIUS(搭配较新的OpenSSL版本)对TLS证书的信任验证逻辑更严格,而CentOS7上的FreeRADIUS 3.0.26和OpenSSL 1.0.6采用的旧版验证规则相对宽松,所以没触发警告。默认生成的证书(包括自签证书)未被FreeRADIUS的信任池认可,导致证书链验证失败。
解决步骤
1. 确认证书配置路径
打开FreeRADIUS的EAP-TLS配置文件(通常路径为/etc/freeradius/3.0/mods-available/eap),定位到tls配置块,确保ca_file、cert_file、key_file的路径正确指向证书文件:
tls { ca_file = "${certdir}/ca.pem" cert_file = "${certdir}/server.pem" key_file = "${certdir}/server.key" # 保留其他原有配置 }
${certdir}默认指向/etc/freeradius/certs/,如果手动填写全路径,要确保文件存在且FreeRADIUS运行用户(通常是freerad)拥有读取权限。
2. 将自签CA证书加入信任链
自签证书本身不在系统信任池中,需要手动添加:
- 复制
/etc/freeradius/certs/ca.pem到系统信任目录:- Debian/Ubuntu:
cp /etc/freeradius/certs/ca.pem /usr/local/share/ca-certificates/freeradius-ca.crt - Rocky/CentOS:
cp /etc/freeradius/certs/ca.pem /etc/pki/ca-trust/source/anchors/freeradius-ca.pem
- Debian/Ubuntu:
- 更新系统信任列表:
- Debian/Ubuntu:
update-ca-certificates - Rocky/CentOS:
update-ca-trust extract
- Debian/Ubuntu:
- 确保FreeRADIUS的
tls配置中ca_file指向该CA证书,若开启了客户端证书验证(verify_client = yes),客户端证书必须由这个CA签发。
3. 临时降低验证严格度(仅测试环境)
如果是测试场景不需要严格验证,可以临时调整TLS配置(生产环境不推荐):
在eap配置的tls块中添加或修改:
tls { # 其他配置... verify_depth = 0 check_crl = no verify_client = no }
4. 重新生成规范证书
默认生成的证书可能存在字段不规范问题,用FreeRADIUS自带脚本重新生成:
cd /etc/freeradius/certs/ ./bootstrap
运行脚本时按提示填写证书信息,确保CN(通用名称)与服务器/客户端的主机名匹配,避免因CN不匹配导致的信任问题。
5. 验证配置生效
重启FreeRADIUS并启动调试模式查看输出:
systemctl restart freeradius freeradius -X
若警告不再出现,说明配置已生效。
内容的提问来源于stack exchange,提问作者maciegpttest
相关产品推荐
相关产品推荐

