现在的位置: 首页 > 综合 > 正文

java数字证书解析

2012年12月20日 ⁄ 综合 ⁄ 共 1364字 ⁄ 字号 评论关闭

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

}

【上篇】
【下篇】

抱歉!评论已关闭.