package com.example.certificate;
import java.io.FileInputStream;
import java.security.cert.CertificateFactory;
import java.security.cert.X509CRL;
import java.security.cert.X509Certificate;
/**
* 验证CRL,检查证书是否被吊销
* @author S.J
* @version 1.0, 11/03/2009
*/
public class ValidateCRL{
public static void main(String[] args) throws Exception {
String packagePath = "com/example/certificate/crl/";
// 创建CRL对象
String crlPath = packagePath + "1.crl";
X509CRL crl = loadX509CRL(crlPath);
// 创建包含可用和被吊销的两个证书对象的数组
String availCertPath = packagePath + "wanghongjun.cer";
String unAvailCertPath = packagePath + "liuheng.cer";
X509Certificate[] certArray = new X509Certificate[2];
certArray[0] = getCertificate(availCertPath);
certArray[1] = getCertificate(unAvailCertPath);
// 验证证书是否被吊销
for(int i=0; i<certArray.length; i++){
System.out.println("证书序列号=" + getSerialNumber(certArray[i]));
System.out.println("证书DN=" + certArray[i].getSubjectDN());
if(crl.isRevoked(certArray[i])){
System.out.println("证书被吊销\n");
}else{
System.out.println("证书可用\n");
}
}
}
/**
* 加载CRL证书吊销列表文件
* @param crlFilePath
* @return
* @throws Exception
*/
public static X509CRL loadX509CRL(String crlFilePath) throws Exception {
FileInputStream in = new FileInputStream(crlFilePath);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509CRL crl = (X509CRL)cf.generateCRL(in);
in.close();
return crl;
}
/**
* 加载证书文件
* @param certFilePath
* @return
* @throws Exception
*/
public static X509Certificate getCertificate(String certFilePath) throws Exception {
FileInputStream in = new FileInputStream(certFilePath);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate)cf.generateCertificate(in);
return cert;
}
/**
* 读取证书序列号
* @param cert
* @return
*/
public static String getSerialNumber(X509Certificate cert) {
if(null == cert) return null;
byte [] serial = cert.getSerialNumber().toByteArray();
if(serial.length>0){
String serialNumberString = new String();
for(int i=0;i<serial.length;i++){
String s =Integer.toHexString(Byte.valueOf(serial[i]).intValue());
if(s.length()==8) s = s.substring(6);
else if(1==s.length()) s="0"+s;
serialNumberString+=s+" ";
}
return serialNumberString;
}
return null;
}
}
分享到:
相关推荐
1. **X.509证书标准**:CRL遵循X.509标准,因此解析CRL需要对X.509证书格式有深入理解,包括证书的结构、字段和编码方式。 2. **ASN.1(Abstract Syntax Notation One)**:CRL通常使用ASN.1进行编码,Java中的`...
在计算机安全领域,数字证书和...通过深入理解这些证书和CRL的知识点,我们可以更加安全和高效地进行电子身份验证和信息传输。在实际应用中,这些知识点对于确保数据传输的保密性、完整性和认证性有着至关重要的作用。
在数字证书验证中,SM3用于计算证书和证书链的哈希值,以便与证书颁发机构发布的哈希值进行比对,确认证书的有效性和未被篡改。 SM4分组密码算法则是一种对称加密算法,主要用于数据的加密和解密。它采用128位的...
在这个压缩包文件中,我们看到涉及了三种不同格式的数字证书:DER、PEM以及CRL,同时也包含了根证书和下一级证书,这些都是数字证书验证体系的关键组成部分。 1. **DER(Distinguished Encoding Rules)**:DER是一...
除了简单的有效性检查,源代码还可能包含更复杂的逻辑,如处理时区差异、检查证书链(中级CA证书和根CA证书)、以及处理证书吊销列表(CRL)或在线证书状态协议(OCSP)来确定证书是否已被撤销。 了解这些基本概念...
在IT行业中,证书吊销列表(CRL)是网络安全领域的一个关键概念,它用于验证数字证书的有效性。本文将深入探讨JAVA版证书吊销列表(CRL)解析工具的使用和重要性,以及如何通过Java编程语言处理CRL。 首先,我们...
在CA的实现中,OpenSSL提供了创建和管理证书、密钥、CRL等工具,如`openssl ca`命令行工具,可以方便地进行证书签发、撤销等操作。 "ep1kdl20.dll"可能是一个特定于环境的动态链接库文件,用于提供某些特定功能,...
这一标准在公共密钥基础设施(PKI)领域内扮演着核心角色,它不仅定义了公钥证书的基本结构,还涵盖了证书吊销清单(CRL)、属性证书以及证书路径验证算法等相关内容。 - **X.509 v1**:1988年首次发布,作为ITU X....
它提供了一套完整的证书解析、验证、撤销和链验证功能,旨在屏蔽不同第三方证书算法库的实现差异,为开发者提供统一的接口,简化证书管理相关的开发工作。 ## 项目的主要特性和功能 1. 证书解析与验证 解析X.509...
4. **证书签发**:身份验证成功后,CA会使用自己的私钥对申请者的公钥和相关信息进行数字签名,生成数字证书。这个证书包含了申请者的公钥、标识信息以及CA的数字签名。 5. **证书安装与使用**:一旦证书被签发,它...
4. 证书验证:certigo能检查证书的合法性,包括验证其签名、有效期、证书吊销列表(CRL)和在线证书状态协议(OCSP)。这对于发现即将到期的证书、无效签名或被吊销的证书至关重要。 5. 输出格式:certigo提供人性...
总之,X.509 RFC 5280标准是互联网上公钥基础设施的核心,它规定了证书和CRL的处理方式,从而在数字签名、加密解密、安全通信等场景中提供身份验证和数据保护。这个标准的严谨性和广泛采纳使得不同系统间的互操作性...
这可以通过生成新证书或使用证书撤销列表(CRL)来实现。 6. **安全实践**:测试环境中使用根证书和子证书时,应遵循最佳安全实践,例如定期更换密钥,限制私钥的访问权限,以及确保所有证书在不再使用后得到正确...
客户端在验证服务器或用户提供的数字证书时,除了检查证书本身的有效性,还会查询CRL,确保证书不在吊销列表上,以此判断证书当前是否仍然有效。这个过程有助于防止恶意用户利用已撤销的证书进行欺诈活动。 CRL的...
- **CRL验证**:定期从河北CA的LDAP服务下载黑名单CRL,更新后本地验证,性能更佳,可用性更高,但存在一定的延时。 ##### 4. LDAP与CRL发布 - **LDAP**(Lightweight Directory Access Protocol):一种轻量级的...
当用户申请数字证书时,CA会验证其身份,然后使用自己的私钥对用户的公钥和身份信息进行签名,生成数字证书。这样,任何接收到该证书的人都可以通过验证CA的公钥来确认证书的真伪,防止被伪造或篡改。\n\n非对称加密...
PKI是基于X.509证书的一套系统,它提供了一种信任机制,使得网络参与者可以通过公钥/私钥对进行安全通信。PKI的核心组件包括: - **证书颁发机构(CA)**:负责验证证书申请者的身份,并签发证书。 - **注册机构...
3. 使用证书颁发机构(如果有的话)对证书进行签名。 4. 将证书保存到本地存储,如个人证书存储区或者文件系统。 使用证书时,可以: 1. 从证书存储中加载证书。 2. 检查证书的有效性,包括日期、签名和吊销列表...
1. **加载证书**:使用`X509_load_cert_crl_file()`函数加载`.cer`文件。 2. **提取基本信息**:调用`X509_get_subject_name()`获取证书的主题,`X509_get_issuer_name()`获取发行者信息,`X509_get_notBefore()`和`...