技术开发 频道

XML 密钥管理规范(XKMS)

    接下来,我将演示如何定位一个已经注册到服务提供程序的密钥。(用于定位密钥的清单2中所演示的机制使用了这个密钥名。在清单2的后面我将更详细地加以解释。)

    清单2. 定位密钥

    // The key name that you got from the XKMSRegisterResponse
    // Object
    String keyNameToLocate = 
    "http://xkms.verisign.com/key?company=VeriSign&department=XKMS Test&"+
    "CN=MANISH VERMA6&issuer_serial=73efeeea87e159e6d7fc790ef01c6fe7"; 
    // An array of response strings to indicate what key
    // information is requested
    String[] xkmsResponse =   
    {XKMSLocate.KeyName,XKMSLocate.KeyValue,XKMSLocate.X509Cert,XKMSLocate.X509Chain };
    XKMSLocateResponse locateResponse = null;
    XKMSLocate xkmsLocate = new XKMSLocate(keyName,xkmsResponse); 
    String serviceurl = "http://interop-xkms.verisign.com/xkms/Acceptor.nano"; 
    URL url = null; 
    url = new URL(serviceurl);
    XmlTransportSOAP transport = new XmlTransportSOAP(url);
    locateResponse = xkmsLocate.sendRequest(transport);
    List keyInfoList = locateResponse.getXKMSKeyInfos();
    Iterator itr = keyInfoList.iterator();
    XKMSKeyInfo xkmsKeyInfo = null;
    while (itr.hasNext()){
    xkmsKeyInfo = (XKMSKeyInfo)itr.next();
    }
 
    步骤1:为了定位一个密钥,您可以使用以下任何信息进行查询:

    ·密钥名(这应该是先前在一个XKMSRegisterResponse对象中返回的密钥名)。注册时与XKMSKeyData一起使用的那个密钥名这里不能使用。 

    ·公钥值。 

    ·X.509证书。

    在清单2中,我使用密钥名来查询密钥。

    步骤2:指定一个响应字符串数组,这些字符串的值都是我们感兴趣的。

    步骤3: 用密钥名和响应字符串数组创建XKMSLocate对象。

    步骤4: 创建一个XmlTransportSOAP对象。提供运行注册服务时所在的URL作为输入。

    步骤5: 使用sendRequest方法发送请求给XKMSLocate对象,将XmlTransportSoap实例传递给该方法。

    步骤6: 获取XKMSLocateResponse对象。从这个对象中,您可以获得一个XKMSKeyInfo对象列表。迭代这些对象,以获得与响应字符串对应的信息。

    XKMS服务本身的安全性

    您还没完全了解XKMS。您还应该了解一些事情,然后才可以把文档和应用程序的安全性托付给XKMS服务。在这一节中我大致谈到的问题与所有基于Web的服务有关,但是应该确保XKMS可靠和可用,这一点很重要。

    ·防止重复攻击(replay attack):确保XKMS服务为某请求发送的回复不被未经授权的第三方捕获到。这个捕获到的响应可以被第三方作为对其他请求的响应再次发送,并假装它就是XKMS服务本身。您可以通过各种标准方式来处理这种情况,例如给响应加时间戳。 
    ·防止服务的抵赖攻击(denial of service attack):使用XKMS来获取密钥信息比较有用,前提是XKMS在需要的时候可用,并且这一过程能在合理的时间内完成。实现服务时,必须使其能够承受服务的抵赖攻击,从而保持高度可用。 
    ·验证一个良好的、健壮的密钥恢复策略:确保XKMS服务提供程序具有一个良好的、健壮的密钥恢复策略,因为这直接影响着签名文档的否认和加密文档的可靠性。

    结束语

    通常,好的技术之所以不能坚持到底,是因为它们使用起来过于笨重。在这种情况下,只有一小撮忠实的开发人员会继续使用这种技术,而一般的IT部门不再采纳这种技术。PKI问世已经有多年了,但是它还没有走进一般的IT部门。现在,XKMS为使用PKI和将PKI与应用程序集成提供了一种容易的机制。在本文中,我解释了在各种PKI解决方案上使用一个XKMS抽象层的目的,并演示了使用XKMS服务来注册和定位密钥是多么的容易。在我的下一篇文章中,我将重点解释如何通过SAML使这种信任可移植。

0
相关文章