以下为网络转载,如有侵权请告知以便改正。
JKS
JCEKS
PKCS12
BKS
UBER
转一篇文章:
http://hi.baidu.com/beyond456/blog/item/a3a009d7479b44d9a044df32.html
密钥:
我理解是公钥+私钥的统称。
密钥对:
公钥(证书)和私钥成对存在。
通信双方各持有自己的私钥和对方的公钥。自己的私钥需密切保护,而公钥是公开给对方的。在windows下,单独存在的公钥一般是后缀为.cer的文件
A用自己的私钥对数据加密,发给B,B用A提供的公钥解密。同理B用自己的私钥对数据加密,发送给A后,A用B的公钥解开。
公钥的两个用途:
1。验证对方身份:防止其他人假冒对方发送数据给你。
2。解密。
私钥的两个用途:
1。表明自己身份:除非第三方有你私钥,否则无法假冒你发送数据数据给对方。
2。加密。
jks(java key store):
java用的存储密钥的容器。可以同时容纳n个公钥或私钥,后缀一般是.jks或者.keystore或.truststore等,千奇百怪。
不管什么后缀,它就是一个容器,各个公司或机构叫法不同而已。比如把只包含"受信任的公钥"的容器存成.truststore文件等。
用jdk\bin目录下的keytool.exe对其进行查看,导入,导出,删除,修改密码等各种操作。
可以对jks容器加密码,输入正确才可以操作此容器中密钥。
还有一个密码的概念与上者不同,是jks中存储着的私钥的密码,通常是绝密的。
pfx:
和jks功能相同但文件格式不同,pfx是浏览器用的。
可以用一些工具程序把pfx转化成jks格式供java程序使用(如银行只提供了pfx,但是我们想用httpclient模拟浏览器自动访问时)。
据说IE导出的pfx格式不标准,转化jks时往往报错,可以尝试用Netscape Navigator导入再导出,然后再转化。碰到过这样的情况。
常见的几种https系统的访问
经https协议的数据经过加密传输,防止第三方监听,冒充和篡改。
1.不需要用户做任何操作,比如https://www.verisign.com/
这是因为此公钥是合法的(公钥是可信任的机构颁发,和实际域名吻合,而且没有到期)。用IE访问时空白处点右键可以查看公钥信息。
2.https的页面会弹出公钥确认提示
公钥不合法(不是可信任的机构颁发,和实际域名不吻合,已到期),但用户点“是”即表示忽略危险,继续访问。
3.需要往浏览器倒入一个文件才可访问的
一般是银行在线交易等特别需要安全的场合,站方(银行)需要验证访客身份(如要确认必须是已注册的网银商户),需要在浏览器中导入含有访客私钥的pfx文件。
生成jks:
在银行没有提供jks文件的情况下对帐,需要自己生成jks
对于1,2类https网站,如果java程序访问此地址时在jre默认的信任库中找不到对方证书的颁发机构,则会抛出安全方面的异常。
所以要将站方公钥存进一个jks,并在环境变量中设定,表明信任此库中的公钥,才可以正常访问。
我是用现成的make_jks的工具类在程序中读取https://xxxx地址,程序自动抓取出银行公钥并存进一个jks文件。
在浏览器中查看站方公钥时,把公钥导出(一般是cer后缀),然后用keytool.exe手工将此cer导入一个jks或许也可以?没试过。
以上1,2类https网站,仅仅是用到了公钥的“验证对方身份”功能。
对于第3种https网站,也可以找到现成的程序把pfx直接转成jks。
既然动用了pfx,一般是把公钥的两个用途和私钥的两个用途都用起来。
--------------------
2008-03-20
jiweidong
----------------------------------------------------------------------------------------------------------
JCEKS
Java Cryptographic Extension Keystore(JCEKS)是USS基于文件的java密钥库,所有运行EKM的平台都支持JCEKS。这个密钥库使用密码保护和TDES(Triple Data Encryption Standard)加密。JCEKS的传递和共享方法有很多,包括FTP和E-MAIL方式。公/私钥可以从JCEKS密钥库中导出,导出的密钥可以导入到JCEKS或者RACF 密钥环、JCE4758KS、JCECCAKS密钥库。
可以使用IKeyman和Java keytool的命令来操作JCEKS密钥库。
----------------------------------------------------------------------------------------------------------
PKCS11
IBMPKCS11Impl provider 使用JCE和JCA架构,按照公钥加密标准#11(PKCS#11),增加了硬件加密特性。这套provider利用JCE架构已有的硬件加密特性,通过对已有的JAVA应用做小小的改变,就给JAVA2编程者提供了卓越的安全性和硬件加密的性能。
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文件。
第一种方法是使用IE将pfx证书导入,再导出为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转换一下:
1)openssl pkcs12 -in mycerts.pfx -out mycerts.pem
2)openssl pkcs12 -export -in mycerts.pem -out mykeystore.p12
通过keytool的-list命令可检查下密钥仓库中的内容:
keytool -rfc -list -keystore mykeystore.p12 -storetype pkcs12
这里需要指明仓库类型为pkcs12,因为缺省的类型为jks。这样此密钥仓库就即包含证书信息也包含私钥信息。
P7B格式证书导入:
keytool无法直接导入p7b文件。
将这两个证书导入到可信任的密钥仓库中。
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。
分享到:
相关推荐
在提供的"java加密狗读取例子"中,我们可以预见到以下关键知识点: 1. **设备识别**:首先,程序需要检测并识别出连接的ET199加密狗。这通常涉及到枚举USB设备,并通过设备的Vendor ID和Product ID来匹配目标加密狗...
下面我们将详细探讨Java加密的相关知识点以及可能在JCT中涉及的技术。 1. **对称加密**:这是最常见的加密方式,使用同一密钥进行加密和解密。常见的对称加密算法有DES(Data Encryption Standard)、3DES(Triple ...
《JAVA加密和解密的艺术(第二版)》是一本深入探讨Java平台上的加密与解密技术的专业书籍。这本书不仅提供了理论知识,还包含了丰富的实践示例,帮助读者理解和掌握加密技术在实际应用中的运用。其内容涵盖了从基本...
java加密和解密的方法,利用指定的密钥,可逆的。密钥必须16位。
全书包含3个部分,基础篇对Java企业级应用的安全知识、密码学核心知识、与Java加密相关的API和通过权限文件加强系统安全方面的知识进行了全面的介绍;实践篇不仅对电子邮件传输算法、消息摘要算法、对称加密算法、非...
Java加密算法是信息安全领域的重要组成部分,它用于保护数据的隐私性和完整性。在Java中,有多种加密算法可供选择,如AES、DES和RSA,每种都有其特定的应用场景和优势。下面将详细介绍这些算法以及相关的学习要点。 ...
源代码整理部分,`javaSrc175.zip`可能包含了与书中各个章节对应的示例代码,这些代码可以帮助读者更直观地理解和实现上述加密解密技术。下载并解压后,按照`下载及使用说明.txt`的指示,可以浏览和运行代码,加深对...
接下来,我们将详细介绍Java加密解密的相关知识点。 1. **加密算法** - **对称加密**:如DES(Data Encryption Standard)、3DES(Triple DES)、AES(Advanced Encryption Standard)等,其中AES是目前最常用的...
在"research_encrypt-code"这个压缩包中,很可能包含了Java实现同态加密算法的源代码,包括密钥管理、加密、解密和操作加密数据的函数。通过研究这些代码,我们可以深入了解如何在实际应用中利用Java来构建安全的...
全书包含3个部分,基础篇对Java企业级应用的安全知识、密码学核心知识、与Java加密相关的API和通过权限文件加强系统安全方面的知识进行了全面的介绍;实践篇不仅对电子邮件传输算法、消息摘要算法、对称加密算法、非...
这个"Java加密解密工具集+JCT+v1源码整理"可能包含了一个名为JCT(Java Cryptography Toolkit)的工具包,这是一个专门用于加密和解密的Java库。V1表示这是该工具包的第一个版本。源码整理意味着开发者可以深入理解...
### Java加密网址分享知识点概述 #### 一、Java加密技术概览 在互联网时代,数据安全变得尤为重要。Java作为一种广泛使用的编程语言,在处理敏感信息时提供了多种加密手段。本篇文章将探讨如何使用Java进行网址...
本文将深入探讨如何使用Java实现这一功能,同时也会提及与ActionScript 3(AS3)进行加密解密的相关知识。 首先,我们要了解Java中的ZipOutputStream和ZipInputStream类,它们是Java标准库提供的用于创建和读取ZIP...
Java加密算法是信息安全领域的重要组成部分,它涉及到数据的保护、隐私的维护以及网络通信的安全。在Java中,我们可以使用多种加密技术来实现数据的加密和解密,包括对称加密、非对称加密以及数字签名等。下面将详细...
Java加密程序源代码是关于使用Java编程语言进行数据加密和解密的技术实现。在Java中,我们可以使用多种方法来实现加密,这些方法通常基于标准的加密算法,如对称加密和非对称加密。对称加密算法如DES(Data ...
, 全书包含3个部分,基础篇对Java企业级应用的安全知识、密码学核心知识、与Java加密相关的API和通过权限文件加强系统安全方面的知识进行了全面的介绍;实践篇不仅对电子邮件传输算法、消息摘要算法、对称加密算法、...
本资料包“加密典型代码(java)”旨在帮助开发者学习如何在Java环境中编写加密程序,包括有密钥和无密钥(也称为对称加密和非对称加密)两种主要的加密方式。 对称加密是基于相同的密钥进行数据加密和解密的方法,...
《Java加密与解密的艺术(第2版)》由梁栋著,以Java中的加密API和加密算法为切入点,全面介绍了Java SE 7的特性,及其中与安全相关的各种API,详细讲解了各种流行的加密算法及其在实际中的应用,为Java开发工程师和...
Java加密解密工具是开发过程中不可或缺的部分,尤其是在处理敏感数据时,确保数据的安全性至关重要。在Java中,我们可以使用各种库和内置API来实现加密和解密操作。本篇文章将深入探讨Java加密解密的核心概念、常用...