一. 准备
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 Cryptography Extension (JCE)库来实现这些功能。以下是对这个主题的详细阐述: 1. **公钥加密与私钥解密**:在网络安全中,非对称加密算法如RSA被广泛使用。它基于一对密钥——...
本文将深入探讨如何使用Java实现这两个字段的生成与测试。 首先,我们来看"x-ca-nonce"。这个字段通常用来防止重放攻击,它是一个随机的唯一字符串。在Java中,我们可以使用`java.security.SecureRandom`类来生成...
在Java环境中,我们可以使用JSSE(Java Secure Socket Extension)和JCA(Java Cryptography Architecture)来实现CA功能。 JSSE提供了SSL/TLS协议的支持,用于安全的网络通信,而JCA则是一套API,支持各种加密算法...
在这个领域,Java CA可能指的是使用Java来实现的条件访问系统,这通常涉及到智能卡技术,用于控制用户接收加密的电视内容。智能卡上运行的Java Card应用程序可以与服务器进行交互,进行数字签名和加密操作,确保只有...
这是软件大型实验周的课设作品,用来实现一个简单的 CA 系统,它包含以下功能: 证书生成:用户提供 Certificate Signing Request (CSR)和 公钥后,系统会自动为用户生成证书并通过邮箱发放,支持 用于 SSL 和代码...
Java实现SCEP源码详解 SCEP(Simple Certificate Enrollment Protocol)是一种基于PKI(Public Key Infrastructure,公钥基础设施)的协议,用于自动化证书请求、分发和撤销过程。在网络安全领域,SCEP协议常被用在...
实现Java SSL双向认证通常涉及以下几个步骤: 1. **生成密钥库(KeyStore)**: - 服务器端需要一个KeyStore,存储其私钥,通常使用`keytool`命令生成,例如:`keytool -genkey -alias serverkey -keystore ...
以下是一个使用Java实现HMAC-SHA256签名的示例: ```java import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.nio.charset.StandardCharsets; import java.util.Base64; public class...
标题 "TLS java简单实现" 涉及到的是在Java编程环境中使用Transport Layer Security (TLS) 协议来实现安全的网络通信。TLS是互联网上广泛使用的加密传输协议,用于确保数据在网络传输过程中的安全性和隐私性。在这个...
使用方法见:https://blog.csdn.net/upset_ming/article/details/96491058 1. 修改了前一版本中证书验证的bug,支持JDK8的高版本 2. 支持国密SSL双向认证 3. 将过期的国密证书替换为新证书
本文将深入探讨CSDN博客安全认证机制,特别关注Java实现的x-ca-nonce与x-ca-signature的生成与验证过程。这两个参数在请求中起到了关键的安全作用,它们能够确保请求的不可预测性,防止重放攻击,并通过签名验证保证...
USB KEY与Java CA(Java证书权威机构)相结合,可以实现更高级别的身份验证和数据加密。 Java CA是负责签发和管理数字证书的机构,其工作基于公钥基础设施(PKI)原理。Java CA为用户、服务器和其他实体提供信任...
Java作为广泛应用的编程语言,提供了多种库来实现PDF的电子签名功能。在这个项目中,我们主要探讨了利用iTextPDF和PDFBox两个库在Java环境下如何进行PDF电子签名的实现。 iTextPDF是一个流行的Java库,专门用于创建...
综上所述,Java实现的HTTPS请求工具类通常会封装以上步骤,提供简洁的API供其他模块调用。通过这个工具类,开发者可以轻松地发起HTTPS请求,获取服务器响应,并进行数据交互,同时确保通信过程的安全性。在实际项目...
Java 一机一密实现是安全领域中的一个重要概念,它主要应用于确保每个设备拥有独一无二的安全凭证,以增强系统的安全性。在 Java 中,我们通常通过创建和管理自签名证书来实现这一目标。以下是对 Java 实现一机一密...
本篇将深入探讨CSDN博客的安全机制,特别关注Java实现的x-ca-nonce与x-ca-signature生成过程,这对理解Web应用安全策略具有重要意义。 首先,我们需要了解什么是x-ca-nonce和x-ca-signature。在HTTP请求中,这两个...