快速业务通道

将Java加密技术同Windows结合起来 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
有同一个DN。对于具有签发者DN的每个证书,我们提取公钥并尝试在原始证书上确认签名。如果没有一个签发者有正确的DN和正确的公钥,证书链就被破坏了,出现一个异常。如果我们找到了正确的签发者签发的证书,我们就重复上述过程来查找和确认那个证书的签发者。重复该过程,直到我们达到根CA。对于一个根CA,Subject DN和签发者DN是一样的(见列表6)。

方法getCertChain()为一个证书返回有序的证书链。 MSCryptoFunctions MSF = new MSCryptoFunctions(); X509Certificate[] getCertChain( X509Certificate cert) {    try { getCACerts();    Principal subject = cert.getSubjectDN(); Principal issuer = cert.getIssuerDN(); CertChainList.add(cert);    // stop if issuer==subject (root CA) while (!(issuer.equals(subject))) {    match = false; X509CertSelector xcs = new X509CertSelector(); xcs.setCertificateValid(new Date());    Collection certcollection = CACerts.getCertificates(xcs);    // // the next 7 lines are inserted to work // around a problem with X509CertSelector. // we should be able to do this with // xcs.setSubject(issuer.toString()); // Iterator iter = certcollection.iterator(); while ( iter.hasNext() ) { X509Certificate cacert = (X509Certificate) (iter.next()); if (!cacert.getSubjectDN().equals(issuer)) iter.remove(); }    issuerArray = new X509Certificate[ certcollection.size()]; issuerArray = (X509Certificate[]) certcollection.toArray(issuerArray);    for (int i=0; i<\<>issuerArray.length; i++) if (verifySignature(issuerArray[i], cert)){ match = true; cert = issuerArray[i]; subject = cert.getSubjectDN(); issuer = cert.getIssuerDN(); CertChainList.add(cert); break; } if (!match) { return null; // cert chain broken } } } catch (Exception e) { e.printStackTrace(); }    X509Certificate[] CertChain = new X509Certificate[CertChainList.size()]; CertChainList.toArray(CertChain);    return CertChain; }

将Java加密技术同Windows结合起来(7)

时间:2010-12-12

getPrivateKey()方法为一个别名返回私钥,假设私钥可以从Microsoft钥匙库中输出。记住,有时私钥是不能输出的。(例如,如果你用了一个加密了的智能卡,那么就没人可以从智能卡上读取私钥了。)如果不能输出私钥,getPrivateKey()就返回一个虚拟的私钥。所以,如果getPrivateKey()不能得到私钥,我们就骗Java,让它认为得到了私钥。getPrivateKey()也缓存别名,所以,当一个Java程序试图执行一个RSA数字签名函数时,我们就会知道运用哪个私钥了(缓存的别名),而且Microsoft加密提供者就可以执行我们想要的RSA签名或解密函数了(见列表7)。

方法getPrivateKey()为一个别名返回私钥,假设私钥可以从Windows钥匙库中输出。 MSCryptoFunctions MSF = new MSCryptoFunctions(); public PrivateKey getPrivateKey(String alias) {    // get the private key from MS Windows for // this alias byte[] keyblob = MSF.MSgetPrivateKey(alias);    if (keyblob == null) { // generate a dummy key byte[] modblob = new byte[128]; for(i=0; i<128; i++) modblob[i] = 127; mod = new BigInteger(modblob); exp = mod;    } else { // use the key that got exported for(i=0; i

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号