美文网首页java
java 解析 p7b 证书调用链

java 解析 p7b 证书调用链

作者: 恏人_7d7c | 来源:发表于2018-12-02 16:12 被阅读0次

    什么是p7b格式证书?

    p7b一般是证书链,里面包括1到多个证书,至少包含一个根证书。

    我们项目中利用第三方证书颁发机构进行证书的获取以及管理,最近遇到需要将base64后的p7b格式证书调用链进行解析后将证书信息入库,留作后期数据核对结算,在网上找了解析p7b的例子无果后,特地记录在此供需要者参考。

    java 解析p7b

    public static X509Certificatepkcs7CertificateOfAnalysis(String buffer)throws Exception {
    // 文件格式

    /*File f = new File("C:\\Users\\W\\Desktop\\public_key.p7b");

    byte[] buffer = new byte[(int) f.length()];

    DataInputStream in = new DataInputStream(new FileInputStream(f));

    in.readFully(buffer);

    in.close();*/

            PKCS7 pkcs7 =new PKCS7(Base64.decode(buffer));

            X509Certificate[] certificates = pkcs7.getCertificates();

            if(certificates ==null){

    throw new ApiException(WrapperEnumError.SIGN_AUTHENTICATION.getCode(),"The certificate is empty");

            }

    List x509Certificates =new ArrayList(Arrays.asList(certificates));

            int length = x509Certificates.size();

            String  rootSub =null;

            //证书调用链必有一个根证书

            for (int i =0; i < length; i++) {

    X509Certificate certificate = x509Certificates.get(i);

    //判断根证书

    if(certificate.getSubjectDN().getName().equals(certificate.getIssuerDN().getName())){

    rootSub = certificate.getSubjectDN().getName();

                        x509Certificates.remove(i);

                        length = length -1;

                    }

    }

    //判断二级ca证书

    for (int i =0; i < length; i++) {

    X509Certificate certificate = x509Certificates.get(i);

                    if(certificate.getIssuerDN().getName().equals(rootSub)){

    x509Certificates.remove(i);

                        length = length -1;

                    }

    }

    //由于我们对接的第三方  第三方根证 -->  第三方为公司颁发的ca根证  --> 用户证书

    X509Certificate certificate = x509Certificates.get(x509Certificates.size() -1);

    //        certificate.verify(certificate.getPublicKey());

            return certificate;

        }


    相关文章

      网友评论

        本文标题:java 解析 p7b 证书调用链

        本文链接:https://www.haomeiwen.com/subject/bxgjcqtx.html