栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

在Openwrt上配置freeradius进行EAP-TLS认证

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Openwrt上配置freeradius进行EAP-TLS认证

    WPA2/WPA3协议支持基于EAP(可扩展身份验证协议)的认证。相较于使用PSK(预共享密钥)的认证而言,其安全性高出许多。EAP认证需要使用一个RADIUS服务端,而在Openwrt端较为理想的RADIUS服务端是freeradius。对于大多数内存达到128MB的路由器来说,直接在路由器本地运行freeradius是可行的(笔者使用的是Xiaomi AC2100路由器,21.02版本)。本文大致讲述在Openwrt上配置freeradius及其EAP-TLS认证协议的方法。

1.安装必要软件包

    Openwrt有两种安装软件的方式。其一是在编译Openwrt固件时包含该软件包(推荐)。由于Openwrt官方固件中默认包含的是不支持EAP认证的wpad-mini或者wpad-basic-wolfssl,此处需要将其更换为支持EAP认证的wpad(支持WPA2)或者wpad-openssl(支持WPA2和WPA3)。

    构建编译环境的具体过程请参阅Openwrt Wiki:

[OpenWrt Wiki] Build system usage

此处略过,在构建好编译环境之后最后运行make defconfig,再make以检查是否存在缺陷。

一般情况下在使用全新的编译设定时,不要忘了加上luci。

$>make menuconfig

    在Network目录内,选择FreeRADIUS (version 3)子目录,并包含freeradius3, freeradius3-common, freeradius3-default, freeradius3-utils即可。假如需要节省空间(真的吗?)可以不选择freeradius3-default而手动选择需要的模块。此时就需要选择always, attr-filter, detail, digest, eap及需要的eap方法, exec, expiration, logintime, preprocess, radutmp, realm。

    返回上一级,在WirelessAPD子目录内,包含eapol-test-openssl, 移除wpad-mini和wpad-basic-wolfssl, 包含wpad或者wpad-openssl。

    返回主界面进入Utilities目录,向下找到openssl-util并包含。

    随后make download和make即可。

    其二是使用Openwrt的软件包管理器opkg。不推荐使用本方法的原因是,由于Openwrt使用的是只读文件系统squashfs,从已编译好的固件中删除文件是理论不可行的,利用opkg卸载软件包并不能释放空间。

opkg update
opkg remove wpad-mini wpad-basic-wolfssl
opkg install freeradius3 freeradius3-default freeradius3-utils

    或者只安装需要的模块

opkg install freeradius3 freeradius3-common freeradius3-democerts freeradius3-mod-always freeradius3-mod-attr-filter freeradius3-mod-chap freeradius3-mod-detail freeradius3-mod-digest freeradius3-mod-eap freeradius3-mod-eap-gtc freeradius3-mod-eap-leap freeradius3-mod-eap-md5 freeradius3-mod-eap-mschapv2 freeradius3-mod-eap-peap freeradius3-mod-eap-tls freeradius3-mod-eap-ttls freeradius3-mod-exec freeradius3-mod-expiration freeradius3-mod-expr freeradius3-mod-files freeradius3-mod-ldap freeradius3-mod-logintime freeradius3-mod-mschap freeradius3-mod-pap freeradius3-mod-passwd freeradius3-mod-preprocess freeradius3-mod-radutmp freeradius3-mod-realm freeradius3-mod-unix freeradius3-utils

    再安装其他工具

opkg install openssl-util eapol-test-openssl
2.配置EAP-TLS的PKI证书结构

    选择一个目录存放相关证书。由于Openwrt一般情况下不作为多用户系统使用,PKI所在的目录的位置和权限并无严格要求,此处以存放在/etc/certs为例:

mkdir /etc/certs
cd /etc/certs
mkdir ca server clients #用于存放相应证书
touch index.txt
echo 01>serial
vim openssl.cnf

    在openssl.cnf里写入如下内容

[ ca ]
default_ca = radius                
 
[ radius ]
dir = .
database = $dir/index.txt
new_certs_dir = $dir
certificate = $dir/ca/ca_cert.pem
serial = $dir/serial
private_key = $dir/ca/ca_key.pem 
RANDFILE = $dir/.rand
 
default_bits = 4096
default_days = 365                    
default_crl_days = 365                    
default_md = sha512                    
unique_subject = no                     
                                        
policy = policy_anything            
 
