文档章节

不同格式证书导入keystore方法

xiaoxin
 xiaoxin
发布于 2014/01/26 13:51
字数 1322
阅读 343
收藏 6

Java 自带的  keytool   工具 是个密钥和证书管理工具。它使用户能够管理自己的公钥 / 私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户 / 服务认证自己)或数据完整性以及认证服务。它还允许用户储存他们的通信对等者的公钥(以证书形式)。  

 keytool     将密钥和证书储存在一个所谓的  密钥仓库(   keystore     中。缺省的密钥仓库实现将密钥仓库实现为一个文件。它用口令来保护私钥。

 Java KeyStore    的类型  

 JKS    和    JCEKS    是    Java    密钥库    (KeyStore)    的两种比较常见类型    (    我所知道的共有    5    种,    JKS, JCEKS, PKCS12, BKS    ,    UBER)    。  

 JKS    的    Provider    是    SUN    ,在每个版本的    JDK    中都有,    JCEKS    的    Provider    是    SUNJCE    ,    1.4    后我们都能够直接使用它。  

 JCEKS    在安全级别上要比    JKS    强,使用的    Provider    是    JCEKS(    推荐    )    ,尤其在保护    KeyStore    中的私钥上(使用    TripleDes    )。  

 PKCS#12    是公钥加密标准,它规定了可包含所有私钥、公钥和证书。其以二进制格式存储,也称为    PFX    文件,在    windows    中可以直接导入到密钥区,注意,    PKCS#12    的密钥库保护密码同时也用于保护    Key    。  

 BKS    来自    BouncyCastle Provider    ,它使用的也是    TripleDES    来保护密钥库中的    Key    ,它能够防止证书库被不小心修改(    Keystore    的    keyentry    改掉    1    个    bit    都会产生错误),    BKS    能够跟    JKS    互操作,读者可以用    Keytool    去    TryTry    。  

 UBER    比较特别,当密码是通过命令行提供的时候,它只能跟    keytool    交互。整个    keystore    是通过    PBE/SHA1/Twofish    加密,因此    keystore    能够防止被误改、察看以及校验。以前,    Sun JDK(    提供者为    SUN)    允许你在不提供密码的情况下直接加载一个    Keystore    ,类似    cacerts    ,    UBER    不允许这种情况。  

 

证书导入

Der/Cer证书导入:

要从某个文件中导入某个证书,使用keytool工具的-import命令:

keytool -import -file mycert.der -keystore mykeystore.jks

如果在 -keystore选项中指定了一个并不存在的密钥仓库,则该密钥仓库将被创建。

如果不指定 -keystore选项,则缺省密钥仓库将是宿主目录中名为 .keystore的文件。如果该文件并不存在,则它将被创建。

创建密钥仓库时会要求输入访问口令,以后需要使用此口令来访问。可使用-list命令来查看密钥仓库里的内容:

keytool -list -rfc -keystore mykeystore.jks


P12格式证书导入:

keytool无法直接导入PKCS12文件。

第一种方法是使用IEpfx证书导入,再导出为cert格式文件。使用上面介绍的方法将其导入到密钥仓库中。这样的话仓库里面只包含了证书信息,没有私钥内容。

第二种方法是将pfx文件导入到IE浏览器中,再导出为pfx文件。
       新生成的
pfx不能被导入到keystore中,报错:keytool错误: java.lang.Exception: 所输入的不是一个 X.509 认证。新生成的pfx文件可以被当作keystore使用。但会报个错误as unknown attr1.3.6.1.4.1.311.17.1,查了下资料,IE导出的就会这样,使用Netscape就不会有这个错误.

三种方法是将pfx文件当作一个keystore使用。但是通过微软的证书管理控制台生成的pfx文件不能直接使用。keytool不认此格式,报keytool错误: java.io.IOException: failed to decrypt safe contents entry。需要通过OpenSSL转换一下:

1openssl pkcs12 -in mycerts.pfx -out mycerts.pem

2openssl pkcs12 -export -in mycerts.pem -out mykeystore.p12

通过keytool-list命令可检查下密钥仓库中的内容:

keytool -rfc -list -keystore mykeystore.p12 -storetype pkcs12

这里需要指明仓库类型为pkcs12,因为缺省的类型为jks。这样此密钥仓库就即包含证书信息也包含私钥信息。

P7B格式证书导入:

keytool无法直接导入p7b文件。

需要将证书链RootServer.p7b(包含根证书)导出为rootca.cer和子rootcaserver.cer

将这两个证书导入到可信任的密钥仓库中。

keytool -import -alias rootca -trustcacerts -file rootca.cer -keystore testkeytrust.jks

遇到是否信任该证书提示时,输入y

keytool -import -alias rootcaserver -trustcacerts -file rootcaserver.cer -keystore testkeytrust.jks


总结:

1)P12格式的证书是不能使用keytool工具导入到keystore中的

