⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readcert.java

📁 对证书的基本操作
💻 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 + -