JDK 解析 X.509证书和CRL 示例代码

软件包 java.security.cert

提供用于解析和管理证书、证书撤消列表 (CRL) 和证书路径的类和接口

 

 

以解析X.509证书为例:

 

import java.security.cert.CRLException; import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.security.cert.X509CRL; import java.security.cert.X509CRLEntry; import java.security.cert.X509Certificate; import java.security.cert.CRLException; import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.security.cert.X509CRL; import java.security.cert.X509CRLEntry; import java.security.cert.X509Certificate; view plaincopy to clipboardprint? /** * 解析证书Certificate,文件在本地,可以使用 FileInputStream fileInput = new FileInputStream("证书文件的路径"); * 将fileInput作为该方法的参数。 * 如果文件需在线下载,可以使用URL url = new URL("证书文件在线地址"); URLConnection conn = url.openConnection(); * InputStream inStream = conn.getInputStream();,将inStream作为参数。 * * @param inStream * 证书文件流 * @throws Exception */ public void parseCertByJDK(InputStream inStream)throws Exception { //证书工厂。此处指明证书的类型 CertificateFactory cf = CertificateFactory.getInstance("X.509"); // 根据传入的流类型,可以生成Cert实例,也可以生成CRL实例 X509Certificate cert = (X509Certificate) cf .generateCertificate(inStream); // X509Certificate 中提供了多个方法,用于读取证书中的各类信息。 System.out.println(cert.getSerialNumber()); } /** * 解析证书Certificate,文件在本地,可以使用 FileInputStream fileInput = new FileInputStream("证书文件的路径"); * 将fileInput作为该方法的参数。 * 如果文件需在线下载,可以使用URL url = new URL("证书文件在线地址"); URLConnection conn = url.openConnection(); * InputStream inStream = conn.getInputStream();,将inStream作为参数。 * * @param inStream * 证书文件流 * @throws Exception */ public void parseCertByJDK(InputStream inStream)throws Exception { //证书工厂。此处指明证书的类型 CertificateFactory cf = CertificateFactory.getInstance("X.509"); // 根据传入的流类型,可以生成Cert实例,也可以生成CRL实例 X509Certificate cert = (X509Certificate) cf .generateCertificate(inStream); // X509Certificate 中提供了多个方法,用于读取证书中的各类信息。 System.out.println(cert.getSerialNumber()); } view plaincopy to clipboardprint? /** * use JDK to parse CRL * * @param inStream * crl information stream * @throws IOException * @throws CertificateException * @throws CRLException */ public void parseCRLByJDK(InputStream inStream) throws IOException,CertificateException, CRLException { // 指定证书类型 CertificateFactory cf = CertificateFactory.getInstance("X.509"); // 根据CRL文件流,获得X509CRL实例 X509CRL crl = (X509CRL) cf.generateCRL(inStream); // 可以获取CRL的相关信息,比如版本、发布者等等 System.out.println(crl.getIssuerDN()); // 获取被撤销的证书的列表 Set certs = crl.getRevokedCertificates(); Iterator iterator = certs.iterator(); // 遍历被撤销的证书的列表,解析每个证书的信息 while (iterator.hasNext()) { // 被撤销的某个证书的实例 X509CRLEntry entry = (X509CRLEntry) iterator.next(); // 读取证书的相关信息 String time = new SimpleDateFormat("yyyyMMddHHmmss").format(entry .getRevocationDate()); System.out.println(entry.getSerialNumber()); System.out.println(entry.getSerialNumber().toString(16) .toUpperCase()); System.out.println(time); System.out.println(); } }

你可能感兴趣的:(jdk,exception,Stream,url,iterator,import)