java实现证书链和签名验证
来源:互联网 发布:java源码中装饰模式 编辑:程序博客网 时间:2024/06/10 07:37
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++){//遍历arX509certificateX509Certificate 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;}}
0 0
- java实现证书链和签名验证
- java实现xml的签名和验证
- java程序实现加密解密以及签名和签名验证
- java数字签名(签名生成,用证书验证签名)
- java数字签名(签名生成,用证书验证签名)
- java数字签名(签名生成,用证书验证签名)
- java数字签名(签名生成,用证书验证签名)
- java数字签名(签名生成,用证书验证签名)
- java数字签名(签名生成,用证书验证签名)
- cer证书签名验证
- Java实现自签名证书,CA颁发证书
- Java代码签名证书申请和使用指南
- Java代码签名证书申请和使用指南
- SSL证书生成,签名,验证
- 关于证书和签名
- 加密和签名证书
- 使用JAVA实现签名验证示例程序
- apk的证书自签名, 普通证书由证书中心签名, 根证书自签名 (签名者验证证书)
- say what
- 【POJ3352】Road Construction tarjan求边-双连通分量,裸题模板题
- 流体分离技术:承德市MBR膜生物反应器技术特点
- Android - Bug: runOnUiThread
- mysql常用语句
- java实现证书链和签名验证
- SQL To LinQ 你知道么?
- 流体分离技术:沧州市弧形阳极电泳工艺流程
- 【POJ1523】SPF tarjan求点-双连通分量 裸题模板题
- Smarty学习笔记(二)
- JQuery其他常用函数
- Error:Android Source Generator: Cannot parse SDK Android API 4 Platform: build target is not specifi
- 今日目标:学完它。意志+极限
- 批量注册woj用户