开始使用KMIP4J

开始使用KMIP4J

        密钥管理互操作协议(KMIP)的开源实现

        KMIP定义了密钥生命周期管理系统(KLMS)和其客户之间的沟通。一些公司已经使用专有的KMIP实现,这些KMIP实现使用不同的编程语言,但是到现在为止,没有开源的解决方案存在。因此,KMIP4J这是一个使用Java代码开发的开源KMIP实现,现已在www.sourceforge.net。此文章给出了开源实现的概述。

        “加密提供了安全!”这句话可能是最大的一个根本性的误解在现代的IT安全领域。有密码学基本知识的人都知道,对安全通信来说,除了加密、消息完整性和通信伙伴的身份认证是至关重要的。但即使这些概念结合,如果用于加密的密钥不小心处理,它们也是一文不值。安全关系到从数据保护到密钥管理(密钥的创建、存储、更新和分发任务)的整个过程。

KMIP解决的问题

        一些最大的和最著名的IT公司组成了一个OASIS工作组,负责创建一个新的协议,KMIP一种协议可以被视为一种语言,它定义了事件的顺序,消息的内容,和它的编码。KMIP符合一个密钥管理系统和客户之间的沟通要求。

        今天,大公司通常有各种密钥生命周期管理系统(KLMS),每个都有自己的通信协议(见图1,左侧)KMIP采用不同的方法和合并所有的对象和操作方法到一个单独的协议中,使一个集中KLMS成为可能(见图1,右侧)使用一个协议的集中KLMS减少了操作和基础设施的成本,并且提供了一个一致的安全策略的实施。此外,在同一个应用程序中,所有的加密对象被同等地管理。

 

        一些公司已经使用专有实现的KMIP,用不同的编程语言,但是直到现在,不存在开放源代码解决方案。因此,我们决定写和发布KMIP的一个开源实现,这将允许协议扩展在不久的将来。

实现如何工作

        我们的系统的结构是基于客户机-服务器体系结构(见图2)。水平虚线显示了KMIP库和测试环境的边界。实现的测试环境由一个客户端和服务器端组成。客户端提供一个GUI程序,服务器端是一个简化KLMS和一个固有适配器。适配器允许将KMIP适应任何现有的或新的KLMS

 

        客户端GUI(client GUI)(参见图3)允许你选择并运行指定用例的请求。使用一个XML文件,您可以创建任何其他要求,比如创建请求一个128位长的对称密钥用于AES加密。此信息被转发到stub封装成一个KMIP容器,该容器使用KMIP指定对象,属性和操作填充。

        编码器(encoder)的任务是处理容器(container)中的信息和生成Tag-Type-Length-Value(TTLV)编码信息,根据KMIP规范(见图4)。解码器是编码器的配对,它将TTLV编码响应转换成容器。

        几个关键类实现一个接口,可以换成其他类通过改变配置文件(StubConfig.xmlweb.xml)。 在下次启动,请求的类被动态加载。这种方法使软件非常的灵活,很容易配置。通信层就是一个可替换类的一个例子,可以通过修改配置,将通信层改为其他的通信方式。默认情况下,客户端和服务器之间建立一个SSL/TLS连接。测试用例中,通过改变配置文件中的通信层配置,客户端和服务器之间也可以建立一个http连接

        在服务器端,一个web用服务器配上一个servlet,负责通信和消息的转发。解码消息后,适配器的任务是翻译KMIP成为KLMS可以理解的格式。想使用KMIP与现有KLMS系统的用户必须实现这个功能。所实现的测试环境的KLMS有4架构,一个接口层、服务层、管理器层和数据层。然而,目前该系统只支持KMIP1.0用例中指定的操作。

