王润园,葛 声,荆 浩
(航空工业西安航空计算技术研究所,陕西 西安 710068)
随着网络的普及和智能设备的发展,人们应用网络的场景越来越多,产生了许多复杂的大型局域网。为满足局域网的大范围统一远程认证需求,远程访问拨入用户服务(Remote Authentication Dial In User Service,RADIUS)应运而生。
基于RADIUS 的无线网络接入认证系统采用数字证书进行接入认证,网络管理者无须维护大批量用户的账号密码,用户仅妥当保存事先分发的密钥文件即可。
RADIUS 是一种分布式、基于客户端/服务器架构的信息交互协议,是应用最广泛的认证、授权、计费(Authentication、Authorization、Accounting,AAA)协议。在电气与电子工程师协会(Institute of Electrical and Electronics Engineers,IEEE)提出的无线网络接入认证802.1X 标准中,采用的是RADIUS 协议进行认证[1]。
数字证书是一种权威性的电子文档,提供一种在网络上验证身份的方式,标志着通信各方的身份信息。数字证书由电子商务认证中心所颁发,较为权威且公正[2]。
OpenSSL 是一个开源的软件库包,应用程序可以使用这个软件库包进行网络认证和安全通信,并确认另一方的身份。OpenSSL的一个重要功能就是证书管理,实现基于X.509 标准的编解码,支持对证书的管理,包括证书密钥产生、请求产生、证书签发、吊销及验证[3]。
当使用RADIUS 和数字证书方式进行无线网络接入认证时,网络管理人员需搭建的网络拓扑如图1所示,较为复杂且具有层次化。其中,第1 层为RADIUS认证服务器,负责进行RADIUS 服务器认证;第2 层为RADIUS 代理服务器,负责接入无线接入点,并转发RADIUS 认证请求至RADIUS 认证服务器;第3 层为无线接入点层,包含若干个无线接入点,通过网口或者交换机与RADIUS 代理服务器相连;第4 层为客户端层,通过发送无线网络接入请求来接入无线网络[4]。
图1 基于RADIUS 的网络接入认证系统的网络拓扑
当客户端发送无线网络接入请求并使用证书作为接入认证凭据时,RADIUS 的认证过程如下。首先,客户端发起接入无线网络的请求,通过无线接入点进行捕获,并将请求转发至RADIUS 代理服务器;其次,RADIUS 代理服务器将客户端接入请求转发至RADIUS 认证服务器;再次,RADIUS 认证服务器会对请求中携带的证书进行认证,并将认证结果转发至RADIUS 代理服务器;最后,RADIUS 代理服务器依据认证结果决定是否允许客户端接入网络[5]。
以FreeRADIUS 为例,配置RADIUS 认证服务需要在Linux 操作系统上安装FreeRADIUS 开源软件包,安装完成后按照需求更改安装目录下的radius.conf 文件、client.conf 文件、proxy.conf 文件以及eap文件。
首先,在clients.conf 文件中配置该RADIUS 服务器可接入的所有无线接入点的热点名称、IP 及接入密码。其次,在eap.conf 文件中配置对eap 的认证方式和相应的服务器证书信息。一般eap 的认证方式设置为tls,并配置OpenSSL 生成的服务器证书文件路径,包括服务器私钥文件密码、服务器私钥文件的位置、服务器证书的位置及CA 根证书的位置。再次,在radiusd.conf 文件中配置RADIUS 服务器中的各个关键文件的路径缩写信息和是否记录日志等信息,用户可以使用路径缩写配置其他文件。最后,在proxy.conf 文件中配置RADIUS 认证服务器网际互连协议(Internet Protocol,IP)和端口,或者下一层代理服务器的IP 和端口。
文件需要根据RADIUS 服务器的作用进行配置。如果该RADIUS 服务器的作用是认证RADIUS 请求,且没有直接接入无线接入点,则需要配置eap.conf文件和proxy.conf 文件,保证其中不包含任何其他RADIUS 服务器的IP 和端口;如果该RADIUS 服务器的作用是认证RADIUS 请求,且直接接入无线接入点,则需要配置eap.conf 文件、proxy.conf 文件及client.conf文件;若该RADIUS 服务器是RADIUS 代理服务器,则需要配置clients.conf 文件和proxy.conf 文件。
使用数字证书进行网络认证,需要OpenSSL 生成一个CA 中心证书,并使用该CA 中心证书生成多个用户证书。其中一个证书作为RADIUS 认证服务器证书进行使用,其余证书可以作为客户端证书分发给需要接入的客户端。
首先,使用openssl 生成服务器证书,需要生成服务器证书私钥指令(openssl genrsa -out server.key 2048)、创建服务器证书请求文件输入一系列证书信息指 令(openssl req -new -out server.csr -key server.key)、生成服务器证书指令(openssl req -new -x509 -key server.key -out server.cer -days 3650)。其次,使用OpenSSL 生成至少一个客户端证书,生成客户端指令与生成服务器证书的指令一致。最后,使用校验指令(openssl verify -CAfile root.crt server.crt)对客户端/服务器证书与CA根证书校验,返回“OK”即表示验证成功。
在使用OpenSSL 完成这3 个步骤后,得到一个CA 证书及其私钥、一个服务器证书及其配置文件和私钥、若干个客户端证书及其配置文件和私钥,此时应依照说明将CA 证书及其私钥、服务器证书及其私钥放置于服务器的对应存储位置。
在完成服务器端的网络配置后,需要将客户端证书及其私钥放置到客户端的相应存储路径。文章给出一种在Linux 操作系统上进行无线网络接入验证的方法,使用wpa_supplicant 工具在Linux 客户端上发送无线网络接入请求,并使用数字证书进行无线网络接入认证。
在Linux 客户端上以文本文件形式编写配置文件wpa_supplicant.conf 的代码为
具体配置项解释如表1 所示。
表1 wpa_supplicant 配置项说明
使用wpa_supplicant -i wlan0 -c wpa_supplicant.conf &指令进行接入连接。
在指令执行后,可以使用ping 命令测试客户端是否ping 通RADIUS 代理服务器。如果客户端可以ping 通RADIUS 代理服务器,则证明客户端网络接入成功。
文章给出基于数字证书技术和RADIUS 协议实现复杂无线网络接入认证的方法、在Linux 客户端上的接入认证方法,较为安全、便捷,适用于多种网络场景。文章通过搭建一个基于数字证书技术和RADIUS 协议的无线网络认证平台,方便管理无线网络及其用户。