1. 程式人生 > >Radius報文解析(轉)

Radius報文解析(轉)

占用 rom htm get 響應 數據包 指定端口號 配置信息 自己

RADIUS ,是遠程認證撥號用戶服務的簡稱。RADIUS原先設計的目的是為撥號用戶進行認證和計費。後來經過多次改進,形成了一項通用的認證計費協議,主要完成在網絡接入設備和認證服務器之間承載認證、授權、計費和配置信息。RADIUS是一種C/S結構的協議,它的客戶端最初就是NAS服務器,現在任何運行RADIUS客戶端軟件的計算機都可以成為RADIUS的客戶端。

RADIUS基本原理:用戶接入NAS,NAS向RADIUS服務器使用Access-Request數據包提交用戶信息,包括用戶名、密碼等相關信息,其中用戶密碼是經過MD5加密的,雙方使用共享密鑰,這個密鑰不經過網絡傳播;RADIUS服務器對用戶名和密碼的合法性進行檢驗,必要時可以提出一個Challenge,要求進一步對用戶認證,也可以對NAS進行類似的認證;如果合法,給NAS返回Access-Accept數據包,允許用戶進行下一步工作,否則返回Access-Reject數據包,拒絕用戶訪問;如果允許訪問,NAS向RADIUS服務器提出計費請求Account-Request,RADIUS服務器響應Account-Accept,對用戶開始計費,同時用戶可以進行自己的相關操作。

RADIUS協議具有以下特點:

l 客戶端/服務器結構;

l 采用共享密鑰保證網絡傳輸安全性;

l 良好的可擴展性;

l 認證機制靈活;

RADIUS 協議承載於UDP 之上,官方指定端口號為認證授權端口1812、計費端口1813。RADIUS協議在RFC2865、RFC2866 中定義。銳捷網絡RG-SAM系統和NAS之間的通訊采用RADIUS協議。由於RADIUS協議的良好擴展性,很多廠家對RADIUS作了擴展,我們公司也對其進行了擴展。使用時我們應該註意不同公司對RADIUS協議擴展部分不能完全兼容。

2 RADIUS協議報文結構

2.1 Radius協議報文格式

RADIUS報文格式如下圖所示,各域內容按照從左向右傳送

0 1 2 3

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| Code | Identifier | Length |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| Authenticator |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| Attributes ...

+-+-+-+-+-+-+-+-+-+-+-+-+-

2.2 Code域

Code域長度為1個字節,用於標明RADIUS報文的類型,如果Code域中的內容是無效值,報文將被丟棄RADIUS Code域的有效值如下:

Code=1 Access-Request

Code=2 Access-Accept

Code=3 Access-Reject

Code=4 Accounting-Request

Code=5 Accounting-Response

Code=11 Access-Challenge

Code=12 Status-Server (experimental)

Code=13 Status-Client (experimental)

Code=65 業務修改請求消息

Code=66 業務修改請求回應消息

Code=67 業務修改請求回應拒絕消息

Code=255 Reserved

其中12 13 255 為保留的Code值一般不會遇到,1 2 3 4 5 11比較常見,分別標明報文類型為認證請求、認證接受、認證拒絕、計費請求、計費回應、計費成功和訪問質詢。

2.3 Identifier域

Identifier域長度為1個字節,用於匹配請求的回應。如果在短時間內RADIUS服務器收到從相同的源IP,相同源端口,相同標識域的報文,則認為收到的是重復的請求。

2.4 Length域

Length域占兩個字節,用於指明報文的有效長度,多出長度域的字節部分將被視為填充。在接收時被忽略。如果報文長度小於長度域中的值,整個報文將被丟棄。長度域的範圍在20和4096之間。

2.5 Authenticator

認證字域占用16個字節,用於Radius Client 和Server之間消息認證的有效性,和密碼隱藏算法。

訪問請求Access-Request報文中的認證字的值是16字節隨機數,認證字的值要不能被預測並且在一個共享密鑰的生命期內唯一。

訪問請求Access-Request認證字

在Access-Request包中認證字的值是16字節隨機數,認證字的值要不能被預測,並且在一個共享密鑰的生命期內唯一;

訪問回應認證字

Access-Accept Access-Reject 和Access-Challenge包中的認證字稱為訪問回應認證字,訪問回應認證字的值定義為MD5(Code+ID+Length+RequestAuth+Attributes+Secret);

計費請求Accounting-Request認證字

在計費請求包中的認證字域稱為計費請求認證字,它是一個16字節的MD5校驗和,計費請求認證字的值定義為MD5(Code + Identifier + Length + 16 zero octets + request attributes +shared secret);

計費回應Accounting-Response認證字

在計費回應報文中的認證字域稱為計費回應認證字,它的值定義為MD5(Accounting-Response Code + Identifier + Length + the RequestAuthenticator field from the Accounting-Request packet being replied to +the response attributes + shared secret);

2.6 Attributes域

0 1 2

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

| Type | Length | Value ...

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

屬性域的長度是可變的,它是一個由業務類型必需的屬性和可選屬性組成的屬性鏈。一個屬性包含如下三個部分:

2.6.1 Type域

類型域長度為一個字節,RADIUS服務器和客戶端當遇到不可識別的屬性時,可以將其忽略。常用的屬性類型請參見RFC2865 RFC2866;

2.6.2 Length域

長度域長度為一個字節,指明了一個屬性的類型、長度和值域的總長度。如果在認證請求報文中攜帶有屬性長度非法的屬性,則必須回應訪問拒絕報文;如果在訪問回應報文中存在非法的屬性長度,這個報文必須被直接丟棄或被認為是訪問拒絕報文。

2.6.3 Value域

值域由零或多個字節組成包,含詳細的屬性信息,它的格式由屬性的長度和類型域決定。註意RADIUS 中沒有一個類型的值域是以NULL(hex 00)結尾,的也就是說值域中是沒有結束符的,服務器和客戶端需要能夠處理內嵌的NULL。

值域的數據類型是下列5 種類型之一。“text”類型是“string”類型的子集:

text 1-253 字節長

string 1-253 字節長可以包含二進制數據

address 4 字節高位在前

integer 4 字節無符號數高位在前

time 4 字節無符號數高位在前表示從1970 年1 月1 日零點零時零秒到現在的秒數

轉載地址:http://www.cnblogs.com/dancheblog/p/4211088.html

Radius報文解析(轉)