我是靠谱客的博主 耍酷学姐,最近开发中收集的这篇文章主要介绍java实现证书链和签名验证,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

public static boolean verify(X509Certificate X509certificateRoot,
Collection collectionX509CertificateChain,X509CRL X509crl,String stringTarget) {
//获取证书链长度
int nSize=collectionX509CertificateChain.size();
//将证书链转化为数组
X509Certificate[] arX509certificate=new X509Certificate[nSize];
collectionX509CertificateChain.toArray(arX509certificate);
//声明list,存储证书链中证书主体信息
ArrayList list=new ArrayList();
//沿证书链自上而下,验证证书的所有者是下一个证书的颁布者
Principal principalLast=null;
for(int i=0;i<nSize;i++){//遍历arX509certificate
X509Certificate x509Certificate=arX509certificate[i];
//获取发布者标识
Principal principalIssuer=x509Certificate.getIssuerDN();
//获取证书的主体标识
Principal principalSubject=x509Certificate.getSubjectDN();
//保存证书的序列号
list.add(x509Certificate.getSerialNumber());
if(principalLast!=null){
//验证证书的颁布者是上一个证书的所有者
if(principalIssuer.equals(principalLast)){
try{
//获取上个证书的公钥
PublicKey publickey=arX509certificate[i-1].getPublicKey();
//验证是否已使用与指定公钥相应的私钥签署了此证书
arX509certificate[i].verify(publickey);
}catch(Exception e){
return false;
}
}else{
return false;
}
}
principalLast=principalSubject;
}
//验证根证书是否在撤销列表中
try{
if(!X509crl.getIssuerDN().equals(X509certificateRoot.getSubjectDN()))return false;
X509crl.verify(X509certificateRoot.getPublicKey());
}catch(Exception e){
return false;
}
//在当前时间下,验证证书链中每个证书是否存在撤销列表中
if(X509crl!=null){
try{
//获取CRL中所有的项
Set setEntries=X509crl.getRevokedCertificates();
if(setEntries==null && setEntries.isEmpty()==false){
Iterator iterator=setEntries.iterator();
while(iterator.hasNext()){
X509CRLEntry X509crlentry=(X509CRLEntry)iterator.next();
if(list.contains(X509crlentry.getSerialNumber()))return false;
}
}
}catch(Exception e){
return false;
}
}
//证明证书链中的第一个证书由用户所信任的CA颁布
try{
PublicKey publickey=X509certificateRoot.getPublicKey();
arX509certificate[0].verify(publickey);
}catch(Exception e){
return false;
}
//证明证书链中的最后一个证书的所有者正是现在通信对象
Principal principalSubject=arX509certificate[nSize-1].getSubjectDN();
if(!stringTarget.equals(principalSubject.getName()))return false;
//验证证书链里每个证书是否在有效期里
Date date=new Date();
for(int i=0;i<nSize;i++){
try{
arX509certificate[i].checkValidity(date);
}catch(Exception e){
return false;
}
}
return true;
}
public static boolean verifySign(X509Certificate X509certificateCA,String sign,String original){
try{
//获得签名实例
Signature signature=Signature.getInstance(X509certificateCA.getSigAlgName());
//用证书公钥进行初始化
signature.initVerify(X509certificateCA.getPublicKey());
//更新源数据
signature.update(original.getBytes());
//验证数字签名
return signature.verify(sign.getBytes());
}catch(Exception e){
return false;
}
}

最后

以上就是耍酷学姐为你收集整理的java实现证书链和签名验证的全部内容,希望文章能够帮你解决java实现证书链和签名验证所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部