获取证书实例

这段Java代码实现了两个功能,一是通过`getCert`方法从有效证书文件创建X509证书,二是通过`showCert`方法输出证书的各项信息,包括版本、序列号、签名算法等,还能检测证书是否有效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public static X509Certificate getCert(String fileName) throws Exception {//从一个有效的证书文件来创建证书..
    InputStream inStream = new FileInputStream(fileName);
    CertificateFactory cf = CertificateFactory.getInstance("X.509");//用证书工厂来创建证书..
    X509Certificate cert = (X509Certificate)cf.generateCertificate(inStream);
    inStream.close();
    return cert;
}
public static void showCert( X509Certificate cert ) {//输出证书的各项信息..
    System.out.println("Version: " + cert.getVersion());//证书版本..
    System.out.println("SerialNumber: " + cert.getSerialNumber().toString(16) );//证书序列号..
    System.out.println("SignatureAlgorithm: " + cert.getSigAlgName());//证书签名算法..
    X500Principal principal = cert.getIssuerX500Principal();
    System.out.println("IssuerName: /n" + principal.getName(X500Principal.RFC1779));//证书颁发者
    //System.out.println(principal.hashCode());
    GregorianCalendar gcal = new GregorianCalendar();
    System.out.print("ValidityFrom: ");
    gcal.setTime(cert.getNotBefore());//证书有效期从..
    System.out.println(gcal.get(GregorianCalendar.YEAR)+"/"+gcal.get(GregorianCalendar.MONTH)+"/"+gcal.get(GregorianCalendar.DAY_OF_MONTH)+"  "+gcal.get(GregorianCalendar.HOUR_OF_DAY)+":"+gcal.get(GregorianCalendar.MINUTE)+":"+gcal.get(GregorianCalendar.SECOND));
    System.out.print("ValidityTo: ");
    gcal.setTime(cert.getNotAfter());//证书有效期到..
    System.out.println(gcal.get(GregorianCalendar.YEAR)+"/"+gcal.get(GregorianCalendar.MONTH)+"/"+gcal.get(GregorianCalendar.DAY_OF_MONTH)+"  "+gcal.get(GregorianCalendar.HOUR_OF_DAY)+":"+gcal.get(GregorianCalendar.MINUTE)+":"+gcal.get(GregorianCalendar.SECOND));
    principal = cert.getSubjectX500Principal();
    System.out.println("SubjectName: /n" + principal.getName(X500Principal.RFC1779));//证书使用者
    PublicKey pkey = cert.getPublicKey();//获得公钥
    System.out.println("PublicKeyAlgorithm: " + pkey.getAlgorithm() );//公钥算法
    System.out.println("PublicKeyCode: " + pkey.getFormat());//公钥格式
    byte[] pkeycode = pkey.getEncoded();//公钥的标准编码形式..
    //System.out.println(pkeycode.length);
    /*
     * Maybe the First 22 bytes are Algorithm info..
     * The rest 160 - 22 = 138 bytes are as same as those in Win7 Cert View..
     */
    for ( int i = 22; i < pkeycode.length; i++ ) {
        System.out.print(Integer.toHexString( pkeycode[i] & 0XFF));
        System.out.print(" ");
    }
    System.out.println("");
    GregorianCalendar exdate = new GregorianCalendar();;
    System.out.println(exdate.get(GregorianCalendar.YEAR));
    Date date = (exdate.getTime());
    try {//检测证书是否有效
        cert.checkValidity(date);
    }
    catch ( CertificateExpiredException e ){//证书已经过期
           System.out.println("Expired");
           System.out.println(e.getMessage());
    }
    catch ( CertificateNotYetValidException e ) {//证书还未生效
           System.out.println("Too early");
           System.out.println(e.getMessage());
    }
}

链接:http://www.dreamingfish123.info/?p=955

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值