所需证书吊销列表:https://pan.baidu.com/s/1gka42qZn8gsr5Y2tyZdmqw?pwd=6666

package org.example;import java.io.*;
import java.security.cert.*;
import java.text.SimpleDateFormat;
import java.util.*;public class CrlUtils {public static void main(String[] args) {List<Crl> crls = parseToList("F:\\GDCA_Guangdong_Certificate_Authority_RSA.crl", false);//List<Crl> crls = parseToList(new File("F:\\test.crl"), true);//List<Crl> crls = parseToList(str, true);crls.forEach(System.out::println);}/*** 读取 crl 文件,解析 crl* @param crlFile crl 文件* @param isBase64Decode 文件是否需要 Base64 解码* @return*/public static List<Crl> parseToList(File crlFile, boolean isBase64Decode) {List<Crl> result = new ArrayList<>();try {// 证书工厂的功能,用于从其编码生成证书,认证路径( CertPath )和证书吊销列表(CRL)对象。CertificateFactory cf = CertificateFactory.getInstance("X.509");X509CRL aCrl;if (isBase64Decode) {byte[] decodedCrl = getEncodeFile(crlFile);if (decodedCrl == null) {return result;}ByteArrayInputStream bais = new ByteArrayInputStream(decodedCrl);// 生成证书撤销列表(CRL)对象,并使用从输入流 inStream 读取的数据进行 inStream。aCrl = (X509CRL) cf.generateCRL(bais);} else {FileInputStream fis = new FileInputStream(crlFile);aCrl = (X509CRL) cf.generateCRL(fis);}// 获取此 CRL 中的所有条目。Set tSet = aCrl.getRevokedCertificates();Iterator tIterator = tSet.iterator();while (tIterator.hasNext()) {X509CRLEntry tEntry = (X509CRLEntry) tIterator.next();String sn = tEntry.getSerialNumber().toString(16).toUpperCase();String issName = aCrl.getIssuerDN().toString();String time = new SimpleDateFormat("yyyy:MM:dd:HH:mm:ss").format(tEntry.getRevocationDate());String revocationReason = tEntry.getRevocationReason() == null ? "UNSED" : tEntry.getRevocationReason().toString();Crl crl = new Crl(sn, issName, time, revocationReason);result.add(crl);}return result;} catch (Exception e) {e.printStackTrace();}return result;}/*** 从字符串中读取内容,解析 crl* @param content 字符串内容* @param isBase64Decode 是否需要 Base64 解码* @return*/public static List<Crl> parseToList(String content, boolean isBase64Decode) {List<Crl> result = new ArrayList<>();if (content.isEmpty()) {return result;}try {CertificateFactory cf = CertificateFactory.getInstance("X.509");X509CRL aCrl;ByteArrayInputStream bais;if (isBase64Decode) {byte[] decode = Base64.getDecoder().decode(content);bais = new ByteArrayInputStream(decode);}else {bais = new ByteArrayInputStream(content.getBytes());}aCrl = (X509CRL) cf.generateCRL(bais);Set tSet = aCrl.getRevokedCertificates();Iterator tIterator = tSet.iterator();while (tIterator.hasNext()) {X509CRLEntry tEntry = (X509CRLEntry) tIterator.next();String sn = tEntry.getSerialNumber().toString(16).toUpperCase();String issName = aCrl.getIssuerDN().toString();String time = new SimpleDateFormat("yyyy:MM:dd:HH:mm:ss").format(tEntry.getRevocationDate());String revocationReason = tEntry.getRevocationReason() == null ? "UNSED" : tEntry.getRevocationReason().toString();Crl crl = new Crl(sn, issName, time, revocationReason);result.add(crl);}return result;} catch (Exception e) {e.printStackTrace();}return result;}public static byte[] getEncodeFile(File file) {try {FileInputStream inputStream = new FileInputStream(file);byte[] buffer = new byte[(int) file.length()];int read = inputStream.read(buffer);inputStream.close();byte decoded[] = Base64.getDecoder().decode(buffer);return decoded;} catch (Exception e) {e.printStackTrace();}return null;}
}
package org.example;public class Crl {public String SN;public String issuerDN;public String time;public String revocationReason;public Crl(String SN, String issuerDN, String time, String revocationReason) {this.SN = SN;this.issuerDN = issuerDN;this.time = time;this.revocationReason = revocationReason;}public String getSN() {return SN;}public void setSN(String SN) {this.SN = SN;}public String getIssuerDN() {return issuerDN;}public void setIssuerDN(String issuerDN) {this.issuerDN = issuerDN;}public String getTime() {return time;}public void setTime(String time) {this.time = time;}public String getRevocationReason() {return revocationReason;}public void setRevocationReason(String revocationReason) {this.revocationReason = revocationReason;}@Overridepublic String toString() {return "Crl{" +"SN='" + SN + '\'' +", issuerDN='" + issuerDN + '\'' +", time='" + time + '\'' +", revocationReason='" + revocationReason + '\'' +'}';}
}

java 解析证书吊销列表 crl相关推荐

  1. 证书吊销列表(CRL)简单介绍与相关openssl C api功能测试

    文章目录 1 前言 2 基础知识 3 Openssl C api 4 测试代码 4.1 测试脚本 4.2 测试程序 1 前言 在近期的工作项目中涉及到了证书吊销列表(CRL)相关的一些知识,打算记录一 ...

  2. 什么是证书吊销列表(CRL)? 吊销列表起什么作用 ?

    答:证书吊销列表 (Certificate Revocation List ,简称: CRL) 是 PKI 系统中的一个结构化数据文件,该文件包含了证书颁发机构 (CA) 已经吊销的证书的序列号及其吊 ...

  3. 手动发布证书吊销列表

    什么是吊销证书及吊销列表CRL? 为帮助您维护组织公钥基础机构 (PKI) 的完整性,如果证书的受领人离开组织,或者证书受领人的私钥已泄露,或者如果其他一些与安全相关的事件规定它不再需要将证书视为&q ...

  4. openssl生成证书链多级证书、证书吊销列表(CRL)

    注:本实验在fedora 24下,openssl1.1.0 初始化 rm -rf /etc/pki/CA/*.old touch /etc/pki/CA/index.txttouch /etc/pki ...

  5. Java解析证书内容

    Java解析证书获取证书内部信息,在证书交换环节中常使用,网络上也提供很多参考方案,本文主要是提供证书base64格式解析和证书路径解析证书内容.在解析时可能会遇到一些问题,后面根据情况再具体说明. ...

  6. java 解析证书_java 读取证书类以及key tool gui 1.7

    Key Tool Gui 1.7 /** * Title: Light Weight APIs for crypto * Description: 一个上海CA证书(根证书和用户证书)进行处理的例子 ...

  7. 使用证书保护网站--兼谈证书服务器吊销列表的使用

    现在许多企业与个人,都拥有属于自己的网站,并且发布在Internet供朋友.合作伙伴或其他人所访问,但是,在许多情况下,某些发布到Internet的网站,只想让指定的用户或指定的人来访问,那么应该怎么 ...

  8. 证书介绍及openssl生成证书和吊销列表

    转自:http://www.mamicode.com/info-detail-1082882.html 一,先来讲讲基本概念. 证书分类: 按类型可以分为CA证书和用户用户证书,我们我说的root也是 ...

  9. java 对证书文件以及秘钥.key的解析

    java解析证书具有两种方式, 1.为证书的标准格式,java通过jdk进行对标准证书进行base64解密转换.解析,由于网上对于该方式的描述较多,本文不做过多描述. 2.第二种方式为java去除了开 ...

最新文章

  1. Laravel开启跨域的方法
  2. python调用dll依赖项
  3. python【蓝桥杯vip练习题库】ADV-104打水问题
  4. 单列设计模式 懒汉式及多线程debug
  5. python不同模块间传递数据_Python模块-数据传送模块
  6. Block的循环引用详解
  7. libevent: evbuffer缓冲
  8. oracle三大索引类型
  9. osgearth加载mapbox在线高程数据
  10. Codeforces Round #734 (Div. 3)_B2. Wonderful Coloring - 2(贪心)
  11. Flutter中AspectRatio、Card 卡片组件
  12. mysql cast numeric_(转载)mysql decimal、numeric数据类型
  13. 【转】ASC II 完整码表及简介
  14. http网页返回状态码含义
  15. ROC曲线和PR曲线,AP,mAP
  16. OPENMV羽毛球识别
  17. 服务办公软件金山偷换“核高基”重大软件专项课题名称,瞒天过海,欺骗大众...
  18. 教学质量分析系统 php,教学质量分析报告【三篇】
  19. 年会公众号签到,签到墙,抽奖归纳
  20. RFID智能仓储方案

热门文章

  1. twitter最多关注者_21位开放的硬件爱好者将在Twitter上关注
  2. 如何用WebView打开pdf链接
  3. 多进程编程(四):共享内存
  4. python猫狗识别课程设计_pytorch实现kaggle猫狗识别
  5. 计算机感知 计算机神经网络,神经网络计算机,neural network computer,音标,读音,翻译,英文例句,英语词典...
  6. AbstractQueuedSynchronizer(AQS)源码实现
  7. 王蓝莓主题画IP在无界售出,今日上线全新人物形象使用权!
  8. 二,iOS应用架构谈 view层的组织和调用方案
  9. 深度学习与矩阵信号分解_分解谷歌翻译背后的创新深度学习
  10. 世界这么大,我想去看看!!!