一. 准备
1. JDK 1.6
2. 安装 BouncyCaslte 包,把jar放入ext文件夹,并在 java.security 加入 BouncyCaslte 包的 Provider
3. 概念通俗解释
Key:密钥、公钥、私钥都称为key,key有大小,比如1024bit、256bit等。
安全对象:目前有key pair--即公私钥对;key--包括密钥和单独的公钥、私钥;证书(CRT)--包括X.509 v1、X.509 v2(用于CRL,即证书撤销列表)、X.509 v3。
加密:包括对称加密和非对称加密(公私钥加密)。
对称加密:RC4、Blowfish、DES、3DES等等,一般使用key来做密钥,常用一个密码字符串来生成key,可以理解为key的代表。
非对称加密:RSA、DSA等等,也称为公私钥对加密,用公钥加密的只能用私钥解密,用私钥加密的只能用公钥解密。
消息摘要:作用是验证内容的正确性,比如MD5、SHA1、SHA256等,是对任何输入的数据都生成一定位数的值(128bit、256bit等等),是不可逆运算,并且保证1.只要输入有差异,得到的值就不同;2.输入一致就得到相同的值。
签名和验证:对内容做消息摘要后用私钥加密后的数据即签名,验证签名就是解密后得到消息摘要然后和内容计算出的消息摘要比对,符合就说明内容完整且来源明确。
公私钥对:非对称加密的公私钥对。
数字证书--解释1:公钥+信息(表明此公钥是谁的信息,有固定格式,可以扩展),然后用CA的私钥对它做签名。有些信息只有 X.509 V3版本才能填写,因为有相对V1新增的扩展域。
数字证书--解释2:是将用户(或其他实体)身份与公钥绑定的信息载体。一个合法的数字证书不仅要符合 X509 格式规范,还必须有 CA 的签名。用户不仅有自己的数字证书,还必须有对应的私钥。X509v3 数字证书主要包含的内容有:证书版本、证书序列号、签名算法、颁发者信息、有效时间、持有者信息、公钥信息、颁发者 ID、持有者 ID 和扩展项。
CA证书:用自己的私钥签名自己的公钥+自己的身份信息,生成自签名的CA证书
CA私钥:和CA证书里的公钥匹配的私钥
二. 编码
1. 编码的目的:为了把结构复杂的安全对象(如公钥、私钥、证书等)变成字节流以便存储和传递。
2. 编码和文件格式
DER
辨别编码规则(DER),可包含所有私钥、公钥和证书。它是大多数浏览器的缺省格式,并按 ASN.1 DER 格式存储,是无报头的,可以存为二进制或Base64编码。PEM 是用文本报头包围的 DER。
PEM
Openssl使用 PEM(Privacy Enhanced Mail)格式来存放各种信息,它是openssl 默认采用的信息存放方式。Openssl 中的 PEM 文件一般包含如下信息:
1. 内容类型:表明本文件存放的是什么信息内容,它的形式为“——BEGIN XXXX——”,与结尾的“——END XXXX——”对应。
2. 头信息:表明数据是如何被处理后存放,openssl 中用的最多的是加密信息,比如加密算法以及初始化向量 iv。
3. 信息体:为 BASE64 编码的数据。可以包括所有私钥(RSA 和 DSA)、公钥(RSA 和 DSA)、证书请求和 (x509) 证书。它存储用 Base64 编码的 DER 格式数据,用 ASCII 报头包围,因此适合系统之间的文本模式传输。
PFX 或 P12
公钥加密标准 #12 (PKCS#12) 可包含所有私钥、公钥和证书。其以二进制格式存储,也称为 PFX 文件,通常以p12为扩展名,Windows下可以直接运行导入到IE浏览器,一般用来导入私钥。
CER
一般指使用DER格式的证书。不过现在以cer为扩展名的文件都是PEM格式的证书文件,并且Windows下能直接导入。
KEY
一般指PEM格式的私钥文件。
JKS
Java使用的安全对象保存格式,一般称呼为密钥库,和p12一样,都能包含所有私钥、公钥和证书,只是格式不同。不过p12整个密钥库和私钥用相同密码进行保护,而JKS可以用不同密码,一般建议相同,这样和p12互相转换就比较方便了。JKS、DER、p12和PEM都是密钥库,各有特色,一般交换时都用p12和pem。
3. Windows下常用格式
Windows的IE的证书导出向导有常用的支持格式,可以导出二进制DER格式或Base64编码的证书;PEM格式的证书就是有报头的Base64编码的DER证书,一般使用cer扩展名;有私钥一般用p12。
三. 各步骤描述
1. 生成CA步骤
1) 生成一个公私钥对
2) 用私钥对身份信息和公钥签名,即生成 CA证书,同时私钥就是 CA私钥了
2. 签发证书步骤1
1) 生成一个公私钥对
2) 用CA的私钥对身份信息和公钥签名,即生成了此CA签发的证书了
3. 签发证书步骤2
1) 生成一个公私钥对
2) 用私钥对身份信息和公钥签名后生成证书请求文件(CSR),一般使用 PKCS#10 格式保存CSR
3) 提取CSR里的公钥和信息,用CA的私钥签名,即生成了此CA签发的证书了
分享到:
相关推荐
介绍了用Java和0penSsL构建一个小型cA系统的方法。
Java实现浏览器CA证书的签名和验证,提高java应用的安全
java_2868CA认证服务的方法和实现 只有你想要的就直接来下载吧
这是软件大型实验周的课设作品,用来实现一个简单的 CA 系统,它包含以下功能: 证书生成:用户提供 Certificate Signing Request (CSR)和 公钥后,系统会自动为用户生成证书并通过邮箱发放,支持 用于 SSL 和代码...
使用方法见:https://blog.csdn.net/upset_ming/article/details/96491058 1. 修改了前一版本中证书验证的bug,支持JDK8的高版本 2. 支持国密SSL双向认证 3. 将过期的国密证书替换为新证书
binpacking java 近似算法 不同策略比较 高级算法 研究生算法课程作业
java实现pdf文件电子签名,可以直接在eclipse上运行,采用itextpdf,pdfbox 两种方式实现!!!
java 国密算法实现,包含SM2 SM3 SM4和数字签名、数字证书的验证以及相应的说明文档
使用Java实现根据ca购买到的根证书 批量生产客户端需要的.bks和.cer文件,从而实现双向认证
元胞自动机 java实现,带可视化界面。需要jdk8环境打开 元胞自动机(Cellular Automaton),复数为Cellular Automata,简称CA,也有人译为细胞自动机、点格自动机、分子自动机或单元自动机)。是一时间和空间都离散的...
本文实现了OpenSSL的CA跟证书的制作、服务器和客户端证书的制作,并使用node.js实现了服务器和客户端代码,也实现了java代码,同时验证了SSL/TLS单向和双向认证。
在每次请求接口的时候都会在...简单的分析不难得出x-ca-key和x-ca-signature-headers是两固定值,x-ca-nonce是个随机串,核心就是x-ca-signature的计算,本地基于Java实现,有实测代码,有js分析,也有总结,希望能够帮到大家
元胞自动机,用java实现,非常好的东西啊。。。
使用Java开发和信息安全相关的程序.实现CA。学习利用bouncycastle提供的安全库。
基于Elgamal实现的PKI算法,实现了CA功能,利用CA进行发布密钥,并对密钥进行认证,可以进行加密。
EJB 实现 CA认证系统 RSA 加密解密 数字签名
基于Java和Python的辅助评标系统的设计与实现
(毕业设计)基于CA认证的多播系统的设计与实现Java源码+文档说明 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心...