Windows Server 搭建企業無線認證(Radius認證方案)

  • 2019 年 11 月 11 日
  • 筆記

認證協議介紹:

擴展認證協議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認證問題)

驗證方式:

  1. PEAP驗證:使用證書+AD用戶集成認證;
  2. 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,然後網路暢通。