一种基于JAXM的XKMS密钥定位服务的实现方案(网络安全技术与应用杂志).doc_第1页
一种基于JAXM的XKMS密钥定位服务的实现方案(网络安全技术与应用杂志).doc_第2页
一种基于JAXM的XKMS密钥定位服务的实现方案(网络安全技术与应用杂志).doc_第3页
一种基于JAXM的XKMS密钥定位服务的实现方案(网络安全技术与应用杂志).doc_第4页
一种基于JAXM的XKMS密钥定位服务的实现方案(网络安全技术与应用杂志).doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

一种基于JAXM的XKMS密钥定位服务的实现方案蒋勇(江苏联合职业技术学院徐州财经分院 江苏 徐州,221008)摘 要:JAXM是是为Java平台上的应用程序定义的API,供了一种能够在Java平台上通过Internet发送XML文档的标准方法;XML密钥管理规范(XKMS) 以已有的XML加密和XML数字签名为基础,定义了分发和注册公钥的协议。密钥定位服务是XKMS中一个重要的服务规范,本文在探讨JAXM和XKMS理论的基础上,给出了一个基于JAXM的XKMS密钥定位服务的实现方案。关键词:JAXM;XKMS;密钥定位服务;实现方案中图分类号:TP309 文献标识码:A0 引言:JAXM简介JAXM(Java API for XML Messaging,简称JAXM)是为Java平台上的应用程序定义的API,用以通过XML(以及SOAP)发送和接收消息,支持同步消息和异步消息1。它定义了一个能够与XML消息交换的基本框架。JAXM提供了一种能够在Java平台上通过Internet发送XML文档的标准方法,使得开发者可以使用Java平台进行XML消息收发。而大多数的Web服务都是由简单的消息交换组成,对于有些Web服务,直接在低级别的消息层编程通常是很有用的。JAXM提供了使XML数据能够在二个应用之间互操作的框架,允许在两个独立的Web服务之间完成全部XML文件的传输,通常我们说的JAXM API包括两个包2:Javax.xml.soap:它是发送SOAP消息的基本包,主要包含了发送带有附件的SOAP消息的API(SOAP with Attachments API for Java ,SAAJ)。它是SOAP消息的基本包,它为构建SOAP包和解析SOAP包提供了重要的支持。它包含了发送请求-响应消息相关的API。Javax.xml.messaging:定义了JAXM的规范,包含了发送和接收消息所需的API,因此能够发送单向消息。利用JAXM实现WEB服务主要由JAXM服务端和JAXM客户端两部分组成:JAXM服务端JAXM客户端发送的消费XML消息。服务读取和处理客户端的消息。服务对客户端的反应取决于两者之间所建立的消息交换的类型。这部分取决于发送消息的客户端是单独的JAXM客户端还是使用消息提供者的JAXM客户端。JAXM客户端向接收者发送消息。最终的接收者一般是服务。 JAXM客户端可以直接发送消息给服务,也可以发送给一个中介提供者,被称为JAXM消息提供者。取决于客户端和接收者是如何配置的。1 XKMS及密钥定位服务 2001年,Verisign、Microsoft和Web Methods三家公司发布了XML密钥管理规范(XML Key Management Specification,XKMS)4。XKMS以已有的XML加密和XML数字签名为基础,定义了分发和注册公钥的协议,以提供Web上的可信服务,主要功能包括公钥的注册、发布、查询、验证、撤销、恢复服务。 XKMS核心功能被包括两个规范34:XML密钥信息服务规范 (XML Key Information Service Specification,X-KISS)和XML密钥注册服务规范 (XML Key Registration Service Specification,X-KRSS)。 XML密钥信息服务规范(X-KISS)允许客户端应用程序认证经过加密和签名的数据。X-KISS支持对元素的处理,该元素指定了XML加密和XML签名中的密钥信息。X-KISS支持两种服务:定位服务和验证服务。定位服务负责完成解析与XML加密或XML签名规范文档中相关的元素。定位服务由定位请求LocateRequest和定位响应LocateResult两个消息组成。客户端在LocateRequtst请求消息中携带公钥或证书的标识,如密钥名、证书的URI等,并指出响应中需要返回的信息。信任服务获取相应的结果后,构建LocateResult消息并返回给请求者。定位服务主要通过密钥名称或密钥信息的存放位置来查找和检索公钥。规范化的XML加密或XML签名文档中,可以指定密钥名称,可以指定密钥的位置。Web服务请求者向XKMS可信服务提供者发送密钥请求信息,服务提供者收到包含的请求消息后,解析请求获得密钥名或密钥位置,然后调用底层PKI功能来获取密钥信息,返回密钥信息,如X509证书。服务提供者再将密钥放在中发送给请求者。整个定位服务过程如图1所示:Web服务请求方XKMS可信服务提供者PKI实现者1、2、获取密钥消息3、X.509证书4、图1 X-KISS定位服务2 一种基于JAXM的密钥定位服务的实现方案 前已述及,XKMS定位服务由LocateRequest请求和LocateResult应答两种消息组成。客户端按照LocateRequest消息的要求发送请求来定位一个PKI密钥库的公钥。服务端获得公钥后按照LocateResult消息要求返回响应给请求者。2.1 客户端实现客户端发送包含一个密钥名为yefriend的LocateRequst的请求来定位一个PKI密钥库的公钥,同时,请求方要求服务方返回该密钥的模数和指数。客户端编程将按照以下步骤进行:(1)创建SOAP连接(2)创建SOAP消息(3)向SOAP消息中增加数据(4)发送SOAP请求消息(5)对SOAP响应消息进行处理客户端发送XKMS请求消息的关键代码如下:SOAPConnectionFactory sf=SOAPConnectionFactory.newInstance();SOAPConnection con=sf.createConnection(); /创建SOAP连接MessageFactory mf=MessageFactory.newInstance(); /创建消息工厂SOAPMessage message=mf.createMessage(); /创建SOAP消息SOAPPart soapPart=message.getSOAPPart(); /获取SOAPPart对象SOAPEnvelope envelope=soapPart.getEnvelope();/狭取SOAPEnvelopeSOAPBody body=envelope.getBody(); /获取SOAPBody/创建元素,第1个参数为元素名,第2个参数为元素的名称空间的前缀,第3个参数为元素的名称空间。Name name_locate=envelope.createName(“LocateRequest”,“xkms”, “/TR/CR-xkms2-20040405”);SOAPBodyElement locate=body.addBodyElement(name-locate);/向添加子元素,元素值为KeyNamelocate.addChildElement(“ResponseWith”).addTextNode(“KeyName”);/向添加子元素,元素值为KeyValuelocate.addChildElement(“ResponseWith”).addTextNode(“KeyValue”);/向添加子元素,该元素包括子元素。元素又包含子元素。Name name_query=envelope.createName(“QueryKeyBinding”,“xkms”,“/TR/CR-xkms2-20040405”);SOAPElement ele_query=locate.addChildElement(name_query);Name name_keyinfo=envelope.createName(“KeyInfo”,“ds”,“/2000/09/xmldsign#”);SOAPElement KeyInfo=ele_query.addChildElement(name_keyinfo);Name name_keyname=envelope.createName(“KeyName”,“ds”,“/2000/09/xmldsign#”);KeyInfo.addChildElement(name_keyname).addTextNode(“yefriend”);message.saveChanges(); /保存消息结构/创建URLEndpoint对象,指定定位服务的URL。URLEndpoint endpoint=new URLEndpoint(“http:/localhost:8080/xkms/XKMSService”);/发送请求消息并使用SOAPMessage接收服务方发来的响应消息SOAPMessage response=con.call(message,endpoint);con.close(); /当处理完响应消息后,关闭SOAP连接2.2 信任服务端服务端首先使用Keytools工具生成一个RSA密钥对,将其存储在keystore中。命令如下:keytool -genkey alias yefriend -keyalg RSA-dname“CN=302,0U=302,0=302,L=GuangDong,S=GuangZhou,C=CN” -keypass yefriend keystore KeyStore -storepass yefriend -storetype JKS服务端接收到LocateRequest请求消息,解析该消息,获得密钥别名,检索密钥库中相应的公钥,并对公钥进行Base64编码转换,最后按照XKMS规范生成LocateResult响应消息并返回给请求者。采用JAXM时,服务端处理消息的步骤如下:(1)获取请求信息(2)读取请求消息中相关的参数(3)根据参数调用相应的业务处理,返回结果给业务调用者(4)构建SOAP响应消息,向SOAP响应消息中添加请求方需要的信息(5)返回SOAP响应消息给请求方定位服务实现的关键代码如下:public class XKMSService public Document locate(Document doc) try /获取Messagecontext对象MessageContext context=MessageContext.getCurrentContext();Message request=context.getRequestMessage(); /获取请求消息SOAPPart part=request.getSOAPPart();SOAPEnVelope env=part.getEnvelope();SOAPBody body=env.getBody(); /获取到请求消息的body元素/遍历body元素,提取相关信息,如KeyName,解析需要返回哪些信息Iterator it=body.getChildElements(env.createName(“KeyName”,“ds”,“/2000/09/xmldsign#”);String alias=(SOAPElement)it.next().getValue(); /获取密钥名/name为密钥库文件名,包含路径FileInputStream fin=new FileInputStream(name);KeyStore ks=KeyStore.getInstance(“JKS”);/导入Keystore文件,参数password为访问密钥库的密码ks.load(fin,password.toCharArray();/获取用户数亨证书java.security.cert.Certificate cert=ks.getCertificate(alias);fin.close(); /关闭证书文件流/获取用户RSA公钥RSAPublicKey pkey=(RSAPublicKey)cert.getPublicKey()BigInteger be=pkey.getPublicExponent();/提取密钥指数BigInteger bm=pkey.getModulus(); /提取密钥模数byte bbe=be.toByteArray(); /将指数转换为字节数组byte bbm=be.toByteArray(); /将模数转换为字节数组BASE64Encoder encoder=new BASE64Encoder();/创建BASE64转换类对象String str_be=encoder.encode(bbe); /将编码后的密钥指数转换为字符串String str_bm=encoder.encode(bbm); /将编码后的密钥模数转换为字符串/生成响应消息,与客户端生成SOAP消息类似,按照XKMS规范向SOAP消息rfl添加密钥指数和模数,此处省略return doc; /返回组装成的响应catch(Exception e)return null;3 总结本文在探讨了JAXM和XKMS的理论知识的基础上,基于JAXM设计了一个XKMS密钥定位服务的客户端与信任服务端的主要代码模型。XKMS密钥定位服务只是X-KISS服务的一部分,它只能够完成对于密钥的定位,而无法验证公钥或证书的有效性。对于密钥返回有效性的验证,还需要通过验证服务来实现。 XKMS规范除了X-KISS外,还有一个X-KRSS规范。它允许基于XKMS的可信服务提供者提供公钥管理服务。它主要包括注册密钥服务(Regi ster Key Service)、撤销密钥服务(Revoke Key Service)、恢复密钥服务(Recover Key Service)、重发密钥服务(Reissue Key Service)等几个规范。这不是本文主要探讨的范畴,不再详述。参考文献:1陈亚强. /WebService/WebService003.htm#42百度百科. /view/3108318.htm3百度百科. /view/1589183.htm4曹庆华,罗键.基于XKMS与SAM L的Web服务安全模型J,算机时代 2009(12):24-265李昕,张军.面向Web服务的XKMS模型设计与实现J,计算机工程与设计 2010,31(8):1738:1742An execution program based on JAXM and XKMS Key location serviceJiang Yong(Jiangsu Un

温馨提示

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

评论

0/150

提交评论