《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 設計應用 > 基于JAVA的XKMS服務簡單模型實現
基于JAVA的XKMS服務簡單模型實現
孟 翔1,3,薛萬國2
1.中國科學技術大學,北京100039; 2.解放軍總醫院 計算機中心,北京100853;3.解放軍
摘要: 使用JAVA語言及相應的軟件包,按照XKMS服務規范,建立XKMS服務模型,解決在電子病歷系統中涉及PKI系統的密鑰服務問題。
Abstract:
Key words :

摘   要: 使用JAVA語言及相應的軟件包,按照XKMS服務規范,建立XKMS服務模型,解決在電子病歷系統中涉及PKI系統的密鑰服務問題。
關鍵詞: XKMS  XML語言  公鑰體系認證PKI  電子病歷

  電子病歷是以電子化方式管理的有關個人健康狀態和醫療保健行為的信息。本文所述的電子病歷是基于可擴展標記語言XML(Extensible Markup Language1.0)技術實現的。電子病歷的安全性問題涉及完整性、非否認性、機密性等,這些問題都需要PKI系統的支持。本文將以一個簡單示例介紹XKMS(XML Key Management Specification,XML密鑰管理規范)的模型實現,實現一個請求公鑰的服務,為電子病歷XML文檔的加密和簽名提供基于公鑰體系結構PKI(Public Key Infrastructure)的XKMS服務基礎。
1  XKMS概述
  在加強Web業務的安全性方面功不可沒。但從技術層面講,它要求每個用戶和應用程序都要驗證與之通信的每個用戶的身份,以確保對方的身份真實有效。實際上PKI將所有的信任決定都拋給了用戶,這要求復雜的程序庫和配置信息。由于PKI的部署過于復雜繁瑣,成本昂貴,因此一直沒有得到普及應用。
  XML簽名規范和加密規范規定了如何簽名和加密XML文檔,這有助于執行關鍵任務的應用程序使用基于XML的Web服務。在處理數字簽名和加密文檔時要使用PKI。為方便PKI與XML應用程序以及使用這些程序的Web服務進行集成,Microsoft、Verisign和WebMethods共同發起,由W3C發布了XKMS。XKMS的目標就是解決PKI的這些問題。XKMS綜合了XML的互操作性和PKI的安全性,提供了基于PKI保密應用程序的一個簡單方法。應用程序可以簡單地將所有PKI處理程序任務委托給某個第三方信任服務,而不是由自己對復雜的PKI函數進行編碼,這樣就可以將工作重點集中在業務邏輯上。
  XKMS簡化了XML簽名和加密機制在XML應用程序中的使用。XKMS將PKI協議和數據格式替換成基于XML的協議,使用XML詞匯來表示PKI并且支持SOAP消息和WSDL,使得XKMS服務對于平臺、供應商和傳輸協議都是中立的,能夠平穩地適應Web服務的開發環境等。XKMS主要應用在客戶對客戶、應用服務器對客戶、服務器對服務器等環境中,信任的決定由一個公共的服務器完成,XKMS客戶僅需配置服務器的URI地址和服務器用來簽名答復的證書。使用不同的URI,可支持不同的信任模型。XKMS的請求/響應都是封裝在SOAP請求/響應中的。