KMIP4J开源实现

        KMIP4J是KMIP 1.0规范的实施。在该过程中,OASIS发布了KMIP1.1版本,KMIP1.1没有集成到工作进展中。由于软件的灵活性和可扩展性,1.1版本可以实现。

        OASIS官方KMIP页面(参见参考资料)提供更多协议的规范。另一重要文件“KMIP V1.0的用例”。这些用例包括典型的KMIP通信请求-响应场景。文档包括每个消息的参数和TTLV编码结果。所有用例已经成功地测试在测试环境。

        下面的部分解释了如何使用KMIP4J实现一个简单的KMIP客户端。

实现KMIP客户端

        这个例子显示了一个非常简单的KMIP客户端。它使用KMIP4J库来创建一个请求到KLMS这个SimpleKMIPClient 的主要功能是配置一个记录器,创建一个KMIPStub,调用createKMIPRequest(参见清单1)。这个函数创建KMIP对象和属性,为一个“create key”操作,并将它们放置到一个KMIPcontainer容器中。 这个请求,KLMS被要求创建一个128位的对称密钥用于AES算法加密和解密。函数调用stub.processRequest(request)的结果在一个容器中,这个结果包含服务器响应的KMIP对象和属性。

        清单1.简单的KMIP客户端

import java.util.ArrayList;
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;
import ch.ntb.inf.kmip.attributes.*;
import ch.ntb.inf.kmip.container.*;
import ch.ntb.inf.kmip.kmipenum.*;
import ch.ntb.inf.kmip.objects.base.*;
import ch.ntb.inf.kmip.stub.KMIPStub;

public class SimpleKMIPClient {

	// initialize Logger
	private static final Logger logger = Logger.getLogger(SimpleKMIPClient.class);

	public static void main(String[] args) {
		// configure Logger
		DOMConfigurator.configureAndWatch( "config/log4j-1.2.17.xml", 60*1000 );

		KMIPStub stub = new KMIPStub();
		KMIPContainer request = createKMIPRequest();
		KMIPContainer response = stub.processRequest(request);
		System.out.println(response.toString());
	}

	private static KMIPContainer createKMIPRequest() {
		// Create Container with one Batch
		KMIPContainer container = new KMIPContainer();
		KMIPBatch batch = new KMIPBatch();
		container.addBatch(batch);
		container.calculateBatchCount();

		// Set Operation and Attribute
		batch.setOperation(EnumOperation.Create);
		batch.addAttribute(new ObjectType(EnumObjectType.SymmetricKey));

		// Set TemplateAttribute with Attributes 
		ArrayList<Attribute> templateAttributes = new ArrayList<Attribute>();
		templateAttributes.add(new 
CryptographicAlgorithm(EnumCryptographicAlgorithm.AES));
		templateAttributes.add(new CryptographicLength(128));
		templateAttributes.add(new CryptographicUsageMask(0x0C));
		TemplateAttributeStructure tas = new TemplateAttribute();
		tas.setAttributes(templateAttributes);
		batch.addTemplateAttributeStructure(tas);
	
		return container;
	}
}

        我们自己的服务器运行时,SimpleKMIPClient产生以下输出(参见图5)

        为了配置这个项目。 kmip4j.jar库需要添加到构建路径。此外,StubConfig.xml配置文件和log4j-1.2.17.xml必须添加,如图6所示。一个Eclipse项目和所有必要的文件可以在参考资料中找到。

        此外,如果你想使用HTTPS通信,您需要一个带有证书的Java密钥库文件。密钥库文件的路径必须在StubConfig.xml文件中指定。

        这个例子展示了客户端如何创建一个基本的KMIP请求到KLMS,使用我们的开源KMIP4J实现。这将是一个好的起点对于大多数客户。

结论

        KMIP定义了密钥生命周期管理系统和客户之间的沟通。与旧系统相比有很多不兼容的协议,一个集中的KLMS搭配KMIP减少操作和基础设施成本并且提供一致的安全策略的实施。使用KMIP是非常重要的一步对于更好的组织和加密对象更一致的管理。



源码下载:http://sourceforge.net/p/kmip4j/wiki/Home/

测试用例:http://interop.cryptsoft.com/kmip_uc/

原文:http://www.ibm.com/developerworks/library/se-kmip4j/

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值