一江春水向東流

          做一個有思想的人,期待與每一位熱愛思考的人交流,您的關注是對我最大的支持。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            44 隨筆 :: 139 文章 :: 81 評論 :: 0 Trackbacks
          RADIUS主要用于對遠程撥入的用戶進行授權和認證。它可以僅使用單一的“數據庫”對用戶進行認證(效驗用戶名和口令)。它主要針對的遠程登錄類型有:SLIP、PPP、telnet和rlogin等。

          其主要特征有:

          1. 客戶機/服務器(C/S)模式

          一個網絡接入服務器(以下簡稱NAS)作為RADIUS的客戶機,它負責將用戶信息傳入RADIUS服務器,然后按照RADIUS服務器的不同的響應來采取相應動作。另外,RADIUS服務器還可以充當別的RADIUS服務器或者其他種類認證服務器的代理客戶。

          2.網絡安全(Network Security)

          NAS和RADIUS服務器之間的事務信息交流由兩者共享的密鑰進行加密,并且這些信息不會在兩者之間泄漏出去。

          3.靈活認證機制(Flexible Authentication Mechanisms)

          RADIUS服務器支持多種認證機制。它可以驗證來自PPP、PAP、CHAP和UNIX系統登錄的用戶信息的有效性。

          4.協議可擴展性(Extensible Protocol)

          所有的認證協議都是基于“屬性-長度-屬性值”3元素而組成的。所以協議是擴展起來非常方便。在目前很多比較高版本的Linux中,它們都把 RADIUS的安裝程序包含在系統源碼中。這樣使得我們可以很容易地通過免費的Linux系統學習RADIUS授權、認證的原理和應用。


          RADIUS協議原理


          要弄清楚RADIUS協議為何能實現授權和認證,我們必須應該從四個方面去認識RADIUS協議:協議基本原理、數據包結構、數據包類型、協議屬性。下面我們就來詳細地介紹這些內容。

          協議基本原理

          NAS提供給用戶的服務可能有很多種。比如,使用telnet時,用戶提供用戶名和口令信息,而使用PPP時,則是用戶發送帶有認證信息的數據包。

          NAS一旦得到這些信息,就制造并且發送一個“Access-Request”數據包給RADIUS服務器,其中就包含了用戶名、口令(基于MD5加密)、NAS的ID號和用戶訪問的端口號。

          如果RADIUS服務器在一段規定的時間內沒有響應,則NAS會重新發送上述數據包;另外如果有多個RADIUS服務器的話,NAS在屢次嘗試主RADIUS服務器失敗后,會轉而使用其他的RADIUS服務器。

          RADIUS服務器會直接拋棄那些沒有加“共享密鑰”(Shared Secret)的請求而不做出反應。如果數據包有效,則RADIUS服務器訪問認證數據庫,查找此用戶是否存在。如果存在,則提取此用戶的信息列表,其中包括了用戶口令、訪問端口和訪問權限等。

          當一個RADIUS服務器不能滿足用戶的需要時,它會求助于其他的RADIUS服務器,此時它本身充當了一個客戶端。

          如果用戶信息被否認,那么RADIUS服務器給客戶端發送一個“Access-Reject”數據包,指示此用戶非法。如果需要的話,RADIUS服務器還會在此數據包中加入一段包含錯誤信息的文本消息,以便讓客戶端將錯誤信息反饋給用戶。

          相反,如果用戶被確認,RADIUS服務器發送“Access-Challenge”數據包給客戶端,并且在數據包中加入了使客戶端反饋給用戶的 信息,其中包括狀態屬性。接下來,客戶端提示用戶做出反應以提供進一步的信息,客戶端得到這些信息后,就再次向RADIUS服務器提交帶有新請求ID的 “Access-Request”數據包,和起初的“Access-Request”數據包內容不一樣的是:起初“Access-Request”數據包 中的“用戶名/口令”信息被替換成此用戶當前的反應信息(經過加密),并且數據包中也包含了“Access-Challenge”中的狀態屬性(表示為0 或1)。此時,RADIUS服務器對于這種新的“Access-Request”可以有三種反應:“Access-Accept”、“Access- Reject”或“Access-Challenge”。

          如果所有的要求都屬合法,RADIUS返回一個“Access-Accept”回應,其中包括了服務類型(SLIP, PPP, Login User等)和其附屬的信息。例如:對于SLIP和PPP,回應中包括了IP地址、子網掩碼、MTU和數據包過濾標示信息等。

          數據包結構

          RADIUS數據包被包裝在UDP數據報的數據塊(Data field))中,其中的目的端口為1812。具體的數據包結構如表1。


          8位 8位 16位
          code Identifier Length
          Authenticator(128位)
          Attributes…(不定長)



          · Code Code域長度為8位,具體取值見表2。其中,1、2、3用于用戶認證,而4、5則是統計流量用,12、13 用于試驗階段,255作為保留。


          code 含義
          1 Access-Request
          2 Access-Accept
          3 Access-Reject
          4 Accounting-Request
          5 5Accounting-Response
          11 Access-Challenge
          12 Status-Server(experimenta)
          13 Status-client(experimenta)
          255 Reserved



          · Identifier Identifier域長度為8位,主要用于匹配請求和回應數據包,也即是數據包的編號。

          · Length 長度為16位,取值范圍(20<=Length<=4096),此長度包括Code、Identifier、Length、 Authenticator和 Attribute五個數據域的長度總和(Code、Identifier、Length、Authenticator為定長,Attribute為變 長)。超出范圍的數據將被視為附加數據(Padding)或直接被忽略。

          · Authenticator 長度為16個字節(128位),主要用于鑒定來自RADIUS服務器的回應,同時也用于對用戶口令進行加密。

          (1) Request Authenticator

          在“Access-Request”數據包中,Authenticator是一個16字節的隨機數,稱為“Request Authenticator”。它在NAS和RADIUS服務器之間通過“共享密碼”(secret)傳輸數據的整個生命周期中是唯一的?! ?

          (2) Response Authenticator

          在“Access-Accept”、“Access-Reject”和“Access-Challenge”中的Authenticator域被稱為“Response Authenticator”。

          有下面的計算方法:

          ResponseAuth = MD5(Code+ID+Length+RequestAuth+ Attributes+Secret) ——(公式1)



          · Attributes 屬性域的數據格式如表3所示。


          8位 8位 不定長(0或多個字節)
          Type Length value…



          Type指示了Atribute的類型,通用的有幾十種,如表4所示。


          Type 說明 Type 說明
          1 User-Name 5 NAS-Port-Id
          2 Password 6 Service-Type
          3 CHAP-Password 7 Framed-Protocol
          4 NAS-IP-Address … …

          數據包類型

          RADIUS數據包的類型由其Code域(頭8位)指定。

          · Access-Request(接入-請求)

          “Access-Request”數據包由NAS發出,由RADIUS服務器接收。

          其中的“User-Password”或“CHAP-Password”屬性值被默認地以MD5方法加密。

          數據包結構如表5所示。


          8位 8位 16位
          Code=1 Identifier-隨著Attributes的Value變化而變化,重傳時則保持不變 Length
          Authenticator(128位)—根據Identifier變化而變化
          Attributes…(不定長)



          Attributes應該包括以下幾個屬性:

          ◆ “User-Name”
          ◆ “User-Password”或“CHAP-Password”
          ◆ “NAS-IP-Address”
          * “NAS-Identifier”
          ◆ “NAS-Port”
          ◆ “NAS-Port-Type”



          · Access-Accept

          “Access-Accept” 由RADIUS服務器發出,返回給NAS。表示用戶的信息是合法的。其中包括了必要的配置信息,以便下一步為用戶提供服務。數據包結構如表6所示。


          8位 8位 16位
          Code=2 Identifier-和“Access-Request”的Identifier相同 Length
          Authenticator(128位)-屬于Response Authenticator,由公式1計算得到
          Attributes…(不定長)



          Access-Reject“Access-Reject”由RADIUS服務器發出,返回給NAS。表示用戶的信息是非法的。其中應該包括一個或多個的“Reply-Message”(回復消息,包含一些便于NAS返回給用戶的一些錯誤信息)。數據包結構如表7所示。


          8位 8位 16位
          Code=3 Identifier-和“Access-Request”的Identifier相同 Length
          Authenticator(128位)-屬于Response的Authenticator,由公式1計算得到
          Attributes…(不定長)



          屬性

          屬性如表8所示。其中,Length的計算方法為:Type+Length+Value。


          8位 8位 不定長(0或多個字節)
          Type Length Value…



          Value有4種類型:

          ◆ String —— 0~253字節,字符串

          ◆ Ipaddress —— 32位,IP地址

          ◆ Integer —— 32位,整數

          ◆ Time —— 32位,從00:00:00 GMT, January 1, 1970到當前的總秒數

          從這里可看出,RADIUS協議是一個不定長的協議棧。
          posted on 2008-03-25 23:27 allic 閱讀(2053) 評論(0)  編輯  收藏 所屬分類: 電信服務技術

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 太谷县| 黄冈市| 岢岚县| 尤溪县| 凉山| 南丹县| 新晃| 安国市| 西乌珠穆沁旗| 若尔盖县| 东乡| 成都市| 错那县| 清镇市| 磐安县| 襄汾县| 堆龙德庆县| 隆子县| 孝昌县| 泰州市| 卓资县| 攀枝花市| 凤翔县| 开化县| 水富县| 伊宁市| 子长县| 黄浦区| 义乌市| 井研县| 祁东县| 咸阳市| 灵丘县| 都江堰市| 本溪市| 九江县| 内乡县| 城固县| 五指山市| 屏东县| 新绛县|