java 数字证书信息的获取实例-java学习笔记(2)
2010-02-08 11:22
676 查看
用java提供的api实现从证书文件(本实例实验对象为*.cer文件)中获取有效信息的方法..
以上..下一步是要学习下如何创建.存储证书以及密钥的管理等...
public static X509Certificate getCert(String fileName) throws Exception {//从一个有效的证书文件来创建证书.. InputStream inStream = new FileInputStream(fileName); CertificateFactory cf = CertificateFactory.getInstance("X.509");//用证书工厂来创建证书.. X509Certificate cert = (X509Certificate)cf.generateCertificate(inStream); inStream.close(); return cert; } public static void showCert( X509Certificate cert ) {//输出证书的各项信息.. System.out.println("Version: " + cert.getVersion());//证书版本.. System.out.println("SerialNumber: " + cert.getSerialNumber().toString(16) );//证书序列号.. System.out.println("SignatureAlgorithm: " + cert.getSigAlgName());//证书签名算法.. X500Principal principal = cert.getIssuerX500Principal(); System.out.println("IssuerName: /n" + principal.getName(X500Principal.RFC1779));//证书颁发者 //System.out.println(principal.hashCode()); GregorianCalendar gcal = new GregorianCalendar(); System.out.print("ValidityFrom: "); gcal.setTime(cert.getNotBefore());//证书有效期从.. System.out.println(gcal.get(GregorianCalendar.YEAR)+"/"+gcal.get(GregorianCalendar.MONTH)+"/"+gcal.get(GregorianCalendar.DAY_OF_MONTH)+" "+gcal.get(GregorianCalendar.HOUR_OF_DAY)+":"+gcal.get(GregorianCalendar.MINUTE)+":"+gcal.get(GregorianCalendar.SECOND)); System.out.print("ValidityTo: "); gcal.setTime(cert.getNotAfter());//证书有效期到.. System.out.println(gcal.get(GregorianCalendar.YEAR)+"/"+gcal.get(GregorianCalendar.MONTH)+"/"+gcal.get(GregorianCalendar.DAY_OF_MONTH)+" "+gcal.get(GregorianCalendar.HOUR_OF_DAY)+":"+gcal.get(GregorianCalendar.MINUTE)+":"+gcal.get(GregorianCalendar.SECOND)); principal = cert.getSubjectX500Principal(); System.out.println("SubjectName: /n" + principal.getName(X500Principal.RFC1779));//证书使用者 PublicKey pkey = cert.getPublicKey();//获得公钥 System.out.println("PublicKeyAlgorithm: " + pkey.getAlgorithm() );//公钥算法 System.out.println("PublicKeyCode: " + pkey.getFormat());//公钥格式 byte[] pkeycode = pkey.getEncoded();//公钥的标准编码形式.. //System.out.println(pkeycode.length); /* * Maybe the First 22 bytes are Algorithm info.. * The rest 160 - 22 = 138 bytes are as same as those in Win7 Cert View.. */ for ( int i = 22; i < pkeycode.length; i++ ) { System.out.print(Integer.toHexString( pkeycode[i] & 0XFF)); System.out.print(" "); } System.out.println(""); GregorianCalendar exdate = new GregorianCalendar();; System.out.println(exdate.get(GregorianCalendar.YEAR)); Date date = (exdate.getTime()); try {//检测证书是否有效 cert.checkValidity(date); } catch ( CertificateExpiredException e ){//证书已经过期 System.out.println("Expired"); System.out.println(e.getMessage()); } catch ( CertificateNotYetValidException e ) {//证书还未生效 System.out.println("Too early"); System.out.println(e.getMessage()); } }
以上..下一步是要学习下如何创建.存储证书以及密钥的管理等...
相关文章推荐
- Cedar老师的java中的反射学习笔记(三)--获取方法信息
- Java学习笔记(七)——获取类中方法的信息,java的LinkedList
- java反射学习笔记(3)---使用Class来获取方法、成员变量、构造函数信息
- 初学Python的学习笔记9----面向对象编程(获取对象信息、实例属性和类属性)、面向对象高级编程(使用__slots__、使用@property)
- Java学习笔记(七)——获取类中方法的信息,java的LinkedList
- java数字证书学习笔记
- java学习笔记之class类实例获取方法
- Java反射之获取类的相关信息学习笔记(一)
- 学习笔记_Java get和post区别(转载_GET一般用于获取/查询资源信息,而POST一般用于更新资源信息)
- [学习笔记]jsp+javaBean+Servlet 的设计模式MVC 的实例
- 【OpenCV学习笔记】【编程实例】四(获取一个或多个感兴趣区域)
- Java学习笔记11 —— 向方法和构造函数传递信息
- ExtJs学习笔记(7)_获取GridPanel选中行的详细信息 (转)
- Java学习笔记------自己书写的登录界面实例
- 【Java学习笔记】文件信息
- Java学习笔记-数字
- [原]Java多线程编程学习笔记之六:使用synchronized获取互斥锁的几点说明
- Java学习笔记(4) 项目搭建实例
- Java 学习笔记(实用篇) 获取当前类的与当前工程的路径
- 获取文件数字签名证书信息