獲取數字證書相關資訊,證書有效性驗證,RSA加密和解密功能之獲取證書相關資訊
阿新 • • 發佈:2019-01-02
//公鑰 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; } }