使用Java实现CA(不考虑证书链)
一. 准备
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 进行双向认证的 SSL 链接的实现方法,以及使用 OpenSSL 生产证书链的过程。双向认证是指在客户机连接服务器时,链接双方都要对彼此的数字证书进行验证,保证这是经过授权的才能够连接。 一、...
5. **证书路径验证**:Java提供了`CertPathValidator`类,用于验证证书链的完整性和有效性。这包括检查证书的签名、有效期、吊销状态等。 6. **证书吊销列表(CRL)和在线证书状态协议(OCSP)**:为了确保证书的...
USB KEY与Java CA(Java证书权威机构)相结合,可以实现更高级别的身份验证和数据加密。 Java CA是负责签发和管理数字证书的机构,其工作基于公钥基础设施(PKI)原理。Java CA为用户、服务器和其他实体提供信任...
2. **解压并导入证书**:解压缩下载的证书链文件,然后使用Java的`keytool`命令行工具将其导入到Java的`cacerts`信任库中。`keytool`是一个用于管理密钥和证书的实用程序,内置于Java Development Kit (JDK)中。 3....
这可能包括了解Java的信任存储(cacerts),它是预装的受信任证书的集合,以及如何向这个存储添加自定义CA证书,以便Java应用程序能够信任它们。 在实际应用中,理解如何处理证书链也至关重要。当一个证书是由另一...
在这个过程中,根证书(Root Agency.cer)是信任链的基础,它代表了一个权威的证书颁发机构(CA),这个CA可以验证其他证书的真实性。在本文中,我们将深入探讨如何使用Java实现这一功能,以及相关的知识点。 1. **...
7. **信任管理**:`java.security.cert.TrustManager`用于判断收到的证书是否可信,这涉及到CA的信任链。 这个项目中的源码可能涵盖了这些功能的实现,包括创建、验证数字签名,以及可能的证书生成和管理。通过学习...
1. **证书链验证**:在进行SSL/TLS连接时,服务器会提供一个证书链,包括服务器证书和一系列中间证书,最后追溯到一个根证书。Java虚拟机(JVM)会验证这个链的完整性和每个证书的签名,确保数据传输的加密和完整性...
CA证书,全称为“证书权威机构证书”,是网络安全领域中的重要组成部分,主要负责在互联网上验证数字证书的合法性。在本资源包“CA证书资源包(全版本通用)”中,包含了一个名为“cacert.der”的文件。这个文件通常...
在Java中,CA证书的开发和管理主要通过Java Cryptography Extension (JCE) 和 Java Secure Socket Extension (JSSE) 实现。JCE提供了一套强大的加密算法和密钥管理工具,而JSSE则支持安全套接字层(SSL)和传输层安全...
在这份文档中,主要介绍了Java CA(Certificate Authority)的概念及其在Java平台上的实现方法。由于文档内容的不完整性,我们将根据给出的片段,尽量整理出相关的知识点,并且确保内容通顺,字数满足要求。 ### ...
这通常涉及到验证证书链,确保它们是由可信的证书颁发机构(CA)签署的。 4. **完成握手**:双方确认所有参数,开始使用共享密钥进行加密通信。 在Java中实现TLS,主要通过`java.security.KeyStore`类来管理和加载...
2. **提取和编辑JAR**:使用解压工具(如`jar`命令行工具或第三方软件)打开`framework.jar`,找到负责证书链验证的部分,可能存在于`sun.security.provider`或`java.security`相关的类中。 3. **添加或修改代码**...
1. **准备证书**:首先,你需要从服务器获取到PEM或DER格式的公钥证书,或者更常用的PKCS12格式,包含私钥和证书链的文件。 2. **导入证书**:使用工具打开,选择相应的证书文件,输入文件的密码(如果是PKCS12格式...
首先,Java证书是用于验证网络身份的电子文件,通常包含一个公开密钥和有关证书持有者的身份信息,如组织名称、位置和证书颁发机构(CA)的签名。Java的`java.security.cert`包提供了处理和管理证书的相关类和接口,...
“证书验证”是检查证书的完整性和有效性,包括验证签名、确认证书链、检查是否过期等。Java的CertificateFactory和TrustManager接口可以用于这个过程。 综上所述,数字签名和数字证书是保障网络通信安全的关键技术...
因此,在实际部署时,应谨慎评估风险,并考虑使用受信任的CA签发的证书,或者采用更安全的解决方案,如使用LDAPS(LDAP over SSL)并正确配置证书。 在提供的压缩包中,"关键代码.java"应该包含了实现上述步骤的...
这里我们将深入探讨如何使用Java 1.7版本处理这一过程,包括处理SSL证书。 首先,理解HTTPS(超文本传输安全协议)是HTTP的安全版本,它通过SSL/TLS协议提供加密通信和服务器身份验证。在Java中,HTTPS访问涉及到`...