读取cer文件信息
(1) x.509格式标准
版本号 |
---|
序列号 |
签名算法 |
颁发者 |
证书有效期 |
开始日期 |
终止日期 |
主题 |
主题公钥信息 |
公钥算法 |
主体公钥 |
颁发者唯一身份信息(可选) |
主题唯一身份信息(可选) |
扩展信息(可选) |
(2)代码片段
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.junit.Test;
/**
* 从cer证书文件中读取公钥相关信息
*
* @author ZhangqiHao
* @date 2019/7/10 9:03
*/
public class CerInfoTest {
@Test
public void getCerInfo() throws Exception {
File file = new File("C:\\Users\\ZhangqiHao\\Desktop\\server.cer");
InputStream ins = new FileInputStream(file);
//创建x.509工厂类
CertificateFactory cf = CertificateFactory.getInstance("X.509");
//创建证书实例
X509Certificate oCer = (X509Certificate) cf.generateCertificate(ins);
ins.close();
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy/MM/dd");
//证书版本
String info = String.valueOf(oCer.getVersion());
System.out.println("证书版本====" + info);
// 获得证书序列号
info = oCer.getSerialNumber().toString(16);
System.out.println("证书序列号:" + info);
// 获得证书有效期
Date beforedate = oCer.getNotBefore();
info = dateformat.format(beforedate);
System.out.println("证书生效日期:" + info);
Date afterdate = oCer.getNotAfter();
info = dateformat.format(afterdate);
System.out.println("证书失效日期:" + info);
// 获得证书主体信息
info = oCer.getSubjectDN().getName();
System.out.println("证书拥有者:" + info);
// 获得证书颁发者信息
info = oCer.getIssuerDN().getName();
System.out.println("证书颁发者:" + info);
// 获得证书签名算法名称
info = oCer.getSigAlgName();
System.out.println("证书签名算法:" + info);
//证书指纹信息
System.out.println("证书指纹信息\n" + (DigestUtils.sha1Hex(oCer.getEncoded())));
System.out.println("证书公钥信息" + oCer.getPublicKey());
}
}
(3)结果展示
对应关系图
代码解析部分来源:https://blog.csdn.net/down177/article/details/43703473