获取数字证书相关信息,证书链有效性验证,RSA加密和解密功能之获取证书相关信息

 //公钥
private PublicKey pk;

/** 后台将证书以byte数组的形式传入
     * @param bytes,数字证书crt传入的byte数组
     * @return
     */

 public InfoEntity getCertificateInfo(byte[] bytes) {
        InfoEntity infoEntity = null;
        String key = "";
        CertificateFactory certificatefactory;
        X509Certificate Cert;
        InputStream input;
        try {
            certificatefactory = CertificateFactory.getInstance("X.509");
//将byte数组转为inputStream
//如果获取的是本地项目assets目录下的证书可以直接打开:input = getAssets().open("证书文件名,
//如:2.cer");
            input = new ByteArrayInputStream(bytes);
            Cert = (X509Certificate) certificatefactory.generateCertificate(input);
//获取公钥
            pk = Cert.getPublicKey();
            if (infoEntity == null) {
//将信息以实体类的形式传出去
                infoEntity = new InfoEntity();
            }
            //序列号
            BigInteger serial = Cert.getSerialNumber();
            infoEntity.setSerialNum(serial);
//有效期-开始
            Date notBeforeData = Cert.getNotBefore();
            infoEntity.setUlBefore(notBeforeData);
//有效期-结束
            Date notAfterData = Cert.getNotAfter();
            infoEntity.setUlAfter(notAfterData);
            //获得证书颁发机构
            String issuer = Cert.getIssuerX500Principal().getName();
            infoEntity.setIssuer(issuer);
            //域名,证书中的域名得到的数据并不只是有域名,所以用正则匹配截取出来
            String name = Cert.getSubjectDN().getName();
            StringBuilder stringBuilder = new StringBuilder();
            Pattern p = Pattern.compile("(?<=CN\\=).*?(?=,|(s*$))");
            Matcher m = p.matcher(name);
            while (m.find()) {
                stringBuilder.append(m.group());
            }
            infoEntity.setOwnerUrl(stringBuilder.toString());
//将公钥解密出来
            key = Base64.encodeToString(pk.getEncoded(), Base64.NO_WRAP);
            infoEntity.setPubKey(key);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return infoEntity;
    }

 

/**
     * 获取证书的相关信息
     */
    class InfoEntity {
        //序列号
        private BigInteger serialNum;
        //公钥
        private String pubKey;
        //有效期-开始
        private Date ulBefore;
        //有效期-结束
        private Date ulAfter;
        //颁发机构
        private String Issuer;
        //证书所有者授权域名
        private String ownerUrl;

        public BigInteger getSerialNum() {
            return serialNum;
        }

        public void setSerialNum(BigInteger serialNum) {
            this.serialNum = serialNum;
        }

        public String getPubKey() {
            return pubKey;
        }

        public void setPubKey(String pubKey) {
            this.pubKey = pubKey;
        }

        public Date getUlBefore() {
            return ulBefore;
        }

        public void setUlBefore(Date ulBefore) {
            this.ulBefore = ulBefore;
        }

        public Date getUlAfter() {
            return ulAfter;
        }

        public void setUlAfter(Date ulAfter) {
            this.ulAfter = ulAfter;
        }

        public String getIssuer() {
            return Issuer;
        }

        public void setIssuer(String issuer) {
            Issuer = issuer;
        }


        public String getOwnerUrl() {
            return ownerUrl;
        }

        public void setOwnerUrl(String ownerUrl) {
            this.ownerUrl = ownerUrl;
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值