[ policy_anything ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = supplied
organizationalUnitName = optional
commonName = supplied
emailAddress = optional

    其中default_ca处可根据自己需要修改。

    default_days和default_crl_days指定证书和证书吊销列表的有效期,该时间最好不要超过365天。部分系统会默认不信任有效期过长的证书。

    创建CA证书。

openssl req -x509 -nodes -newkey rsa:4096 -keyout ca/ca_key.pem -out ca/ca_cert.pem -new -sha512 -subj "/O=EAP-TLS/CN=Certificate Authority/"

    此处的-subj后是自定义字段。O选项为组织名,所有证书应保持一致。CN选项为证书的通用名,对于CA证书可以自行指定,而对于用户证书则需要与实际用户名保持一致,CN不可重复。

    导出x509格式的CA证书,对于Windows客户端而言,连接到受EAP-TLS保护的网络需要将对应的CA证书放入“受信任的根证书列表”存储区。

openssl x509 -outform der -in ca/ca_cert.pem -out ca/CA.crt

    签发服务器证书。

openssl req -nodes -new -newkey rsa:4096 -keyout server/server_key.pem -out server/server_csr.pem -subj "/O=EAP-TLS/CN=Radius Server/" && 
openssl ca -in server/server_csr.pem -out server/server_cert.pem -config openssl.cnf && rm -rf server_csr.pem

    签发客户端证书,并指定导出密码。用户名处换成实际用户名。

openssl req -nodes -new -newkey rsa:4096 -keyout clients/user_<用户名>_key.pem -out clients/user_<用户名>_csr.pem -subj "/O=EAP-TLS/CN=<用户名>/" && 
openssl ca -in clients/user_<用户名>_csr.pem -out clients/user_<用户名>_cert.pem -config openssl.cnf && 
rm -rf clients/user_<用户名>_csr.pem && 
openssl pkcs12 -export -out clients/<用户名>.p12 -inkey clients/user_<用户名>_key.pem -in clients/user_<用户名>_cert.pem -certfile ca_cert.pem

    创建证书吊销列表。

openssl ca -gencrl -keyfile ca/ca_key.pem -cert ca/ca_cert.pem -out ca/crl.pem -config openssl.cnf && 
cat ca/ca_cert.pem ca/crl.pem > ca/ca_cert+crl.pem

    生成DH文件

openssl dhparam -out dh 2048

    到此,EAP-TLS所需的证书PKI就已经配置完毕了。

3.配置freeradius

    打开/etc/freeradius3/clients.conf,由于我们的RADIUS服务端和客户端位于同一设备上,所以只需修改secret即可。

secret = <此处自行指定RADIUS服务器密码>

    编辑/etc/freeradius3/mods-enabled/eap.conf

#使用EAP-TLS认证
default_eap_type = tls
tls-config tls-common {
#此处如果在生成服务器证书时使用-nodes选项则留空,否则输入服务器私钥的密码 
		private_key_password =
#此处指定服务器私钥位置
		private_key_file = /etc/certs/server/server_key.pem
#此处指定服务器证书位置
		certificate_file = /etc/certs/server/server_cert.pem
#此处指定CA证书位置
		ca_file = /etc/certs/ca/ca_cert+crl.pem
#此处指定dh文件位置
		dh_file = /etc/certs/dh
#此处指定随机文件,对于Openwrt而言此处应该为random而不是urandom
		random_file = /dev/random
#此处指定CA目录
		ca_path = /etc/certs/ca
#选择加密方式
		cipher_list = "HIGH"
#设置tls版本为1.2
		tls_min_version = "1.2"
		tls_max_version = "1.2"
verify {
#跳过额外检查
			skip_if_ocsp_ok = yes
#注释此行以关闭检查
			#client = "/usr/bin/openssl verify -CApath ${..ca_path} %{TLS-Client-Cert-Filename}"
}
}

    其余内容则保持默认即可。

编辑/etc/freeradius3/sites-enabled/deault

authorize {
	preprocess
#	files
#	-sql
}
authenticate {
#	Auth-Type PAP {
#		pap
#	}
#	Auth-Type CHAP {
#		chap
#	}
#	Auth-Type MS-CHAP {
#		mschap
#	}
#	mschap
#	digest
}

    其余内容则保持默认即可。

    然后进行测试。准备一个测试文件test_tls.conf,写入以下内容

server={
    eap=TLS
    eapol_flags=0
    key_mgmt=IEEE8021X
    identity="<你的用户名>"

    ca_cert="/etc/certs/ca/ca_cert.pem"
    client_cert="/etc/certs/clients/user_<你的用户名>_cert.pem"
    private_key="/etc/certs/clients/user_<你的用户名>_key.pem"
    private_key_passwd="<私钥密码>"
}

    新开一个shell窗口,执行

service radiusd stop
radiusd -XX

    观察输出结果显示Ready to process requests即为正常运行,否则freeradius会指出具体问题。

    freeradius正常运行后,在原来的窗口中执行

eapol_test -c test_tls -a 127.0.0.1 -s <你的RADIUS服务器密码>

    观看两个窗口的输出结果,如果eapol_test返回success,即为配置完成。

    用Ctrl+C停止freeradius,然后执行

service freeradius start
4.配置wpad

    打开luci-Network-Wireless,选择需要配置的网络,在Wireless Security中选择WPA2-EAP或者WPA3-EAP/WPA2-EAP,填入RADIUS服务器地址127.0.0.1,端口1812,保存应用即可。

配置客户端 1.Windows客户端(以Windows10 1809为例)

使用SCP工具下载ca证书/etc/certs/ca/CA.crt,以及客户端证书/etc/certs/clients/<你的用户名>.p12。

双击CA.crt打开证书,选择安装证书,安装到本地计算机

 选择将所有的类型证书放入下列存储,然后选择受信任的根证书颁发机构

完成即可。

然后打开用户证书,使用同样的步骤,但是放入受信任的发布者。

在设置——网络和Internet中打开网络和共享中心,点击设置新的连接和网络,选择手动连接到无线网络。

 输入网络的SSID,在安全类型中选择WPA2-企业,下一步更改连接设置。

在安全选项卡里选择网络身份验证方法为Microsoft:智能卡或其他证书,点击设置。

当连接时选择在此计算机上使用证书和简单证书选择,点击高级,勾选证书颁发者,从中勾选CA证书签发时的CN名,然后勾选扩展密钥用法,确定。

勾选通过验证证书来验证服务器的身份,从中勾选CA证书签发时的CN名,确定。

然后即可在任务栏中连接到对应的WLAN网络。

2.Android客户端(以Vivo手机Android 11为例)

将客户端证书发送到手机,打开设置——安全——更多安全设置——从存储卡中安装证书。选择Wifi证书,依照提示安装。

连接对应WLAN网络,选择EAP-TLS,然后在CA证书和用户证书处选择安装好的证书,再输入用户名,即可连接。

3.iOS客户端

通过邮件将客户端证书发送到手机,打开后在设置中安装。

连接对应网络,模式选择EAP-TLS,输入用户名,身份选择对应证书,即可连接。

参考:https://zhuanlan.zhihu.com/p/28927420

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/283709.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号