這兩天公司項目需要用到數位憑證,把N年前的代碼找回來貼上
package com.jinhill.util;import java.io.*;import java.security.*;import java.security.cert.CertificateException;import java.security.cert.CertificateFactory;import java.security.cert.X509Certificate;import java.util.Properties;public class Test {public static String getSubjectDN(byte[] der) {String dn = "";try {ByteArrayInputStream bIn = new ByteArrayInputStream(der);// BouncyCastleProvider provider = new BouncyCastleProvider();// CertificateFactory cf = CertificateFactory.getInstance("X509",// provider);CertificateFactory cf = CertificateFactory.getInstance("X.509","SUN");X509Certificate cert = (X509Certificate) cf.generateCertificate(bIn);dn = cert.getSubjectDN().getName();bIn.close();} catch (CertificateException e) {e.printStackTrace();} catch (NoSuchProviderException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return dn;}public static String parseCertDN(String dn, String type){type = type + "=";String[] split = dn.split(","); for (String x : split) { if (x.contains(type)) { x = x.trim(); return x.substring(type.length()); }}return null;}/** * @param args */public static void main(String[] args) {try {FileInputStream fis = new FileInputStream("D:/Work/RootCA/newcerts/Reader01.cer");int flen = fis.available();byte[] buf = new byte[flen];fis.read(buf, 0, flen);String dn = getSubjectDN(buf);String cn = parseCertDN(dn, "CN");System.out.println(cn);} catch (Exception ex) {System.out.println("讀認證檔案出錯!");}}}