2)The Sun's PKCS12 Keystore对从IE和其他的windows程序生成的pfx格式的证书支持不太好.

3)P7B证书链不能直接导入到keystore,需要将里面的证书导出成cer格式,再分别导入到keystore


本文转载自:http://www.blogjava.net/lihao336/archive/2012/02/03/369303.html

xiaoxin
粉丝 21
博文 270
码字总数 20640
作品 0
海淀
私信 提问
java keytool支持的类型及如何将证书导入jks中

简介 Java自带的keytool工具是个密钥和证书管理工具。它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务...

苏叶晚晚
2013/09/25
7.1K
0
tomcat实现SSL配置(详细版)

Tomcat双向认证的问题这么多,贴一篇我总结的Tomcat双向认证方法 tomcat实现SSL配置 tomcat实现SSL配置 编辑tomcat的配置文件server.xml,去掉下面SSL Connector的注释,修改为如下: <!-- D...

被风遗忘
2012/03/16
673
0
(原创)tomcat实现SSL配置!

Tomcat双向认证的问题这么多,贴一篇我总结的Tomcat双向认证方法 tomcat实现SSL配置 tomcat实现SSL配置 编辑tomcat的配置文件server.xml,去掉下面SSL Connector的注释,修改为如下: ; port...

JavaGG
2009/05/06
1K
0
Android版Https客户端与服务端的双向证书实现

最近开发的时候遇到Https协议的问题 因为项目用的是Volley来进行http请求,但是使用Volley之后,发现他并不支持Https请求。 查看源码: 从源码中我们可以看出来执行网络请求的关键类Httpsta...

yizhihaohut
2015/10/16
9.4K
0
java keytool证书工具使用小结

Keytool 是一个Java数据证书的管理工具 ,Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里,包含两种数据:密钥实体(Key entity)-密钥(secret key)或...

yzp531
2013/04/19
133
0

没有更多内容

加载失败,请刷新页面

加载更多

CSS盒子模型

一、什么叫框模型 页面元素皆为框(盒子) 定义了元素框处理元素内容,内边距,外边距以及边框的计算方式 二、外边距 围绕在元素边框外的空白距离(元素与元素之间的距离) 语法:margin,定...

wytao1995
今天
4
0
Replugin借助“UI进程”来快速释放Dex

public static boolean preload(PluginInfo pi) { if (pi == null) { return false; } // 借助“UI进程”来快速释放Dex(见PluginFastInstallProviderProxy的说明) return PluginFastInsta......

Gemini-Lin
今天
4
0
Hibernate 5 的模块/包(modules/artifacts)

Hibernate 的功能被拆分成一系列的模块/包(modules/artifacts),其目的是为了对依赖进行独立(模块化)。 模块名称 说明 hibernate-core 这个是 Hibernate 的主要(main (core))模块。定义...

honeymoose
今天
4
0
精华帖

第一章 jQuery简介 jQuery是一个JavaScript库 jQuery具备简洁的语法和跨平台的兼容性 简化了JavaScript的操作。 在页面中引入jQuery jQuery是一个JavaScript脚本库,不需要特别的安装,只需要...

流川偑
今天
7
0
语音对话英语翻译在线翻译成中文哪个方法好用

想要进行将中文翻译成英文,或者将英文翻译成中文的操作,其实有一个非常简单的工具就能够帮助完成将语音进行翻译转换的软件。 在应用市场或者百度手机助手等各大应用渠道里面就能够找到一款...

401恶户
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部