快速业务通道

Java安全通信、数字证书及应用实践 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
/ //方式二、从证书库中读出被签的证书 start ///////////////////////////////////////////////////////////////////////////////   java.security.cert.Certificate c3 = ks.getCertificate(aliasName);   //从证书库中读出被签证书,然后生成新的证书   byte[] encod3 = c3.getEncoded();   X509CertImpl cimp3 = new X509CertImpl(encod3);   X509CertInfo cinfo_second =    (X509CertInfo)cimp3.get(X509CertImpl.NAME+"."+X509CertImpl.INFO); /////////////////////////////////////////////////////////////////////////// //end方式二 /////////////////////////////////////////////////////////////////////////// //设置新证书的有效期,使之为当前向后n年有效,新证书的   //截止日期不能超过CA证书的有效日期   Date beginDate = new Date();   Calendar cal = Calendar.getInstance();   cal.setTime(beginDate);   cal.add(cal.YEAR,n);   Date endDate = cal.getTime();   CertificateValidity cv = new CertificateValidity(beginDate,endDate);   cinfo_second.set(X509CertInfo.VALIDITY,cv);   //设置新证书的序列号   CertificateSerialNumber csn = new CertificateSerialNumber(sn);   cinfo_second.set(X509CertInfo.SERIAL_NUMBER,csn);   //设置新证书的签发者   cinfo_second.set(X509CertInfo.ISSUER+"."+CertificateIssuerName.DN_NAME,issuer);   //新的签发者是CA的证书中读出来的   //设置新证书的算法,指定CA签名该证书所使用的算法为md5WithRSA   AlgorithmId algorithm = new AlgorithmId(AlgorithmId.md5WithRSAEncryption_oid);   cinfo_second.set(CertificateAlgorithmId.NAME+"."+   CertificateAlgorithmId.ALGORITHM,algorithm);   //创建新的签名后的证书   X509CertImpl newcert = new X509CertImpl(cinfo_second);   //签名,使用CA证书的私钥进行签名,签名使用的算法为MD5WithRSA   newcert.sign(privateKey,"MD5WithRSA");//这样便得到了经过CA签名后的证书   //把新证书存入证书库   //把新生成的证书存入一个新的证书库,也可以存入原证书库,   //存入新证书库,则新证书库中不仅包含原证书库中的所有条目,   //而且新增加了一个这次产生的条目。注意,这时,新产生的签名后的证书只   //包括公钥和主体信息及签名信息,不包括私钥信息。这里给出两种方式。 /////////////////////////////////////////////////////////////////////////// //方式一:存入新密钥库 /////////////////////////////////////////////////////////////////////////// /* ks.setCertificateEntry(afteraliasName,newcert); FileOutputStream out = new FileOutputStream(newLib); //存入新库signedLib,并设置新库的库访问密码 ks.store(out,newLibPass); out.close(); */ /////////////////////////////////////////////////////////////////////////// //end 方式一 /////////////////////////////////////////////////////////////////////////// //也可以采用另外一种方式,存入原证书库中 //存入原库中,即在原证书库中增加一条证书,这个证书是原证书经过签名后的证书 //这个新证书含有私钥和私钥密码 /////////////////////////////////////////////////////////////////////////// //方式二,存入原密钥库 /////////////////////////////////////////////////////////////////////////// //先在原库中读出被签证书的私钥 PrivateKey prk = (PrivateKey)ks.getKey(alia

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号