Windows Server 搭建企业无线认证(Radius认证方案)
认证协议介绍:
扩展认证协议EAP(Extensible Authentication Protocol)
是一个在无线网络或点对点连线中普遍使用的认证框架。它被定义在RFC 3748中,并且使RFC 2284过时,后又被RFC 5247更新。EAP不仅可以用于无线局域网,还可以用于有线局域网,但它在无线局域网中使用的更频繁。WPA和WPA2标准已经正式采纳了5类EAP作为正式的认证机制。
EAP是一个认证框架,不是一个特殊的认证机制。EAP提供一些公共的功能,并且允许协商所希望的认证机制。这些机制被叫做EAP方法,现在大约有 40种不同的方法。IETF的RFC中定义的方法包括:EAP-MD5, EAP-OTP, EAP-GTC, EAP-TLS, EAP-SIM,和EAP-AKA, 还包括一些厂商提供的方法和新的建议。无线网络中常用的方法包括EAP-TLS, EAP-SIM, EAP-AKA, PEAP, LEAP,和EAP-TTLS。
IEEE 802.1x协议认证就使用了EAP认证框架,因为EAP提供了可扩展的认证方法,但是这些认证方法的安全性完全取决于具体的认证方法,比如EAP-MD5、EAP-LEAP、EAP-GTC等,而802.1x最开始是为有线接入设计的,后来被用于无线网的接入,有线接入在安全性方面考虑毕竟少,如果要窃取信息需要物理上连接网络,而无线网完全不同,无线网信号没有物理边界,所以要使用802.1x的话,需要对802.1x进行安全性方面的增强,也就是增强EAP认证框架的安全性,而且要进行双向认证,那么EAP使用了IETF的TLS(Transport Layer Security)来保证数据的安全性。
现在主流的安全认证方法:EAP-TLS,PEAP,EAP-TTLS
分别介绍这三种方法:
1. EAP-TLS:
EAP-TLS使用TLS握手协议作为认证方式,TLS有很多优点,所以EAP选用了TLS作为基本的安全认证协议,并为TTLS和PEAP建立安全隧道,TLS已经标准化,并且进过了长期应用和分析,都没有发现明显的缺点。
TLS认证是基于Client和Server双方互相验证数字证书的,是双向验证方法,首先Server提供自己的证书给Client,Client验证Server证书通过后提交自己的数字证书给Server,客户端的证书可以放到本地、放到key中等等.
TLS有一个缺点就是TLS传送用户名的时候是明文的,也就是说抓包能看到EAP-Identity的明文用户名。
TLS是基于PKI证书体系的,这是TLS的安全基础,也是TLS的缺点,PKI太庞大,太复杂了,如果企业中没有部署PKI系统,那么为了这个认证方法而部署PKI有些复杂,当然,如果企业已经部署了PKI,那么使用EAP-TLS还是不错的选择。
2. EAP-TTLS:下同
3. EAP-PEAP:
正因为TLS需要PKI的缺点,所以设计出现了TTLS和PEAP,这两个协议不用建立PKI系统,而在TLS隧道内部直接使用原有老的认证方法,这保证了安全性,也减小了复杂度。
把TTLS和PEAP放到一起介绍的原因是他们俩很像,两个都是典型的两段式认证,在第一阶段建立TLS安全隧道,通过Server发送证书给Client实现Client对Server的认证(这里TTLS和PEAP仍然使用证书,但是这里的证书都是服务器证书,管理起来比TLS客户端证书要简单那的多);当安全隧道一旦建立,第二阶段就是协商认证方法,对Client进行认证;
TTLS利用TLS安全隧道交换类似Radius的AVPs(Attribute-Value-Pairs),实际上这些AVPs的封装和Radius都十分相似,TTLS这种AVPs有很好的扩展性,所以它几乎支持任何认证方法,这包括了所有EAP的认证方法,以及一些老的认证方法,比如PAP、CHAP、MS-CHAP、MS-CHAPv2等,TTLS的扩展性很好,通过新属性定义新的认证方法。
PEAP之所以叫Protected EAP,就是它在建立好的TLS隧道之上支持EAP协商,并且只能使用EAP认证方法,这里为什么要保护EAP,是因为EAP本身没有安全机制,比如EAP-Identity明文显示,EAP-Success、EAP-Failed容易仿冒等,所以EAP需要进行保护,EAP协商就在安全隧道内部来做,保证所有通信的数据安全性。其实PEAP最大的优点就是微软支持开发,微软在Windows系统内集成了客户端,微软和Cisco都支持PEAP,但是他们的实现有所区别。
三者对比:
EPA-TLS是目前为止最安全的方式,但缺点也很明显,很多系统客户端并没有集成,客户端需要导入认证证书等等,所以当下WLAN认证方式最常用的是PEAP和EAP-TTLS这两种。下图是PEAP的认证粗略过程:
认证基本流程:
1、证书获取
证书主要用来进行终端和网络的相互认证。 Radius服务器首先向CA证书颁发机构申请服务器证书,用来代表Radius服务器的合法性。STA向CA证书颁发机构下载CA 根证书,用来验证Radius服务器下发的证书是否合法(一般情况下,如果终端不需要对网络进行认证的情况下,根证书可以不用下载和安装)。
2、无线接入
STA通过开放系统接入的方法(OPEN SYSTEM)和AP之间建立好物理连接。
3、认证初始化
① STA向AP设备发送一个EAPoL-Start报文,开始802.1x接入的开始;
② AP向客户端发送EAP-Request/Identity报文,要求客户端将用户信息送上来;
③ STA回应一个EAP-Response/Identity给AP的请求,其中包括用户的网络标识。用户ID,对于EAP-mschchap v2认证方式的用户ID是由用户在STA手动输入或者配置的;
④ AP以EAP Over Radius的报文格式将EAP-Response/Identity发送给认证服务器Radius,并且带上相关的Radius的属性;
⑤ Radius收到客户端发来的EAP-Response/Identity,根据配置确定使用EAP-PEAP认证,并向AP发送RADIUS-Access-Challenge报文,里面含有Radius发送给客户端的EAP-Request/Peap/Start的报文,表示希望开始进行EAP-PEAP的认证;
⑥ AP设备将EAP-Request/PEAP/Start发送给认证客户端。
4、建立TLS通道
⑦ STA收到EAP-Request/Peap/Start报文后,产生一个随机数、STA支持的加密算法列表、TLS协议版本、会话ID、以及压缩方法(目前均为NULL),封装在EAP-Response/Client Hello报文中发送给AP设备;
⑧ AP以EAP Over Radius的报文格式将EAP-Response/Client Hello发送给认证服务器RadiusServer,并且带上相关的Radius的属性;
⑨ Radius收到STA发来的Client Hello报文后,会从STA 的Hello报文的加密算法列表中选择自己支持的一组加密算法+Server产生的随机数+Server 证书(包含服务器的名称和公钥)+证书请求+Server_Hello_Done属性形成一个Server Hello报文封装在Access-Challenge报文中,发送给STA;
⑩ AP把Radius报文中的EAP域提取,封装成EAP-request报文发送给Client。
注:由于证书比较大,一个报文是无法承载的,所以在实际流程中第10,11完成后,后面还有3个续传的IP分片报文,目的是把Server证书发送到客户端。
⑩① STA收到报文后,进行验证Server的证书是否合法(使用从CA证书颁发机构获取的根证书进行验证,主要验证证书时间是否合法,名称是否合法),即对网络进行认证,从而可以保证Server的合法。如果合法则提取Server证书中的公钥,同时产生一个随机密码串pre-master-secret,并使用服务器的公钥对其进行加密,最后将加密的信息ClientKeyExchange+客户端的证书(如果没有证书,可以把属性置为0)+TLS finished属性封装成EAP-Rsponse/TLS OK报文发送给认证点AP.如果STA没有安装证书,则不会对Server证书的合法性进行认证,即不能对网络进行认证;
⑩② AP以EAP Over Radius的报文格式将EAP-Response/TLS OK发送给认证服务器Radius Server,并且带上相关的Radius的属性;
⑩③ Radius收到STA发了的报文后,用自己的证书对应的私钥对ClientKeyExchange进行解密,从而获取到pre-master-secret,然后将pre-master-secret进行运算处理,加上Client和Server产生的随机数,生成加密密钥、加密初始化向量和hmac的密钥,这时双方已经安全的协商出一套加密办法了,至此TLS通道已经建立成功,以后的认证过程将使用协商出的密钥进行加密和校验。Radius Server借助hmac的密钥,对要在TLS通道内进行认证的消息做安全的摘要处理,然后和认证消息放到一起。借助加密密钥,加密初始化向量加密上面的消息,封装在Access-Challenge报文中,发送给Client。
5、认证过程
⑩④ AP把Radius报文中的EAP域提取,封装成EAP-request报文发送给Client;
⑩⑤ STA收到Radius server发来报文后,用服务器相同的方法生成加密密钥,加密初始化向量和hmac的密钥,并用相应的密钥及其方法对报文进行解密和校验,然后产生认证回应报文,用密钥进行加密和校验,最后封装成EAP-response报文发送给AP,AP以EAP Over RADIUS的报文格式将EAP-Response发送给认证服务器Radius Server,并且带上相关的RADIUS的属性,这样反复进行交互,直到认证完成(注:对于不同的认证方法交互流程不一致,通常的认证方法为:PEAP-MSCHAPV2或者GTC(IBM LDAP支持的,有关于PEAP-GTC的过程就是在认证的时候按照GTC/OTP的过程在PEAP添加的一个过程罢了,再注:在传送完密码后要传一个长度为1的数据为0的包过去后才会得到SUCESS连通网络),下面由单独认证流程,如果是SIM认证,还需要跟HLR/AUC设备进行数据交互,并且使用AS作为认证服务器),在认证过程中,Radius Server会下发认证后用于生成空口数据加密密钥(包括单播、组播密钥)的PMK给STA;
⑩⑥ 服务器认证STA成功,会发送Access-Accept报文给AP,报文中包含了认证服务器所提供的MPPE属性;
⑩⑦ AP收到RADIUS-Access-Accept报文,会提取MPPE属性中的密钥做为WPA加密用的PMK,并且会发送EAP-success报文给STA。
企业无线认证方案:Windows Server NPS + CA证书 + AD域控
公司之前Windows 10客户端认证需要手动配置EAP-TTLS进行无线网络认证,认证服务器为FreeRadius,现在可以结合域控搭建Radius认证服务器(Windows Server NPS),当然认证的用户数据也从域控活动目录数据库中获取,Windows Server NPS作为认证服务器,利用认证方式为PEAP,可以免配置文件,因为Windows 10中会默认使用该认证方式进行服务器交互认证,无需设置。但Windows 7和XP需要设置(加域的用户可以利用组策略,没加域的客户端可以使用脚本导入模板,后续说明),后续如果需要做有线端口的认证也是可以的。如果后续所有Windows客户端加入域控,那么就无须手动进行认证,客户端会默认使用域控账户进行认证,大大方便后续的网络接入管理工作。
AD域控(DNS)-->CA服务器-->NPS服务器(解决WIFI认证问题)
验证方式:
- PEAP验证:使用证书+AD用户集成认证;
- PEAP验证:使用密码+AD用户集成认证;
如果部署基于证书的身份验证方法,如可扩展身份验证协议-传输层安全性(EAP-TLS),受保护的可扩展身份验证协议-传输层安全性(PEAP-TLS),和 PEAP-Microsoft 质询握手身份验证协议版本 2 (MS-CHAP v2),必须对所有你 NPS注册服务器证书。 服务器证书必须:
满足最小服务器证书要求,如中所述为 PEAP 和 EAP 要求配置证书模板
由证书颁发机构颁发(CA)受信任的客户端计算机。 在当前用户和本地计算机的受信任的根证书颁发机构证书存储中存在其证书时,CA 是受信任。
以下说明帮助管理 NPS 中部署受信任的根 CA 其中是第三方 CA,如 Verisign,或已部署的公钥基础结构是 ca 的证书(PKI)使用处于活动状态Directory 证书服务(AD CS)。
- 部署服务器证书用于 802.1x 有线和无线部署(抛弃)
- 部署密码-基于 802.1x 经过身份验证无线访问(使用)
因为 PEAP-MS-CHAP v2 要求用户提供密码-基于的凭据而不是在身份验证过程中的证书,它是通常更容易、 成本更低比 EAP部署-TLS 或 PEAP-TLS。
部署 802.1x 身份验证无线访问与 PEAP-MS-CHAP v2:
- IEEE 802.1X
- RADIUS 身份验证
- 无线身份验证和密码:WPA2-企业使用 AES
认证过程:客户端输入用户名和密码给AC,AC传递给NPS服务器,NPS服务器读取AD目录数据库进行认证,认证通过后授权,从POE交换机DHCP获取IP,然后网络畅通。