802.11X用户身份验证
静态WEP企图同时解决802.11无线网络安全的两个问题。它即打算提供身份验证以限定拥有特定密钥方能进行网络访问,也想要提供机密性以在数据经过无线链路时予以加密。然而,它在这两方面的表现都不是特别好。
802.1X是一个框架,它是IEEE采用IETF的可扩展身份验证协议(Extensible Authentication Protocol,简称EAP)制定而成,802.1X为链路层提供了身份验证的机制。静态WEP只是对拥有加密密钥的机器进行身份验证,而802.1X则允许网关人员对用户而非机器进行身份验证,同时可以确保用户连接至合法,经过授权而非窃取个人数据的冒牌网络。
1. 可扩展身份验证协议(EAP)
EAP是一种简单的封装方式,可以运行于任何的链路层,EAP的基本架构如下图所示,在设计上是为了能够运行于任何的链路层以使用各种身份验证方式。
图1 EAP的架构
1.1 EAP的封包格式
EAP的封包格式如下图所示,EAP并不是非得运行在PPP之上,下图的封包可以通过任何一种帧来承载。
图2 EAP的封包格式
Code
Code(类型代码)长度为1个字节,代表EAP封包的类型,封包的Data(数据)字段必须通过此字段来解析
Identifier
Identifier(标识符)用来匹配请求与响应,重传时会使用相同的identifier number,新的重传则使用新的identifer number
Length
Length字段记载了整个封包的总字节数,包括Code、Identifier、Length以及Data这4个字段
Data
Data字段长度不定,可能不占任何字节,Data字段如何解析完全取决于Code字段的值
1.2 EAP的请求与响应
EAP的交换操作由请求与响应构成,如下图所示。Code字段的值为1代表请求,2代表响应,Data字段会携带一种数据,可细分为type identifier code以及associated data。
图3 EAP的请求与响应封包的格式
Type
Type(类型)字段代表请求或响应类型。每个封包只能使用一种类型,当无法接受某个请求时,对方可以送出一个NAK来提议使用不同的类型。大于等于4的Type字段值代表身份验证方式
Type-Data
Type-Data(类型-数据)字段长度不定,必须根据每种类型的规则加以诠释
类型代码字段对应的消息如下表所示:
Type | Message | 含义 |
---|---|---|
1 | Identity | 认证者通常会以身份类型作为最初的请求,简写为Request/Identity,表示认证者试图建立某种用户名称以便进行身份验证,EAP客户端程序会响应一Response/Identity封包,封包的Type-Data字段包含了用户名称 |
2 | Notification | 认证者可以使用Notification类型传送消息给用户,用户的系统随后可将Request/Notification中的消息显示给用户看,例如密码即将过期或者账号被锁定的原因。EAP客户端会响应一个简单的确认 |
3 | NAK | null acknowledgment主要用来建议使用新的身份验证。认证者会在送出的质询(challenge)消息中指定身份验证所使用的类型代码,身份验证类型的代码为4及以上的数字,如果用户的系统不支持质询所使用的身份验证类型,可以恢复NAK,NAK的Type-Data字段包含器所建议使用的认证类型 |
表1 EAP的请求与响应数据的Type字段的取值和含义
1.3 EAP身份验证方式
EAP会把证明用户身份的操作授权给一个称为EAP method(一组验证用户身份的规则)的附属协议,下表列出了一些EAP method以及它们的类型代码。
类型代码 | 身份验证协议 | 说明 |
---|---|---|
4 | MD5 Challenge | EAP中类似CHAP的认证方式 |
6 | GTC | 原本打算与RSA SecurID之类的令牌卡(token card)一起使用 |
13 | EAP-TLS | 以数字证书(digital certificate)相互认证 |
21 | TTLS | 隧道式TLS,以TLS加密保护较弱的身份验证方式 |
25 | PEAP | 防护型EAP,以TLS加密保护较弱的EAP方式 |
18 | EAP-SIM | 以移动电话的用户识别模块(Subscriber Identity Module,简称SIM)卡进行身份验证 |
29 | MS-CHAP-V2 | Microsoft的经加密的密码身份验证,见冗余Windows域 |
表2 802.1X身份验证常用的EAP认证方式(EAP method)
在EAP交换结束之后,用户不是认证成功,就是认证失败。一旦认证者判断出整个交换过程已经完成,就会发出一个EAP-Success或EAP-Failure帧,以结束整个EAP交换过程,如下图所示。
图4 EAP认证成功与失败的帧
1.4 EAP交换范例
EAP交换范例如下图所示,这并不是无线网络中“实际”可见的交换过程,因为其中用到了一些未曾广泛部署的协议。举这个例子只是为了让读者对EAP协议的运作方式有基本的概念。EAP交换过程是一系列的步骤,从认证请求开始,以成功或失败信息结束。
图5 简单的EAP交换过程
可扩展性既是EAP最大的优点也是最大的缺点。可扩展性让协议能够在有新的需求福显示开发新的功能。正因为可扩展性,EAP已经从保留PPP协议编号的方式转变为无线局域网安全防护的基础。不过要正确部署EAP可能不容易,因为要选择正确的协议选项之前必须先理清一大堆问题。EAP之所以具有灵活性,关键在于它本身只是一个框架,当新的需求浮现时就可以设计出新的认证方式,就算是用于无线局域网也不成问题。
2. 802.1X:网络连接端口的认证
在链路层采用认证机制并不是什么新鲜事,网络连接端口的认证在拨号访问服务器上已经使用了多年,IEEE采用了PPP认证协议并开发了基于局域网络的版本,最后出炉的标准称为802.1X,“基于端口的网络访问控制”(Port-Based Network Access Control)。
2.1 802.1X的架构及相关术语
申请者(supplicant)
寻求访问网络资源的用户机器
认证者(authenticator)
网络访问由认证者(authenticator)控制,它扮演着传统拨号网络中访问服务器的角色,申请者与认证者在规范说明书中称为端口认证实体(Port Authentication Entity,简称PAE)。
认证服务器
认证者只负责链路层的认证交换过程,并不维护任何用户信息。任何认证请求均会被转送至认证服务器进行实际的处理
申请者与认证者之间使用802.1X所定义的EAPover LAN(简称EAPOL)协议,在后端则是通过RADIUS封包来传递EAP,如下图所示。
图6 802.1X的架构
2.2 EAPOL的封装格式
EAPOL的基本帧格式如下图所示。
图7 EAPOL的帧格式
EAPOL帧的组成字段如下:
MAC标头
根据链路层协议使用相应的标头。
Ethernet type
Ethernet type(以太网类型)字段包含了长度为2个字节的type code(类型代码),EAPOL的类型代码为88-8e。
Version
第一版标准化于2001年版的802.1X,第2版规范与802.1X-2004。
Pocket Type
为了让EAP能够适用于基于连接端口的LAN环境,EAPOL加入了一些消息类型,下表列出了所有的封包类型及其说明。
封包类型 名称 说明 0000 0000 EAP-Packet 包含了一个经过封装的EAP帧,大部分的帧均属于EAP-Packet帧 0000 0001 EAPOL-Start 申请者可以主动送出EAPOL-Start帧,不必等候来自认证者的质询
信息。认证者会送出一个EAP-Request/Identity帧作为响应0000 0010 EAPOL-Logoff 当某个系统不再需要使用网络时,便可发出一个EAPOL-Logoff帧,
让连接端口重新回到未授权状态0000 0011 EAPOL-Key EAPOL可用来交换加密密钥信息 0000 0100 EAPOL-Encap-
sulated-ASF-Alert警告标准讨论(Alerting Standards Forum,简称ASF)
定义了一种方式,可让警告信息通过此类型的帧传送给
未经授权的连接端口Packet Body Length
该字段用来计算Pocket Body字段的长度。
Packet Body
除EAPOL-Start与EAPOL-Logoff消息外,此字段会出现于所有的EAPOL帧中。EAP-Packet帧所封装的是一个EAP封包,EAPOL-Key帧所封装的是一个密钥,而EAPOL-Encapsulated-ASF-Alert帧所封装的则是一段警告信息。
3. 802.1X与无线局域网
802.1X为任何局域网,包括无线局域网,提供了一个用户认证的框架。802.11网络中的802.1X交换范例如下图所示。
图8 802.11网络上典型的802.1X交换
上图802.11网络上的802.1X交换步骤如下:
- 申请者通过Association Request/Association Response关联至802.11网络;
- 申请者发出一个EAPOL-Start消息,开始进行802.1X交换过程。这个步骤并非必要;
- “正常的”EAP交换过程开始。认证者发出一个EAP-Request/Identity帧,申请者以EAP-Response/Identity帧进行回复,此帧随后被转换为Radius-Access-Request封包送给RADIUS服务器;
- RADIUS服务器判断需要使用哪个类型的认证,并在送出的EAP-Request信息中指定认证方式的类型。EAP-Request被封装于Radius-Access-Challenge封包中送给接入点。接入点收到封包后即将EAP-Request传递给申请者。EAP-Request信息通常会被表示成EAP-Request/Method,其中Method代表所使用的EAP认证方式;
- 申请者从用户方面取得响应,然后返回EAP-Response。认证者会将此响应转换为送给RADIUS的Radius-Access-Request封包,针对质询信息所做的响应则存放于数据字段中;
- 既然RADIUS服务器送出一个Radius-Access-Accept封包允许对方访问网络,因此认证者会发出一个EAP-Success帧并且授权申请者使用连接端口;
- 收到EAP-Success封包的确认(ACK)后,接入点会立即使用EAPOL-Key消息将密钥分配给申请者;
- 一旦申请者安装好密钥,就可以开始传送数据帧来访问网络;
- 当申请者不再需要访问网络,就会送出一个EAPOL-Logoff消息,使连接端口恢复成未授权状态。
EAPOL-Key帧让接入点能够传送密钥给客户端,密钥交互帧只有在认证成功之后才会传送,这样可以避免密钥信息外泄。EAPOL-Key帧也可以用来定期动态更新密钥。
802.11X用户身份验证的更多相关文章
- IdentityServer4 使用OpenID Connect添加用户身份验证
使用IdentityServer4 实现OpenID Connect服务端,添加用户身份验证.客户端调用,实现授权. IdentityServer4 目前已更新至1.0 版,在之前的文章中有所介绍.I ...
- MVC4商城项目二:用户身份验证的实现
用户身份验证,依赖于 forms 身份验证类:FormsAuthentication,它是一串加密的cookie 来实现对控制器访问限制和登陆页面的访问控制.它在浏览器端是这样子的: 需求:我们要实现 ...
- asp.net用户身份验证时读不到用户信息的问题 您的登录尝试不成功。请重试。 Login控件
原文:asp.net用户身份验证时读不到用户信息的问题 您的登录尝试不成功.请重试. Login控件 现象1.asp.net使用自定义sql server身份验证数据库,在A机器新增用户A,可以登录成 ...
- Github官方app分析——用户身份验证模块
这篇文章记述的是我对Giuhub官方app的用户身份验证模块的分析. Giuhub的官方app虽然是一个非常小众的程序,但是从程序的设计的角度看,这是一个非常优秀的项目.对于其用户身份验证模块,给我留 ...
- 【转载】IdentityServer4 使用OpenID Connect添加用户身份验证
使用IdentityServer4 实现OpenID Connect服务端,添加用户身份验证.客户端调用,实现授权. IdentityServer4 目前已更新至1.0 版,在之前的文章中有所介绍.I ...
- 写给大忙人的centos下ftp服务器搭建(以及启动失败/XFTP客户端一直提示“用户身份验证失败”解决方法)
注:个人对偏向于底层基本上拿来就用的应用,倾向于使用安装包,直接yum或者rpm安装:而对于应用层面控制较多或者需要大范围维护的,倾向于直接使用tar.gz版本. 对于linux下的ftp服务器,实际 ...
- 第11章 使用OpenID Connect添加用户身份验证 - Identity Server 4 中文文档(v1.0.0)
在本快速入门中,我们希望通过OpenID Connect协议向我们的IdentityServer添加对交互式用户身份验证的支持. 一旦到位,我们将创建一个将使用IdentityServer进行身份验证 ...
- asp.net的forms身份验证 单用户身份验证
asp.net的forms身份验证 单用户身份验证 首先要配置Web.config文件 <system.web> <authentication mode="Forms& ...
- Python tkinter 实现简单登陆注册 基于B/S三层体系结构,实现用户身份验证
Python tkinter 实现简单登陆注册 最终效果 开始界面 注册 登陆 源码 login.py # encoding=utf-8 from tkinter import * from ...
随机推荐
- PhpStorm For Mac 安装使用及 Php 开发的 ‘Hello World’
PHP全称为:Hypertext Preprocessor,中文名为:『超文本预处理 器』是一种通用开源脚本语言,主要用于Web应用开发(俗称做网站或 者做后台!) 编译软件:PHPStorm for ...
- 解决方法:Could not load file or assembly 'WebGrease, Version=1.5.1.25624, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies.
最近使用VS2015调试ASP.NET 程序遇到了该问题: 在网上找了很多方法都不能解决,最后自己解决了,方法如下: 在project -> NuGet管理中找到已安装的所有程序:将Web Op ...
- Educational Codeforces Round 81 + Gym 102267
UPD:变色了!!!历史最高1618~ Educational Codeforces Round 81 (Rated for Div. 2) The 2019 University of Jordan ...
- Python 基础之面向对象之异常处理
一.认识异常 1.常用异常报错的错误类型 IndexError 索引超出序列的范围 KeyError 字典中查找一个不存在的关键字 Na ...
- Ubuntu 16.04 安装Redis服务器端
~ sudo apt-get install redis-server 安装完成后,Redis服务器会自动启动,我们检查Redis服务器程序 检查Redis服务器系统进程 ~ ps -aux|grep ...
- swiper插件遇到的坑
1.网速卡的情况下轮播图会出现塌陷 解决方法: 在swiper外层固定高度,用填充百分比方法: html代码:在swiper-container加一层外层,外层用padding-top:50%(看图片 ...
- broadcom sdk command
1.查看端口link状态 BCM.0>ps 2.查看vlan BCM.0>vlan show 3.查看pvlan BCM.0>pvlan show 4.CPU发包 BCM.0> ...
- SSH框架整合,启动Tomcat报错:Unable to load configuration
报错信息: 严重: Dispatcher initialization failed Unable to load configuration. - bean - file:/E:/MIKEY/mik ...
- c++刷算法的好处
写再最前面:摘录于柳神的笔记 在已经学习过C语⾔的前提下,学习C++并使⽤它刷算法的学习成本⾮常低-只需要⼏个⼩时就可 以学会- C++向下兼容C,C语⾔⾥⾯的语法完全可以在C++⽂件中运⾏,所以学习 ...
- Linux centosVMware 告警系统主脚本、告警系统配置文件、告警系统负载脚本、告警系统502日志脚本、告警系统disk监控脚本、告警系统邮件引擎
一.告警系统主脚本 要求:我们的机器角色多种多样,但是所有机器上都要部署同样的监控系统,也就说所有机器不管什么角色,整个程序框架都是一致的,不同的地方在于根据不同的角色,定制不同的配置文件. 程序架构 ...