收藏 分销(赏)

一种基于JAXMXKMS密钥定位服务实现方案(网络安全技术和应用杂志).doc

上传人:仙人****88 文档编号:9454166 上传时间:2025-03-26 格式:DOC 页数:5 大小:59.50KB
下载 相关 举报
一种基于JAXMXKMS密钥定位服务实现方案(网络安全技术和应用杂志).doc_第1页
第1页 / 共5页
一种基于JAXMXKMS密钥定位服务实现方案(网络安全技术和应用杂志).doc_第2页
第2页 / 共5页
点击查看更多>>
资源描述
一种基于JAXM的XKMS密钥定位服务的实现方案 蒋勇 (江苏联合职业技术学院徐州财经分院 江苏 徐州,221008) 摘 要:JAXM是是为Java平台上的应用程序定义的API,供了一种能够在Java平台上通过Internet发送XML文档的标准方法;XML密钥管理规范(XKMS) 以已有的XML加密和XML数字签名为基础,定义了分发和注册公钥的协议。密钥定位服务是XKMS中一个重要的服务规范,本文在探讨JAXM和XKMS理论的基础上,给出了一个基于JAXM的XKMS密钥定位服务的实现方案。 关键词:JAXM;XKMS;密钥定位服务;实现方案 中图分类号:TP309 文献标识码:A 0 引言: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核心功能被包括两个规范[3][4]:XML密钥信息服务规范 (XML Key Information Service Specification,X-KISS)和XML密钥注册服务规范 (XML Key Registration Service Specification,X-KRSS)。 XML密钥信息服务规范(X-KISS)允许客户端应用程序认证经过加密和签名的数据。X-KISS支持对<ds:KeyInfo>元素的处理,该元素指定了XML加密和XML签名中的密钥信息。X-KISS支持两种服务:定位服务和验证服务。 定位服务负责完成解析与XML加密或XML签名规范文档中相关的<ds:KeyInfo>元素。定位服务由定位请求LocateRequest和定位响应LocateResult两个消息组成。客户端在LocateRequtst请求消息中携带公钥或证书的标识,如密钥名、证书的URI等,并指出响应中需要返回的信息。信任服务获取相应的结果后,构建LocateResult消息并返回给请求者。 定位服务主要通过密钥名称或密钥信息的存放位置来查找和检索公钥。规范化的XML加密或XML签名文档中,<ds:KeyInfo>可以指定密钥名称,<ds:RetrievalMethod>可以指定密钥的位置。Web服务请求者向XKMS可信服务提供者发送密钥请求信息,服务提供者收到包含<ds:KeyInfo>的请求消息后,解析请求获得密钥名或密钥位置,然后调用底层PKI功能来获取密钥信息,返回密钥信息,如X.509证书。服务提供者再将密钥放在<ds:KeyValue>中发送给请求者。整个定位服务过程如图1所示: Web服务请求方 XKMS可信服务提供者 PKI实现者 1、<ds:KeyInfo> 2、获取密钥消息 <ds:KeyName> 3、X.509证书 4、<ds:KeyInfo> <ds:KeyValue> 图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();//狭取SOAPEnvelope SOAPBody body=envelope.getBody(); //获取SOAPBody //创建<LocateRequest>元素,第1个参数为元素名,第2个参数为元素的名称空间的前缀,第3个参数为元素的名称空间。 Name name_locate=envelope.createName(“LocateRequest”,“xkms”, “http://www.w3.org/TR/CR-xkms2-20040405”); SOAPBodyElement locate=body.addBodyElement(name-locate); //向<LocateRequest>添加子元素<Responsewith>,元素值为KeyName locate.addChildElement(“ResponseWith”).addTextNode(“KeyName”); //向<LocateRequest>添加子元素<Responsewith>,元素值为KeyValue locate.addChildElement(“ResponseWith”).addTextNode(“KeyValue”); //向<LocateRequest>添加子元素<QueryKeyBinding>,该元素包括子元素<KeyInfo>。<KeyInfo>元素又包含<KeyName>子元素。 Name name_query=envelope.createName(“QueryKeyBinding”,“xkms”, “http://www.w3.org/TR/CR-xkms2-20040405”); SOAPElement ele_query=locate.addChildElement(name_query); Name name_keyinfo=envelope.createName(“KeyInfo”,“ds”, “http://www.w3.org/2000/09/xmldsign#”); SOAPElement KeyInfo=ele_query.addChildElement(name_keyinfo); Name name_keyname=envelope.createName(“KeyName”,“ds”, “http://www.w3.org/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”, “http://www.w3.org/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]陈亚强. [2]百度百科. [3]百度百科. [4]曹庆华,罗键.基于XKMS与SAM L的Web服务安全模型[J],算机时代 2009(12):24-26 [5]李昕,张军.面向Web服务的XKMS模型设计与实现[J],计算机工程与设计 2010,31(8):1738:1742 An execution program based on JAXM and XKMS Key location service Jiang Yong (Jiangsu Union Technical Institute Xuzhou Finance and economics Branch,XuZhou 221008,China) Abstract: JAXM is an application program for the definition of API on Java platform, which provides a standard method to dispatch the XML document on Java platform by Internet. XML Key Management Specification is based on XML encryption and XML signature,which defines the agreement of dispatch and registration. Key location service is one of the important service standards. This paper is based on the theory of JAXM and XKMS, providing an execution program for JAXM and XKMS. Key words: JAXM;XKMS;Key location service;execution program 作者简介:蒋勇(1977- ),男,硕士,讲师,数据库系统工程师,江苏联合职业技术学院徐州财经分院教师,研究方向为计算机学科教育教学。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服