上海交通大学:构建高校应用系统级别的信任机制
2012-11-09杜晋博茅维华白雪松
文/杜晋博 茅维华 白雪松
上海交通大学:构建高校应用系统级别的信任机制
文/杜晋博 茅维华 白雪松
随着高校信息化的蓬勃发展,高校内部的信息系统(分布式应用)也随之而增多,各个应用之间通过各种方式进行着信息的传递和共享,从而使信息传递过程的安全性显得愈发重要。通过对Kerberos模型的简化和改进,提出一种应用系统服务提供和调用的模型,借助于已有的“上海交通大学统一授权服务”,为服务的供应者提供可信的方式,来验证服务调用者的合法性,从而在应用的级别实现应用间的信任,构建更加安全可靠的面向服务架构的应用。
研究背景
Kerberos协议
Kerberos协议是一种计算机网络授权协议,用来在非安全网络中对个人通信以安全的手段进行身份认证。该认证过程的实现不需要依赖于主机操作系统的认证以及整个网络的安全保证。
Kerberos版本4的主要设计者Steve Miller和Clifford Neuman,在1980年末发布了这个版本。这个版本主要针对Project Athena。版本5由John Kohl和Clifford Neuman设计,在1993年作为RFC 1510颁布(在2005年由RFC 4120取代)。
该协议的思想被广泛地应用于各种认证系统,其中包括上海交通大学的统一身份认证系统,用以实现在上海交通大学校内各应用系统的单点登录。
上海交通大学统一身份认证
上海交通大学统一身份认证系统(SJTU JAccount),是上海交通大学网络信息中心开发的用户认证体系,以实现校内的单点登录。上海交通大学网络信息中心为每个注册的交大校园网用户提供一个统一的网络账户,称为jaccount。通过jaccount认证体系,可以在Web应用中实现单点登录,即用户在一个浏览器会话期中只需登录一次就能进入所有其拥有访问权限的jaccount成员站点。此身份认证的前提是SJTU JAccount服务为需要使用单点登录的校内应用共享一个SiteKey,通过此密钥来实现通讯间加密。
上海交通大学统一授权服务
上海交通大学统一授权服务(S J T U Entitle)是基于统一身份认证系统进行管理的,统一授权系统为各应用系统提供一个统一授权的接口。各应用系统的管理员可以通过Web Service接口对用户在该应用系统内的权限进行管理,当用户访问使用了统一授权的第三方应用系统时,第三方应用系统通过调用统一授权系统提供的Web Service接口,获取特定的jaccount用户在该应用中的相应权限、角色等认证信息。
本研究将基于统一授权系统进行扩展,试图使统一授权系统提供类Kerberos的认证服务,使高校内各个应用系统间的服务调用可信。
图1 应用间信任模型
OAuth开放授权
OAuth(开放授权)是一个开放标准,允许用户让第三方网站访问该用户在某一网站上存储的私密资源(如照片、视频、联系人列表),而无需将用户名和密码提供给第三方网站。
由于OAuth在目前的互联网上应用广泛,很多服务如Open API,很多大公司如Google、Yahoo、Microsoft等都提供OAuth认证服务,这些都足以说明OAuth标准逐渐成为开放资源授权的标准,所以我们在系统设计初期也曾考虑采用OAuth标准的应用间的信任方式,但相比Kerberos而言,OAuth模型更适合于非集中式的Web环境,在学校、企业内部使用Kerberos模式的应用级的信任更有利于降低应用系统的开发代价,有利于高校应用系统的集中管理和统一规划。
应用间信任模型的设计
本研究采用的模型主要涉及到服务调用者(Service Invoker)、服务提供者(Service Provider)和上海交通大学统一授权服务(SJTU Entitle)三部分。考虑到上海交通大学统一认证系统(SJTU JAccount)本来已经与服务调用者、服务提供者有着共享的密钥(SiteKey,参见1.2节),所以统一授权服务将采用统一认证系统系统所持有的站点密钥,从而最大程度地降低对遗留系统的影响和新应用开发的代价。
各个系统间的关系如图1所示。本模型的具体机制可以分为三个步骤。
服务调用者从统一授权服务获取Token
服务调用者从统一授权服务获取Token是此模型机制的第一个步骤,服务调用者向统一授权服务进行RequestToken请求,申请Token。RequestToken接口是统一授权所有服务接口中,唯一不需要验证参数(Ticket)的服务。此接口可以定义如下:
stringRequestToken(string providerId)
RequestToken方法为服务调用者获取一个用来访问应用标识为providerId的Token。定义Key(Text)表示用Key做密钥加密明文Text之后的密文,则其中Token格式可表示为:
InvokerKey(Expire,SessionKey,ProviderPart)
其中InvokerKey为服务调用者在统一身份认证系统中的站点密钥。Expire表示超时的时间戳,用Unix风格的时间表示,即1970年1月1日至今的Seconds数。超时以后Token将不可用,必须重新申请。
ProviderPart部分组成如下:
ProviderKey(Expire,InvokerId,InvokerIP,SessionKey)
此部分Invoker无法解密,须组装到Ticket并交给Service Provider解析验证。
ProviderPart加密的四部分信息:Expire:用于验证时间上是否超时;InvokerId:用于验证调用者身份是否被篡改;
InvokerIP:用于验证调者位置是否变动,防止信息被拦截;
SessionKey:用于解密和Invoker提供的通讯数据。
注意此处的SessionKey分别通过InvokerKey和ProviderKey(均由SJTU JAccount系统提供)进行加密,同Kerberos一样,此SessionKey将作为Invoker和Provider之间通讯的唯一共享的秘密。
服务调用者将Token再重组为Ticket
服务调用者获取到Token后,将自行组装Ticket。此Ticket将用于下一步骤的服务调用,并可被服务提供者验证并信任。
Ticket格式定义如下:
(InvokerPart,ProviderPart,ArgumentsSignature)
InvokerPart格式:SessionKey(Timestamp, InvokerId)
其中Timestamp为当前Invoker的系统时间。
ArgumentsSignature格式如下:
SessionKey(MD5(Timestamp, Arguments))
即首先把所有参数连接后,加入Timestamp作为扰乱信息。然后通过MD5取得信息摘要,最后用SessionKey加密。此参数签名用于防止网络传输过程中Web Service的参数被篡改。
服务提供者验证服务调用者的合法性
RequestToken将是唯一一个不需要Ticket参数的服务。即凡是使用本研究所描述的模型的应用,在对外提供服务时,将要求服务调用者提供Ticket参数,并在每次服务调用时通过此参数(Ticket)验证来获得对Invoker的信任关系。
服务提供者收到Ticket以后,首先通过ProviderKey来解密ProviderPart获得SessionKey,然后通过SessionKey解密InvokerPart和ArgumentsSignature,之后服务提供者对Ticket做如下验证:
1. 验证ProviderPart和InvokerPart的InvokerId
2. 验证Expire Timeout(可设定)<=Timestamp <= Expire。此处考虑到网络延时、服务器时间的不同步等,在检查时将有少量的容错的偏移。
3. 验证InvokerIP是否一致,服务提供者可从Request中获取。此处考虑的网络拓扑等因素,要求InvokerIP对应于统一授权服务的IP和对应于服务提供者的IP必须是相同的。当此要求不被满足时,此检查将通过一定方式跳过。
4.验证参数摘要ArgumentsSignature。
如果验证通过,则此次服务调用将被认为可信,并有助于服务提供者获得调用者的更详尽信息。
本文通过提出应用间的信任模型,以解决高校内部各个应用系统之间在不安全的网络环境中的信任问题,并且已经在上海交通大学的多个应用系统中实施运行。但此模型依然存在一些问题,其中一个问题是单向信任的问题。出于效率考虑,本模型仅仅可供服务的提供者来信任服务的调用者,而没法保证服务的调用者调用到的服务是可信任的。
另外一个问题是服务的信任级别和信任粒度问题。OAuth可以有更细的、权限级别的应用间信任的粒度,而本模型只能提供应用级别的信任,服务级、接口级或者权限级别的粒度的信任,还是一个有待研究的问题。
(作者单位为上海交通大学网络信息中心)
扩展文献:
[1]http://web.mit.edu/kerberos/www/:Kerberos:The Network Authentication Protocol.
[2]The Kerberos Network Authentication Service (V5), RFC1510.
[3]http://zh.wikipedia.org/wiki/Kerberos, 2011/04/05有效.
[4] 茅维华,谢金宝,Web 应用单一登录的类Kerberos 实现,计算机应用与软件,2004年2月,pp.87-90.
[5]白雪松,茅维华,身份与权限体系关键技术的总体设计与实践,中山大学学报(自然科学版),200948(z1):260~263页.
[6] http://zh.wikipedia.org/wiki/OAuth2011/04/05有效.