java 解析证书_如何用Java读取使用证书

该博客介绍了如何使用Java的JSSE库来读取和解析X.509证书,包括获取证书的类型、版本、主题DN、有效期、序列号等关键信息。
摘要由CSDN通过智能技术生成

展开全部

Java为安全应用提32313133353236313431303231363533e58685e5aeb931333337396335供了丰富的API,J2SDK1.4 的JSSE (JavaTM Secure Socket Extension) 包括javax.security.certificate包,并且提供对证书的操作方法,代码如下:import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import javax.swing.table.*;

import java.security.cert.CertificateFactory;

import java.security.cert.X509Certificate;

import java.io.*;

public class CARead extends JPanel {

private String CA_Name;

private String CA_ItemData[][] = new String[9][2];

private String[] columnNames = {"证书字段标记","内容" };

public CARead(String CertName) {

CA_Name=CertName;

/* 三个Panel用来显示证书内容*/

JTabbedPane tabbedPane = new JTabbedPane();

JPanel panelNormal = new JPanel();

tabbedPane.addTab("普通信息", panelNormal);

JPanel panelAll=new JPanel();

panelAll.setLayout(new BorderLayout());

tabbedPane.addTab("所有信息",panelAll);

JPanel panelBase64=new JPanel();

panelBase64.setLayout(new BorderLayout());

tabbedPane.addTab("Base64编码信息",panelBase64);

/* 读取证书常规信息 */

Read_Normal(panelNormal);

/* 读取证书文件字符串表示内容 */

Read_Bin(panelAll);

/* 读取证原始Base64编码形式的证书文件 */

Read_Raw(panelBase64);

tabbedPane.setSelectedIndex(0);

setLayout(new GridLayout(1, 1));

add(tabbedPane);

}

}

定义证书信息的读取函数如下:private int Read_Normal(JPanel panel){

String Field;

try{

CertificateFactory certificate_factory=CertificateFactory.getInstance("X.509");

FileInputStream file_inputstream=new FileInputStream(CA_Name);

X509Certificate

x509certificate=(X509Certificate)certificate_factory.generateCertificate

(file_inputstream);

Field=x509certificate.getType();

CA_ItemData[0][0]="类型";

CA_ItemData[0][1]=Field;

Field=Integer.toString(x509certificate.getVersion());

CA_ItemData[1][0]="版本";

CA_ItemData[1][1]=Field;

Field=x509certificate.getSubjectDN().getName();

CA_ItemData[2][0]="标题";

CA_ItemData[2][1]=Field;

/* 以下类似,这里省略

Field=x509certificate.getNotBefore().toString();得到开始有效日期

Field=x509certificate. getNotAfter().toString();得到截止日期

Field=x509certificate.getSerialNumber().toString(16);得到序列号

Field=x509certificate.getIssuerDN().getName();得到发行者名

Field=x509certificate.getSigAlgName();得到签名算法

Field=x509certificate.getPublicKey().getAlgorithm();得到公钥算法 */

file_inputstream.close();

final JTable table = new JTable(CA_ItemData, columnNames);

TableColumn tc=null;

tc = table.getColumnModel().getColumn(1);

tc.setPreferredWidth(600);

panel.add(table);

}catch(Exception exception){

exception.printStackTrace();

return -1;

}

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值