Java实现运用Kerberos协议的客户机_服务器程序.docx_第1页
Java实现运用Kerberos协议的客户机_服务器程序.docx_第2页
Java实现运用Kerberos协议的客户机_服务器程序.docx_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

java 实现运用 kerberos 协议的客户机/ 服务器程序李林玲 , 费宁 , 陈春玲( 南京邮电学院 计算机科学与技术系 , 江苏 南京 210003)摘 要 :因特网的日益发展给人们提供了更多的机会和方便快捷 , 同时也带来了更多的安全隐患 。kerberos 解决了这个问题 。kerberos 是一种身份认证协议 , 提供了集中的身份验证服务器 , 提供了从服务器端验证用户 、用户端验证服务器 , 以及 用户和服务器之间加密报文传输的安全功能 。文中研究了 kerberos 身份认证协议 , 完成和分析了运用 kerberos 协议实现 身份认证和安全通信的客户机/ 服务器程序的 java 实现 。关键词 :身份验证 ; 网络安全 ; 面向对象 ; 加密中图分类号 :tp393108文献标识码 :a文章编号 :1005 - 3751( 2005) 05 - 0072 - 03implement ing cl ient/ server appl icat ion by using kerberos with javal i lin2ling , f e i ning ,ch en chun2ling(dep t . of co mp uter sci . & techn. ,nanjing u niv. of post s & teleco mmunicatio ns , nanjing 210003 ,china)abstract :the develop ment of intemet p rovides t he mo re chances , co nvenience , and quickness , at t he same time ,it also brings t he mo re securit y p ro blems. it is resolved by kerbero s. kerbero s is an aut henticatio n p rotocol , p rovides a cent ral identit y aut henticatio n server , implementing aut henticatio n f ro m server to client , and also f ro m client to server , ensuring secure data t ransfer bet ween client and server . this article summarizes kerbero s p rotocol , and analyzes j ava implementatio n of client / server by using kerbero s aut henticatio n p rotocol .key words :aut henticatio n ; net wo r k securit y ;o bject - o riented ;encryptio n0前言internet 明文传输的用户个人信息 、密码都能被嗅探 、 窃听 ,造成不必要的损失 。更糟的是 , 很多企业的 client/server 程序都是基于客户的 ,并是在真正的客户基础上工 作的 ,如果有恶意的人冒名顶替 ,则完全没有办法区别 ,具有很大的安全隐患 ,很容易被黑客攻击 。传统的防火墙1可以解决这些问题 ,但是它假设攻击总是来自外部的 , 而 统 计 资 料 表 明 , 绝 大 部 分 的 攻 击 都 是 来 自 内 部 的 。 kerberos 正是为了解决这些问题而产生的 。kerberos 使用 强密码 ,使得一个用户借此可以证明它的身份 ; 在身份验 证之后 ,可以通过加密通信确保隐私和数据一致性 。对于 internet 网络服务 , kerberos 协议有很大的应用空间 ,适应 日益发展的电子商务 、电子银行 、企业网的安全要求 。kerberos 是 m i t ( 麻省理工学院) 开发的一种身份验 证服务2 。在一个开放的分布式网络环境中 ,用户通过工 作站访问服务器提供的服务 ,存在很多问题 :a . 工作站上的用户可以冒充另一用户操作 ;b. 用户可以改变工作站地址来冒充另一台工作站 ;c . 用户可以窃听并回放他人的信息交换 ,获得对于某种服务的访问权或中断服务的运行 ;d. 使用假冒服务器从而骗得用户的机密信息 。kerberos 试图解决这些问题 :首先 ,工作站用户如何才 能通过网络安全地访问 分 布 在 不 同 服 务 器 上 的 服 务 ; 其 次 ,服务器如何验证对服务的请求 ; 最后 ,服务器如何对授 权用户进行访问控制 。kerberos 的 解 决 方 案3 : 在 一 个 分 布 式 的 client/ server 体系机构中 ,引入一个可信任的第三方 ( kerberos 服务器) ,让其提供认证服务 ,采用共享密钥加密技术 。kerberos 身份验证技术kerberos 认 证 协 议 定 义 了 客 户 端 和 密 钥 分 配 中 心( kdc , key dist ribution center) 的认证服务之间的安全交 互过程 。kdc4 是一个管理和分发 kerberos 票据的 kerberos服务器 。而 kdc 又由两个服务器组成 : 一个身份验证服 务器 (as) 和一个票据授予服务器 ( t gs) 。as 和 t gs 都 接收客户机请求 ,并发回 kerberos 票据以响应这些请求 。 当 as 接收客户机的票据请求时 , 它发出一个初始票据 。 然后客户机向 t gs 展示这个初始票据 。t gs 根据这个初 始票据发出服务票据 , 客户机根据这个服务票据就可以和 服务器进行对话 ,请求服务了 。1收稿日期 :2004 - 08 - 20作者简介 :李林玲 ( 1980 ) ,女 ,江苏南京人 , 硕士研究生 , 研究方向 为计算机软件技术在通信中的应用 。第 5 期李林玲等 :j ava 实现运用 kerberos 协议的客户机/ 服务器程序73 kerberos v4 的报文交换过程见图 1 。制器所在域的一个成员 。(2) 设置安全策略文件 ,告诉 kerberos 系统 ,要实现的 应用程序是可信的 。j r e 的授权策略文件 (java . policy) 位 于 。在该文件 添加如下内容 :grant codebase“ pat h gssclient a pplication . jar”per mission java . util . propert yper mission “java . securit y. krb5 . real m”“, write”;per mission java . util . propert yper mission “java . securit y. krb5 . kdc”“, write”;per mission java . util . propert yper mission “java . securit y. aut h . login . config”,“write”;per mission javax . securit y. aut h . aut h per mission“ 3 ”;per mission java . util . propert yper mission “javax . securit y. aut h . login . config”,“write”;per mission javax . securit y. aut h . kerberos. service per mission图 1 kerberos v4 报文交换过程kerberos v5 的报文交换过程如下 :阶段 1 : client 与 as 身份验证交互 , 获取访问券发放 许可证 。(1)(2) tickettgs c as : idc| | idt gs| | ts1as c : ekc kc ,t gs | |idt gs | |ts2 | | lifetime2 | |其中 tickett gs = ek t gs k c , t gs| | idc| | adc| | idtgs | | ts2 | lifetime2 阶段 2 :访问券发放交互 , 获取访问服务准许券 。(3) c t gs : idv | | tickettgs| | aut henticatorc其中 tickett gs = ek tgs k c , t gs | | idc | | adc | | idt gs | | ts2 | | lifetime2 ,aut henticator c = ekc ,t gs id c| | adc| | ts3 “krbt gt/ 域名 域名”“, initiate”;per mission javax . securit y. aut h . kerberos. service per mission“ 3 ”,“initiate”; ;其中 ,pat h 是应用程序 gssclientapplication. jar 所在 目录 , krbt gt 是密钥分发中心 ( kdc) 服务使用的服务帐 户 。下面就可以实现 client/ server 程序了 。2 . 2 程序分析2 . 2 . 1 client 和 server 共有的登录域模块的机理剖析实 现 kerberos v5 验 证 机 制 有 两 种 a p i5 : j aas (j ava tm aut hentication and aut horization service ) 或 者j ava tm gss - a p i 。j aas ,用于用户身份的验证和用户访问资源的授权 。gss - a p i 提供了对于建立在底层安全机 制 (包括 kerberos) 基础上的安全服务的统一接口 。这里 , 通过 综 合 考 虑 , 将 采 用 结 合 两 者 的 方 法 , 用 j aas 实 现 kerberos 身份验证和授权 ,用 gss - a p i 实现随后的客户 机和服务器的加密交互 。首先讨论利用 j aas 身份验证和 登录的方法 ,登录步骤对客户机 、服务器是一样的 。(1) 实例化 logincontest , 传入参数 : 登录配置文件名 和回调函数 。logincontext cs - l c = new logincontext ( myconf . conf , new text callback handler () ) ;(2) 调用 logincontest . login () : cs - l c. login () 。2 . 2 . 1 . 1 登录域配置文件j aas 的登录域配置文件 , 点明了应用程序使用何种 登录模块 。这里 ,使用 su n 公司提供的 co m. sun. securit y. aut h. module . krb5loginmodule 登 录 模 块 , 表 示 应 用 kerberos 验证协议 。应用 client 和应用 server 可以使用相 同的登录 模 块 , 只 要 在 配 置 文 件 里 , 写 两 项 而 不 是 一 项 , myconf . conf 文件内容如下所示 :co m. sun . securit y. jgss. initiate co m. sun . securit y. aut h . module . krb5lo ginmodule required ; ;(4) t gs c : ekc ,t gs k c ,v| | idv | |ts4 | | ticketv 其中 ticket v = ekv k c , v| |lifetime4 idc| |adc| |idv| |ts4 | |阶段 3 : 客 户 机/ 服 务 器 身 份 验 证 交 互 , 获 取 应 用 服务 。(5) c v : ticketv | | aut henticatorc其中 ticket v = ek v k c , v | | idc | | adc | | idv | | ts4 | | lifetime4 ,aut henticator c = ekc ,v id c| | adc| | ts5 (6) v c : = ekc ,v ts 5 + 1 , 进行相互认证 。kerberos v5 是对 v4 的进一步改进 , 弥补了 v4 的安全 漏洞和应用限制 。kerberos v5 对 v4 所作的主要改进见文献3。2java 语言和安全包j ava 语言是一种面向对象的语言 ,有如下特点 : 简单 、 面向对象 、分布式 、解释执行 、鲁棒 、安全 、体系结构中立 、可移植 、高性能 、多线程以及动态性 。而且类库非常丰富 ,提供了大量满足网络化 、安全性的需求的类 。因此决定用j ava 实现利用 kerberos 协议的客户机/ 服务器程序 。2 . 1 操作系统环境和软件环境使 用 windows 2000 advanced server 操 作 系 统 , jbuilder 9 。用 j ava 实 现 使 用 kerberos 身 份 验 证 技 术 的client/ server 应用 ,先行条件是 :(1) 建立 kdc 。可以使用不同的 kdc 来实现 , 这里 使用 windows 2000 server 自带的 kdc , kdc 必须建在域 控制器里 。同时 , client/ server 应用的主机都必须是域控 1994-2013 china academic journal electronic publishing house. all rights reserved. 74 微 机 发 展第 15 卷out st ream. write ( to ken) ;out st ream. flush ( )在客户机的构造器中 , 必须设置如下数据 , 以提供域 和 kdc ,以及登录模块配置文件的信息 。system. set propert y (“ java . securit y. krb5 . real m ”,your kerberosreal m) ;system.set propert y(“ java .securit y.krb5 .kdc ”, your kdcaddress) ;system. set propert y (“java . securit y. aut h . lo gin . config ”,yourconf file) ;2 . 2 . 3 服务器与客户机的安全通信流程和核心程序3 服务器端解密报文的过程如下 :message prop prop = new message prop ( 0 , false) ;to ken = new byteinst ream. read int ( ) ;inst ream. readfull y ( to ken) ;byteb ytes = context . unwrap ( to ken , 0 , to ken . lengt h , prop) ; st ring st r = new st ring ( bytes) ;通过调用 p rop . get privacy () 可以知道是否加密 。3 在服务器端的构造器中 ,也必须设置如下数据 :system. set propert y (“ java . securit y. krb5 . real m ”, your kerberosreal m) ;system.set propert y(“ java .securit y.krb5 .kdc ”,your kdcaddress) ;system. set propert y (“java . securit y. aut h . lo gin . config ”, yourconf file) ;这样就实现了客户机和服务器的 kerberos 相互身份验证和其后的安全加密报文交互了 。co m. sun . securit y. jgss. accept co m. sun . securit y. aut h . module . store key = t rue ;krb5lo ginmodulerequired前一项对应于客户机的配置 ,后一项对应于服务器的配置 。其中 store key = t rue , 表示应根据服务器的登录模 块的密码计算出一个密钥 ,并且保存在私有证书对象里 ,用于之后的应用 client 和应用 server 相互认证 。只有程序实体成功登录上 kdc , krb5loginmodule 才返回成功 。至 此就完成了 j aas 的 kerberos 身份验证 。2 . 2 . 1 . 2 回调函数回调函数的作用是 , 登录模块不直接和用户交互 , 它 调 用 回 调 函 数 来 获 得 用 户 信 息 , 如 用 户 名 和 密 码 。 text callback handler 是 j ava 提供的一个回调处理类 ,实现 从命令行得到信息和向命令行输出信息 。2 . 2 . 1 . 3 身份验证 身份验证的代码如下 :while ( ! context . is established ( ) ) to ken = new byteinst ream. read intinst ream. readfull y ( to ken) ;( ) ;to ken = context . accept seccontext ( to ken , 0 , to ken . lengt h) ;if ( to ken ! = null) out st ream. write int ( to ken . lengt h) ;out st ream. write ( to ken) ;out st ream. flush ( ) ;通过 这 一 段 代 码 就 实 现 了 身 份 验 证 , 如 果 context .request mut ualaut h ( t rue) 则表明实行相互身份验证 。其中context 就是通信上下文 ,下面还要详细说明它的来历和作 用 。2 . 2 . 2 客户机与服务器安全加密通信流程及核心程序 首先要创建一个 socket ,连接到服务器的端口上 ,与服务器建立连接 。然后建立输入流和输出流来和 socket 交互 ,发送消 息 和 接 受 消 息 。然 后 和 服 务 器 建 立 通 信 上 下 文 ,通信上下文 gsscontext 封装了 gss - a p i 安全 上 下 文 ,提供了该上下文下的安全服务 ,比如对通信的加密 、解 密等等 ,用户可以直接调用 。gssmanager manager = gssmana ger . get instance ( ) ; id krb5oid = new oid (“1 . 2 . 840 . 113554 . 1 . 2 . 2 ”) ; gsscontext context = mana ger . createcontext ( servername ,krb5oid , null ,gsscontext . d efaul t - l if e tim e)bytemessa gebytes =“hello there ! 0 ”. getbytes ( ) ; message prop prop = new message prop ( 0 , t rue) ;to ken = context . wrap ( messagebytes , 0 , messagebytes. lengt h , prop) ;o

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论