老规矩, 先看维基: 远端用户拨入验证服务(RADIUS, Remote Authentication Dial In User Service)是一个AAA协议,意思就是同时兼顾验证(authentication)、授权(authorization)及计费(accounting)三种服务的一种网络传输协议(protocol),通常用于网络存取、或流动IP服务,适用于局域网及漫游服务。
https://zh.wikipedia.org/wiki/RADIUS

上面的介绍来自维基百科. 说的权威,但是不太好懂. 我们这里再详细介绍以下几个问题, 希望能给初次接触radius的小伙伴有所帮助:

1) Radius 到底是什么.
2) Radius 应用和工作方式.
3) Radius 的协议细节.

一. Radius 到底是什么.

上面维基百科 说的很具体了, Radius 远程拨入服务, 它集成了 认证, 授权 和计费功能. 怎么理解这个问题呢. 举个不是十分贴切的栗子, 宽带 ADSL 拨号上网的后台认证和计费系统就可以用radius, 或者 V-P-N 系统的后台验证计费系统就是radius 的使用场景.

当然, 并不能把 radius 的概念限制在 “拨号”, 实际上, 不光是这种 “拨号” 服务, 其他几乎任何服务, 都可以使用 radius 来进行认证,授权和计费服务.

二. Radius 的工作方式.

我们以搭建 V-P-N 为例, 介绍radius的工作方式.

图中有三个角色, v-p-n(下面简称XXX服务器)服务器, 客户端 和radius 服务器.

Radius 主要工作在 xxx 服务器和 Radius 服务器之间, 客户几乎直接接触不到.

对于radius 协议来说, xxx 服务器实际上是 一个client, 而 radius 服务器是真正提供服务的server.
(如果看英文文档的话, rfc有专门解释 client 和server 的章节.)

这样看起来, radius 更像是 C/S 模式的协议.

所以后面的讨论主要集中在 xxx 服务器和 radius 服务器之间, 请自行脑补.

三. Radius 的协议细节.
这里还是介绍一下大体的细节, 重点介绍如何阅读rfc. 有了方向,再读rfc就容易多了. 不会详细介绍每个字节如何生成, 这是rfc的责任.

作为参考, 这是 radius 的rfc : https://tools.ietf.org/html/rfc2865

1) 首先, radius 是基于udp的协议, 所有数据包都是封装在udp协议中.
至于为什么是udp,而不是tcp, 请参看 rfc 的解释: Why udp?

2) radius 协议包的格式.
基本上, radius 协议有四种包:

Access-Request
Access-Accept
Access-Reject
Access-Challenge

这四种包都有统一的格式: https://tools.ietf.org/html/rfc2865#page-13

这四种包在 xxx服务器和radius 服务器之间通信,来完成整个过程.

上图中, 前面三个交互是必须的, 后面两个绿色的带星号的交互不是必须的.

首先, xxx 服务器向radius发送 Access-Request 数据包, 包含用户信息和密码哈希等等信息用于认证.
此时服务器有四个选择:
第一, 如果认证通过,就返回一个 “Access-Accept” 数据包, 认证完成.
第二, 如果认证不通过,则返回 “Access-Reject”,认证失败.
第三, 如果服务器认为必要, 可以返回一个”Access-Challenge” 数据包, 让用户提供更多的附加信息以完成认证. 而xxx服务器在收到 “Access-Challenge” 消息之后, 需要向用户索要必须的附加信息,然后组成一个新的 ” Access-Request” 数据包发给radius服务器来继续认证. 此时服务器可以重复第一,或第二.
第四, 如果 “Access-Request” 数据包有问题, 服务器还可以采取 “静默丢弃”(silently discard) 的方式, 不做任何反应.

这就是主要的通信流程了.

一般来讲, 作为 radius 的客户端, “Access-Request” 数据包的格式比较重要. 他负责将认证信息加密传输给radius 服务器.
我们再介绍一下 “Access-Request” 数据包的格式:
https://tools.ietf.org/html/rfc2865#page-17

  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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| Request Authenticator |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Attributes ...
+-+-+-+-+-+-+-+-+-+-+-+-+-

我们现在介绍后面的 “Attributes” 数据区. 这里包含了用户的密码信息.
radius 协议将用户名,密码等等身份信息 都封装成一个一个的 attribute.
举个栗子, 可能最少需要两个 attribute, 一个是用户名, 另一个是password hash. 这是最简单的方式了.

https://tools.ietf.org/html/rfc2865#page-22

目前, radius 的密码封装方式有两种,
一种是: User-Password, https://tools.ietf.org/html/rfc2865#page-27
另一种是: CHAP-Password, https://tools.ietf.org/html/rfc2865#page-28

两种方式只是密码的hash计算方法不一样而已. 具体生成方法比较明确. rfc 写的很明显,就不多说了.

到这里, radius 认证协议的客户端过程基本完成了. 至于服务端, 一般不用自己来写. 可以使用开源的现成服务端.

