这两天公司项目需要用到数字证书,把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("读证书文件出错!"); } } } |