如何用Java读取使用证书

 我来答
匿名用户
推荐于2016-02-23
展开全部
证书(Certificate,也称public-key certificate)是用某种签名算法对某些内容(比如公钥)进行数字签名后得到的、可以用来当成信任关系中介的数字凭证。证书发行机构通过发行证书告知证书使用者或实体其公钥(public-key)以及其它一些辅助信息。证书在电子商务安全交易中有着广泛的应用,证书发行机构也称CA(Certificate Authority)。

应用证书

证书在公钥加密应用中的作用是保证公钥在某些可信的机构发布,其在协议SSL、电子交易协议SET等方面有重要的应用。图1显示了一个最简单的证书应用方法:

图1 证书应用方法

证书的应用步骤是:

(1) A把自己的公钥PKA送到CA(Certificate Authority);

(2) CA用自己的私钥和A的公钥生成A的证书,证书内包括CA的数字签名。签名对象包括需要在证书中说明的内容,比如A的公钥、时间戳、序列号等,为了简化这里不妨假设证书中只有三项内容:A的公钥PKA、时间戳TIME1、序列号IDA。那么CA发送给A的简单证书凭证可表达为:CertA=Eca[TIME1,IDA,PKA];

(3) B同样把自己的公钥PKB送到CA;

(4) B得到CA发布的证书CertB;

(5) A告知B证书CertA;

(6) B告知A证书CertB。

A、B各自得到对方证书后,利用从CA得到的公钥(在CA的自签证书中)验证彼此对方的证书是否有效,如果有效,那么就得到了彼此的公钥。利用对方的公钥,可以加密数据,也可以用来验证对方的数字签名。

本文为了方便说明,并没有使用从CA获得的证书,而是通信双方各自产生自签证书,也就是说图1的A和B并没有经过CA,不过前提是A和B之间是互相拥有对方的证书。
曹晓山11
推荐于2018-03-28 · 知道合伙人互联网行家
曹晓山11
知道合伙人互联网行家
采纳数:3033 获赞数:52066
毕业南阳理工学院计算机科学与技术专业,本科学位。互联网行业从业3年工作经验,读过编程类相关书籍多本。

向TA提问 私信TA
展开全部

Java为安全应用提供了丰富的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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式