欢迎访问我的个人独立博客: https://blog.byNeil.com

Radius 认证协议介绍-兼rfc导读的更多相关文章

  1. Windows Server 搭建企业无线认证(Radius认证方案)

    认证协议介绍: 扩展认证协议EAP(Extensible Authentication Protocol) 是一个在无线网络或点对点连线中普遍使用的认证框架.它被定义在RFC 3748中,并且使RFC ...

  2. VRRP协议介绍--转

    http://www.cnblogs.com/jony413/articles/2697404.html VRRP协议介绍 参考资料: RFC 3768 1. 前言 VRRP(Virtual Rout ...

  3. SNMP协议介绍

    SNMP协议介绍 一.什么是SNMP SNMP:“简单网络管理协议”,用于网络管理的协议.SNMP用于网络设备的管理.SNMP的工作方式:管理员需要向设备获取数据,所以SNMP提供了 “读”操作:管理 ...

  4. 以太网接口TCP/IP协议介绍,说的很容易懂了

      以太网接口TCP/IP协议介绍,说的很容易懂了  TCP/IP协议,或称为TCP/IP协议栈,或互联网协议系列. TCP/IP协议栈(按TCP/IP参考模型划分) 应用层 FTP SMTP HTT ...

  5. TCP/IP 协议介绍

    转自http://blog.jobbole.com/104886/ 一.TCP/IP 协议介绍 在介绍 HTTP 协议之前,先简单说一下TCP/IP协议的相关内容.TCP/IP协议是分层的,从底层至应 ...

  6. [转]流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls)

    [转]流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls) http://blog.csdn.net/tttyd/article/details/12032357 RTP       ...

  7. [na]802.1x协议无线认证协议&dot1x有线认证实验

    以前搞无线时候,会涉及到无线client接入方式的认证协议. 认证方式+加密方式+有线的dot1x. 注:以前都是doc粘贴到博客的,加上没写博客的习惯,因此会比较乱. EAP(扩展认证协议)是什么? ...

  8. NTLM认证协议及SSPI的NTLM实现

    没错,NTLM就是你听说过的那个NTLM.是微软应用最广泛的认证协议之一. NTLM是NT LAN Manager的缩写,这也说明了协议的来源.NTLM 是 Windows NT 早期版本的标准安全协 ...

  9. OSPF协议介绍及配置 (上)

    OSPF协议介绍及配置 (上) 一.OSPF概述 回顾一下距离矢量路由协议的工作原理:运行距离矢量路由协议的路由器周期性的泛洪自己的路由表,通过路由的交互,每台路由器都从相邻的路由器学习到路由,并且加 ...

随机推荐

  1. request 里面参数设置 (有空瞄下)

    Requests 是用python语言编写的第三方库,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库.它比 urllib 更加方便,完全满足 HTTP 测试需求, ...

  2. QT win 安装配置

    QT windows 版安装配置 安装包:链接:https://pan.baidu.com/s/1LCj2V3xQ1wB9_7zmE5tV6Q 密码:bn9r 首先安装QT Creator 双击安装文 ...

  3. Linux新手入门:Unable to locate package错误解决办法

    最近刚开始接触Linux,在虚拟机中装了个Ubuntu,当前的版本是Ubuntu 11.10,装好后自然少不了安装一些软件,在设置了软件的源后,就开始了 sudo apt-get install,结果 ...

  4. 找到一篇关于2.4/5G信道的新介绍

    关于部分手机无法搜索到5G wifi信号的解决方法第一次在论坛发基础理论贴,希望能普及关于5G wifi的基础知识.         发此贴的原因是基于本人突然发现:MX3刷了3.4.1系统后,搜索不 ...

  5. ubuntu 下出现E: Sub-process /usr/bin/dpkg returned an error code

    在用apt-get安装软件时出现了类似于 install-info: No dir file specified; try –help for more information.dpkg:处理 get ...

  6. 第1课 GUI程序原理分析

    1. 命令行应用程序 (1)命令行应用程序的特点 ①是一种基于顺序执行结构的可执行程序 ②程序执行过程中不需要与用户产生交互 ③程序执行后给出最终的运行结果 (2)命令行应用程序的运行模式——程序运行 ...

  7. Java前期(静态)绑定和后期(动态)绑定

    Java前期(静态)绑定和后期(动态)绑定 程序绑定的概念:绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来.对java来说,绑定分为静态绑定和动态绑定:或者叫做前期绑定和后期绑定. 静态绑 ...

  8. fadora24安装settools,pip包出错解决方法

    1.fadora24安装Python2.7 [root@dev ~]# python bash: python: 未找到命令... 安装软件包“python”以提供命令“python”? [N/y] ...

  9. controller 允许跨域访问

    1.在controller 上加上 @CrossOrigin(origins = {"http://localhost:7777", "http://someserver ...

  10. TMS Grid

    TMS Grid http://edn.embarcadero.com/article/42553