快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
url, CONTEXT_OID_CRL, 0, timeout*1000, (LPVOID)&crl, NULL, NULL, NULL, NULL)) { printf("CryptRetrieveObjectByUrl failed\n"); // cached url is corrupted DeleteUrlCacheEntry(url); return JNI_FALSE; } return JNI_TRUE; } MSVerifyCertRevocation (jbyteArray jCert) { rgpvContext[0] = (PVOID)pCertContext; if (CertVerifyRevocation(X509_ASN_ENCODING, CERT_CONTEXT_REVOCATION_TYPE, 1, rgpvContext, 0, NULL, &status)) { return 1; // cert is not revoked }    if (status.dwError == CRYPT_E_REVOKED) return 0; // cert is revoked    return -2; // processing error }

KeyManager

javax.net.ssl.X509KeyManager有六个方法:

· getClientAliases()返回一组客户端别名。(这里的一个别名就是带有一个RSA私钥和证书的一个身份。)

· getServerAliases()返回一组服务器别名。

· chooseClientAlias()从一组别名中选择一个客户端别名。

· chooseServerAlias()从一组别名中选择一个服务器别名。

· getCertificateChain()为一个证书返回有序的证书链。

· getPrivateKey()为一个别名返回私钥。

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

时间:2010-12-12

Microsoft将私钥和它们相关的证书存储在文件系统中。我的私钥和证书存储在目录C:\Documents和Settings\Administrator\Application Data\Microsoft中。你不需要知道钥匙存储在哪里,因为Microsoft提供了一个API用来访问钥匙和证书库。

KeyManager的getClientAliases()和getServerAliases()方法执行Microsoft本地的函数CertEnumCertificateslnStore(),查看Microsoft的“My”证书库中的所有证书。“My”证书库中的证书应该有一个与它们相关连的私钥。每个证书/私钥组合都有一个特殊的标识符,称为CONTAINER;这就相当于Java中的“别名”(见列表5)。

CertEnumCertificatesInStore()方法查看Microsoft中“My”证书库中所有的证书;每个证书都有一个相关的私钥。每个证书/私钥组合都有一个标识符,称为CONTAINER,这就相当于Java中的别名。 JobjectArray MSgetAliases (jstring jcertStore) {    // open Microsoft certificate store hSystemStore = CertOpenStore( CERT_STORE_PROV_SYSTEM, 0, 0, CERT_SYSTEM_STORE_CURRENT_USER, certStore);    // read all the certificates while(pCertContext= CertEnumCertificatesInStore( hSystemStore, pCertContext)) {    // get the cert key container name CertGetCertificateContextProperty( pCertContext, CERT_KEY_PROV_INFO_PROP_ID, alias, &propLen);    // add to list of aliases AddDataToList(&list, alias, strlen(alias)+1); } return jaliases; }

列表5

方法chooseClientAlias()和chooseServerAlias()从一列别名中返回一个客户端(或服务器)别名。如果只有一个别名,在选择别名时就不会有歧义。因为Java的创始人对于选择运用哪个别名并没有提供任何特殊的指导,我就选择了清单中第一个别名。另一个选择合适的客户端别名的方法就是提示用户从一列可能的别名中选择一个别名。(在SSL客户端,你通常可以这么做,但在服务器上不行。)

KeyManager的getCertificateChain()方法为一个证书返回有序的证书链。该方法通过调用getAcceptedIssuers()方法得到一列可信任的证书签发者。首先我们找到证书签发者的Distinguished Name(DN),然后我们查看是否有哪个可信任的签发者有那个DN。几个签发者可以

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