//公钥
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;
}
}