2  XKMS內容
  XKMS由XML密鑰信息服務規范(XKISS)和XML密鑰注冊服務規范(XKRSS)組成。XKISS負責處理與XML簽名和加密相關的公鑰處理及驗證;XKRSS則用于對密鑰對進行注冊。
  XKISS服務主要支持定位服務和驗證服務二種操作。利用定位服務可以基于標識符信息來定位和檢索已經注冊的公鑰。在XML簽名環境中,<ds:KeyInfo>元素使服務可以對數字簽名進行驗證,在XML加密環境中,<ds:KeyInfo>元素則指定了用于對文檔進行加密的密鑰信息,<ds:KeyInfo>元素構成了這二大密碼學功能的基礎。定位服務能夠解析<ds:KeyInfo>元素并向客戶提供所需的公鑰信息。定位服務僅限于檢索而不能進行驗證。驗證服務能夠驗證密鑰對標識符信息的綁定和有效性狀態。
  XKRSS的目的是為了響應一個完整的、基于XML的密鑰生命周期管理協議的需求,它支持四種操作,即密鑰的注冊、重發、取消和恢復。
  XKMS目前最新的工作草案是2004年4月發布的(見http://www.w3.org/TR/2004/CR-xkms2-20040405),其中定義了具體的XKMS語法和元素。
3  實現過程
  本文示例使用JAVA語言,利用JAXM(Java API for XML Messaging)軟件包和Apache Axis 1.1工程,在Jakarta Tomcat5服務器上簡單演示XKMS中的一種LocateRequest服務。JAXM使用JAVA平臺進行XML消息通信。AXIS是Apache的一個開放源代碼項目,是基于JAVA、SOAP規范的Web服務的實現,它是目前比較出色的SOAP Web容器。Tomcat也是Apache的一個開放源代碼項目,是一個優秀的Servlet/JSP容器。
3.1 客戶端
  在客戶端程序中,按照XKMS規范格式,生成一個簡單的XKMS請求的SOAP消息,請求內容是定位一個使用者在PKI密鑰庫中的公鑰。客戶端程序如下:
public class Request {
   public static void main(String[] args) {
      try {
  SOAPConnectionFactory scFactory=SOAPConnection-Factory.newInstance( );
  SOAPConnection con=scFactory.createConnection( );
                  //創建SOAP連接
  MessageFactory factory=MessageFactory.newInstance( );
  SOAPMessage message=factory.createMessage( );
                   //創建消息
  SOAPPart soapPart=message.getSOAPPart( );//獲取SOAPPart對象
  SOAPEnvelope envelope=soapPart.getEnvelope( );
                   //獲取SOAPEnvelope對象
  SOAPBody body=envelope.getBody( );//獲取SOAPBody對象
  Name NLocate=envelope.createName(″LocateRequest″,
  ″xkms″,″http://www.w3.org/TR/CR-xkms2-20040405″);
                 //創建LocateRequest元素
  SOAPElement Locate=body.addBodyElement(NLocate);
                 //添加LocateRequest元素
    //根據XKMS格式創建XML元素及內容,代碼省略…,創建的內容結果見下面的請求信息
  URLEndpoint endpoint=new URLEndpoint(//創建
                  //URLEndpoint對象
  ″http://localhost:9999/axis/services/XKMSServices″);
  SOAPMessage response=con.call(message, endpoint);
                  //發送請求消息,接收響應消息
  con.close( );
  response.writeTo(System.out);//顯示接收到的消息
  啟用Apache AXIS 的TCPMonitor收到發送的SOAP消息,如下:

  在上面的SOAP消息中,<soapenv:Body>元素中的內容就是XKMS的請求信息,以<xkms:LocateRequest>元素為開始,請求返回一個用戶的公鑰名稱KeyName和公鑰值KeyValue。
3.2 服務器端
  服務器端由Tomcat5+AXIS1.1構成SOAP服務器,接收客戶端程序發送的消息,對消息進行解析,提取請求信息和要求返回的信息,進行處理,返回XKMS響應。服務器端應先建立PKI,這里使用Keytools工具,先建立一個用戶的RSA密鑰對,存儲在Keystore中,以便使用。
  keytool-genkey-alias mengxiang-keyalg RSA-dname ″CN=301,OU=301,O=301,L=HaiDian,S=BeiJing,C=CN″-keypass password-keystore KeyStore-storepass password-storetype JKS
服務器端接收請求消息,解析內容,檢索密鑰庫中用戶的公鑰,進行BASE64轉換,按照XKMS規范生成XKMS響應消息,返回響應消息。服務器端程序簡示代碼如下:
  public class XKMSServices {
  public Document echoElements(Document elems) {
try {
  MessageContext msgC=MessageContext.getCurrentContext( );
             //獲取MessageContext對象
  Message request=msgC.getRequestMessage( );//獲取消息
  SOAPPart sp=request.getSOAPPart( );
  SOAPEnvelope se=sp.getEnvelope( );
  SOAPBody sb=se.getBody( );
  Iterator it1=sb.getChildElements( );//遍歷元素,提取信息
  FileInputStream in=new FileInputStream(name);
               //導入Keystore
  KeyStore ks=KeyStore.getInstance(″JKS″);
  ks.load(in,pass.toCharArray());
  Certificate c=ks.getCertificate(alias);//獲取用戶數字證書
  in.close( );
  RSAPublicKey PKey=(RSAPublicKey)c.getPublicKey( );
              //獲取用戶RSA公鑰
  BigInteger BE=PKey.getPublicExponent( );//提取指數
  BigInteger BM=PKey.getModulus( );//提取模數
  byte[ ] bbe=BE.toByteArray( );
  byte[ ] bbm=BM.toByteArray( );
  sun.misc.BASE64Encoder encoder=new sun.misc.
  BASE64Encoder( );//BSAE64轉換類
  String sbe=encoder.encode(bbe);//BSAE64轉換
  String sbm=encoder.encode(bbm);
  DocumentBuilderFactory dbf=DocumentBuilderFactory.
          newInstance( );//生成響應消息
  DocumentBuilder db=dbf.newDocumentBuilder( );
  document=db.newDocument( );
  Element root=document.createElement(″xkms:LocateResult″);
  root.setAttribute(″xmlns:ds″,″http://www.w3.org/2000/09/
     xmldsig#″);
      //按照XKMS語法格式創建響應消息,代碼省略創建的內容結果見下面的響應SOAP消息
  document.appendChild(root);
  return document;//返回響應
  AXIS 的TCPMonitor接收到響應的SOAP消息,省略SOAP頭形式如下:

  在以上響應消息中,<xkms:LocateResult>元素中包含了XKMS的響應內容,其中返回了用戶的公鑰名和公鑰值。<ds:Modulus>中包含了公鑰的模數的BSAE64編碼后的值,<ds:Exponent>中包含了公鑰的指數的BSAE64編碼后的值。客戶端程序接收到響應信息后,可對其進行解析,提取出模數和指數字符串,進行反BASE64編碼,就獲得了真正的模數和指數。這樣就可以對電子病歷XML文檔進行加密處理。
4  總  結
  XKMS目前仍處于發展階段,還將會進一步修訂。實用過程中,還需開發緊密結合XKMS的API,將XKMS客戶端和服務器端的程序模塊化,實現XKISS和XKRSS中的其他服務。
參考文獻
1   Nagappan R,Skoczylas R著,龐太剛,陶程譯.JAVA Web服務開發.北京:清華大學出版社,2004
2   Galbraith B著,吳旭超,王黎譯.WEB服務安全性高級編程. 北京:清華大學出版社,2003
3   徐迎曉.JAVA安全性編程實例.北京:清華大學出版社,2003
4   Dournaee B著,周永彬,賀也平,劉娟譯.XML安全基礎.北京:清華大學出版社,2003

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 国产精品欧美韩国日本久久 | 精品国产_亚洲人成在线高清 | 亚洲精品综合在线 | 亚洲欧美日韩在线精品一区二区 | 国产日韩久久久久69影院 | 国产精品一国产精品 | 欧美成人精品 | 亚洲成a人片在线观看中文!!! | 久久久久久久国产精品影院 | 欧美在线国产 | 国产真实一区二区三区 | 亚洲黄色小视频 | 国产一级一级一级成人毛片 | 夜精品a一区二区三区 | 国产精品成人免费视频不卡 | 亚洲精品aaa | 久热草在线 | 国产精品一国产精品免费 | 色婷婷久久综合中文久久蜜桃 | 免费逼片 | 欧美成人老熟妇暴潮毛片 | 亚洲乱视频 | 成人国产在线看不卡 | www.日本高清.com | 亚洲国产精品久久久久 | 国产成人精品系列在线观看 | 香蕉视频1024 | www成人国产在线观看网站 | 日本人在线看片 | 亚洲不卡一区二区三区在线 | 国产精品成人免费观看 | 福利云 | 俄罗斯一级成人毛片 | 国产精品成人观看视频国产 | 欧美a级在线 | 久久中文字幕免费视频 | 在线观看欧洲成人免费视频 | 国产精品一区二区资源 | 亚洲一区二区中文字幕 | 一区二区三区成人 | 在线免费视频国产 |