开始使用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.xml或web.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 Loggerprivate static final Logger logger = Logger.getLogger(SimpleKMIPClient.class);public static void main(String[] args) {// configure LoggerDOMConfigurator.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 BatchKMIPContainer container = new KMIPContainer();KMIPBatch batch = new KMIPBatch();container.addBatch(batch);container.calculateBatchCount();// Set Operation and Attributebatch.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/

开始使用KMIP4J相关推荐

  1. KMIP4J数据处理流程

    Kmip1.0测试环境介绍:http://blog.csdn.net/lihuayong/article/details/25098093 1 测试环境整体结构 系统的结构是基于客户端-服务器体系结构 ...

  2. KMIP协议/TTLV格式解码

    文章目录 KMIP协议官方文档 手动解析TTLV格式 请求 响应 自动解析 解析请求和响应 KMIP协议官方文档 KMIP协议官方文档:http://docs.oasis-open.org/kmip/ ...

  3. kmip4j_KMIP4J入门

    kmip4j 有关管理数据安全性和合规性的电子书 组织难以确定多个合规性任务的优先级,并创建数据安全策略来满足这些要求并保护其最敏感的数据. 您可以下载eBook, 管理合规性并保护企业数据 ,以了解 ...

  4. KMIP1.0环境搭建

    开发环境:MyEclipse 10 JDK:jdk1.7 Tomcat:apache-tomcat-7.0.6 数据库:H2嵌入式数据库 下载java 实现的KIMP1.0版本的源码包和相关的jar包 ...

最新文章

  1. HEVC/H.265 的未来必须是使用并行处理(OpenCL?) OpenCV和OpenCL区别
  2. easyui使用ajax获取json文件,easyui 加载本地json 文件的方法
  3. VirtualBox 安装Centos 之访问虚拟机里面的服务受阻解决方案
  4. Textview的3种事件
  5. java系统系统异常处理,银行系统(Java)异常处理
  6. 发送带有接缝的活动邀请
  7. 章泽天将赴英国剑桥大学读书?证件照都是这么能打...
  8. 诡异的dp(凸多边形分割):catalan数
  9. 公司部分断电,这些人就没法干活?
  10. linux系统镜像官方下载地址
  11. 流量渠道 转化率 买家行为 处罚扣分规则 如何不被抓单,被判虚假交易对店铺的影响
  12. 【AC.HASH】OpenHarmony啃论文俱乐部——哈希技术:综述和分类(译)
  13. Django(14)-应用及分布式路由
  14. [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  15. R语言分组计算平均数、SE、SD等等
  16. SUMO学习日志(一)SUMO安装
  17. STM32 HAL库之IIC
  18. 这五件事,二次SaaS创业的老炮儿都在做
  19. 超有创意的素材模板,摸鱼的技能又提升了
  20. 与阿里云整个生态体系共同成长,更快更好的为房地产行业客户提供高价值的服务。...

热门文章

  1. 2359. 读书计划
  2. MATLAB APP 设计实践(一)UART通信(上篇)
  3. 面试问为什么跳槽,该怎么回答?
  4. gitlab集成ladp部分用户登录403
  5. (附源码)python音乐电台推荐系统的设计与实现 毕业设计 301210
  6. 5G的传输有哪些解决方案?
  7. WEB中间件————NGINX 部署与上线小游戏初步使用
  8. Android Ringtone 自定义铃声介绍
  9. 09 Python之Pandas库之数据处理与规整
  10. 一段c语言的自加程序输出xyz,c语言程序设计基础教程_习题解答2012.doc