将Java加密技术同Windows结合起来 - 编程入门网
LDAP、FTP、文件),需要用一个文件来存储CRL缓存,而且需要复制Microsoft提供的底层框架。目的是运用IE的证书撤消底层框架。
Microsoft提供了一个函数CertVerifyRevocation(),它与IE缓存结合起来了并按需要下载和处理CRLs。我琢磨了好几周撤消过程,最后得到了一个可靠的算法。当CertVerifyRecocation()下载一个CRL时,下载有时会中断。这就使CertVerifyRevocation()返回假的、很难恢复的错误状况。我实现的过程显示在图1中。 图1. 证书撤消流程表 其诀窍就是调用函数CryptRetrieveObjectByUrl()来从LDAP、HTTP或FTP服务器预取CRL到IE缓存中,然后调用CertVerifyRevocation()来检查这个证书是否已被撤消。虽然CryptRetrieveObjectByUrl()下载仍然要受到网络的影响,造成连接中断,但运用CryptRetrieveObjectByUrl()的好处就是你可以识别问题,报告一个有意义的错误信息,并且(如果你需要)可以提示用户接受或拒绝该证书。不幸的是,只有Windows 2000或更高版本中有CryptRetrieveObjectByUrl()。如果程序要在Windows 98或Windows NT4上运行,你就不能预取CRL。 我也尝试运用Microsoft函数来下载CRLs,然后在Java中处理CRL。对于一个大的CRL(比如VeriSign CRL),这种方式很慢。 列表3显示关于isCertRevoked()方法的Java代码片段。IsCertRevoked()方法调用了两个本地函数,MSgetCRL()和MSVerifyCertRevocation()。MSgetCRL()调用Microsoft函数CryptRetrieveObjectByURL(),如果CRL不在缓存中,它可以使CRL被下载。你不需要把CRL传递到Java中,因为它从来不用在Java中。函数MSCertVerifyRevocation()调用Microsoft函数CertVerifyRevocatoin()来确定一个证书是否被撤消了。列表4显示关于MSgetCRL()和MSVerifyCertRevocation()的代码片段。警告:当我第一次在Windows 2000 Server PC上测试CertVerifyRevocation()时,它没有运行。在我将PC升级到Service Pack 2后,重新测试就很成功。
将Java加密技术同Windows结合起来(5)时间:2010-12-12函数MSgetCRL()和MSVerifyCertRevocation()由方法isCertRevoked()调用(如列表3所示)。MSgetCRL()调用Microsoft函数CryptRetrieveObjectByURL(),如果在缓存中没有CRL,可以用该函数来下载它。函数MSVerifyCertRevocation()调用Microsoft函数CertVerifyRevocation()来查看一个证书是否已被撤消。
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |