📄 readcert.java
字号:
package ldaptest;/** * <p>Title:readCer </p> * <p>Description:读取传过来的证书Base64格式信息,获得证书主题信息,颁发者主题信息,证书序列号,证书有效期, * 证书DN信息中的:CN、O、OU、C,验证证书的有效期</p> * <p>Copyright: Copyright (c) 2003</p> * <p>Company: </p> * @author * @version 1.0 */import java.util.*;import java.io.*;import java.security.cert.*;import sun.security.util.*;import sun.misc.BASE64Decoder;import java.math.BigInteger;import sun.security.pkcs.PKCS10;public class readCert { private Date beginDate=null; private Date endDate=null; private CertificateFactory cf=null; private X509Certificate xc=null; public readCert(){ } //这是一个拆分函数,将字符串拆分到hashtable中public static Hashtable spilt(String fieldsru, String tag){ Hashtable returnarray = new Hashtable(); char dot = tag.charAt(0); String field; field = fieldsru + dot; int num = 0; int field_len = field.length(); for (int i = 0; i < field_len; i++) { if (field.charAt(i) == dot) { num++; } } int begin = 0; int end; for (int j = 0; j < num; j++) { end = field.indexOf(dot, begin); returnarray.put(new Integer(j), field.substring(begin, end)); begin = end + 1; } return returnarray; } //解析证书DN信息,获得E,CN,O,OU,C,L //输入:strDN(需要解析的证书DN信息),type(需要获得的信息类型,分为:“E”、“CN”、“OU”、“O”、“C”、“L”) //输出:返回一个String 型信息,返回null表示输入有误 public String parseCertDN(String strDN,String type){ try{ Hashtable tbDN=this.spilt(strDN,","); if(tbDN.isEmpty()||tbDN.size()<1) return null; Properties prop=new Properties(); for(int i=0;i<tbDN.size();i++){ String strTmp=tbDN.get(new Integer(i)).toString(); Hashtable tmpTB=this.spilt(strTmp,"="); if(tmpTB.isEmpty()||tmpTB.size()<2) return null; String prop1=tmpTB.get(new Integer(0)).toString(); String prop2=tmpTB.get(new Integer(1)).toString(); prop.setProperty(prop1.trim(),prop2.trim()); } return prop.getProperty(type) ; }catch(Exception e){ return null; } } //certInfo必须为打算检查的证书Base64格式信息。 public readCert(String certInfo)throws Exception{ cf = CertificateFactory.getInstance("X.509","SUN"); BASE64Decoder base64decoder = new BASE64Decoder(); byte abyte0[] = base64decoder.decodeBuffer(certInfo); ByteArrayInputStream bytestream = new ByteArrayInputStream(abyte0); this.xc = (X509Certificate)cf.generateCertificate(bytestream); bytestream.close(); } //返回证书序列号,返回null表示输入的证书信息有误或此项未写入证书中 public String getSerialNumber(){ try{ String tmp=xc.getSerialNumber().toString(); xc.getType() ; return tmp; }catch(Exception ex){ return null; } } //返回证书主题信息,返回null表示输入的证书信息有误或此项未写入证书中 public String getSubjectDN(){ try{ String tmp=xc.getSubjectDN().toString(); return tmp; }catch(Exception ex){ return null; } } //返回证书颁发者主题信息,返回null表示输入的证书信息有误或此项未写入证书中 public String getIssuerDN(){ try{ String tmp=xc.getIssuerDN().toString(); return tmp; }catch(Exception ex){ return null; } } //返回证书有效期开始日期,返回null表示输入的证书信息有误或此项未写入证书中 public Date getBeginDate(){ try{ beginDate=xc.getNotBefore(); return beginDate; }catch(Exception ex){ return null; } } //返回证书有效期截止日期,返回null表示输入的证书信息有误或此项未写入证书中 public Date getEndDate(){ try{ endDate=xc.getNotAfter(); return endDate; }catch(Exception ex){ return null; } } //验证证书有效期 //0:有效 //1:还没有有效 //2:已过期 //3:证书信息有错无法验证 public int checkValidity(){ try{ getBeginDate(); getEndDate(); Date date=new Date(); if (date.before(endDate)&&date.after(beginDate)){ return 0; }else if (!date.after(beginDate)) { return 1; }else if (!date.before(endDate)) { return 2; }else{ return 0; } }catch(Exception ex){ return 3; } } //输入一个时间参数,以此时间验证证书有效期 //0:有效 //1:还没有有效 //2:已过期 //3:证书信息有错或输入日期有错无法验证 public int checkValidity(Date date){ try{ getBeginDate(); getEndDate(); if (date.before(endDate)&&date.after(beginDate)){ return 0; }else if (!date.after(beginDate)) { return 1; }else if (!date.before(endDate)) { return 2; }else{ return 0; } }catch(Exception ex){ return 3; } } //返回证书主题信息中CN,返回null表示输入的证书信息有误或此项未写入证书中 public String getCertCN(){ try{ String tmp=xc.getSubjectDN().toString(); String tmpCN=this.parseCertDN(tmp,"CN") ; return tmpCN; }catch(Exception ex){ return null; } } //返回证书主题信息中E(email),返回null表示输入的证书信息有误或此项未写入证书中 public String getCertE(){ try{ String tmp=xc.getSubjectDN().toString(); String tmpCN=this.parseCertDN(tmp,"E") ; return tmpCN; }catch(Exception ex){ return null; } } //返回证书主题信息中L(location),返回null表示输入的证书信息有误或此项未写入证书中 public String getCertL(){ try{ String tmp=xc.getSubjectDN().toString(); String tmpCN=this.parseCertDN(tmp,"L") ; return tmpCN; }catch(Exception ex){ return null; } } //返回证书主题信息中S(station),返回null表示输入的证书信息有误或此项未写入证书中 public String getCertS(){ try{ String tmp=xc.getSubjectDN().toString(); String tmpCN=this.parseCertDN(tmp,"S") ; return tmpCN; }catch(Exception ex){ return null; } } //返回证书主题信息中O,即组织,返回null表示输入的证书信息有误或此项未写入证书中 public String getCertO(){ try{ String tmp=xc.getSubjectDN().toString(); String tmpO=this.parseCertDN(tmp,"O") ; return tmpO; }catch(Exception ex){ return null; } } //返回证书主题信息中OU,即组织单位,返回null表示输入的证书信息有误或此项未写入证书中 public String getCertOU(){ try{ String tmp=xc.getSubjectDN().toString(); String tmpOU=this.parseCertDN(tmp,"OU") ; return tmpOU; }catch(Exception ex){ return null; } } //返回证书主题信息中C,即国家,返回null表示输入的证书信息有误或此项未写入证书中 public String getCertC(){ try{ String tmp=xc.getSubjectDN().toString(); String tmpC=this.parseCertDN(tmp,"C") ; return tmpC; }catch(Exception ex){ return null; } } public static void main(String args[]) { String strCert="MIIDyDCCAzGgAwIBAgIQHtKpav9bQ8T+ZGFKVQ0nsDANBgkqhkiG9w0BAQQFADCB";strCert=strCert+"jTELMAkGA1UEBhMCQ04xDzANBgNVBAoTBk1PRlRFQzEMMAoGA1UECxMDRURJMQsw";strCert=strCert+"CQYDVQQIEwJCSjEbMBkGA1UEAxMSR0ZBIENBIENFUlRJRklDQVRFMRIwEAYDVQQH";strCert=strCert+"EwlEb25nQ2hlbmcxITAfBgkqhkiG9w0BCQEWEmNhQGNhY2VudGVyLmNvbS5jbjAe";strCert=strCert+"Fw0wMzEyMTgwMjI0MTlaFw0wNDEyMTgwMjI0MTlaMB8xCzAJBgNVBAYTAkNOMRAw";strCert=strCert+"DgYDVQQDEwdzb25nd2VpMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDK3qBr";strCert=strCert+"ZbR2HrAkpZTG90zSPmYkdlSuajQwyDVQIesPUpgeFiAbtegKSQvVxzK7grHAB4E5";strCert=strCert+"Q3wvPMv/gOuU4IJrlQF8KV1I1ROAKboaKQqEDP4jV0SEPHA+6ryzCzSrXE9t8YJT";strCert=strCert+"GCt8KnVEAL/2H8deOtQqWVDPXl/KUxg+kFLnLQIDAQABo4IBlDCCAZAwFQYIKwYB";strCert=strCert+"BAGHK0AECQwHc29uZ3dlaTAZBgNVHQ4EEgQQMKeLlLQcdhgdbfpvCeKzKTARBglg";strCert=strCert+"hkgBhvhCAQEEBAMCBLAwFwYIKwYBBAGHKz8ECwwJMTExMjIyMzMzMIHVBgNVHR8E";strCert=strCert+"gc0wgcowgcegL6AthitodHRwOi8vcmEuZ2ZhcGtpLmNvbS5jbjo4ODg4L2NybC9n";strCert=strCert+"ZmFvY2EuY3JsooGTpIGQMIGNMQswCQYDVQQGEwJDTjEPMA0GA1UEChMGTU9GVEVD";strCert=strCert+"MQwwCgYDVQQLEwNFREkxCzAJBgNVBAgTAkJKMRswGQYDVQQDExJHRkEgQ0EgQ0VS";strCert=strCert+"VElGSUNBVEUxEjAQBgNVBAcTCURvbmdDaGVuZzEhMB8GCSqGSIb3DQEJARYSY2FA";strCert=strCert+"Y2FjZW50ZXIuY29tLmNuMA4GA1UdDwEB/wQEAwID+DBIBgNVHSAEQTA/MD0GCCsG";strCert=strCert+"AQQBhysyMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuZ2ZhcGtpLmNvbS5jbi9j";strCert=strCert+"YS9jcHMucGRmMA0GCSqGSIb3DQEBBAUAA4GBADZfYcK2lvjNAf+IPdkJJJ4i/llY";strCert=strCert+"McBJU8aXDrdrj6Ht3/uGJkrgEnlMvncw63HaaZvHIXeAO5uJUJtOllPSd+EnRqyJ";strCert=strCert+"8DH1JYGPKMmjjiB4Bc5iNDQrPE40Zgm0OEXNr5elWuFgdfv/v/VMOpqCo/IvST+w"; strCert=strCert+"i+2tdc5vOp0W625/"; try{ readCert readCert=new readCert(strCert); String sn=readCert.getSerialNumber(); String c=readCert.getCertC(); System.out.println("证书序列号是=="+sn); System.out.println("国家代码是=="+c); }catch(Exception e) {e.printStackTrace();} }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -