将Java加密技术同Windows结合起来 - 编程入门网
服务器安全状态的方法就是要求客户端用数字证书来证明身份,只接受由一个特定的CA(如VeriSign CA)发布的证书,并且检验证书的Subject Distinguished Name中的特殊字段(如0=sun.com)。只需要几行Java代码就可以把这个过程添加到checkClientTrusted()中了。你需要定制checkClientTrusted()来实现你的安全策略(见列表2)。
Java提供了几个与证书链处理相关的类,在Java Certification Path API Programmer''s Guide中有进一步说明。我对它们做过实验,最后决定不用它们,因为我认为它们太复杂了。 TrustManager有第三个方法getAcceptedIssuers()。该方法为Microsoft证书库中所有CAs返回一组证书。Microsoft将这些证书存储在Registry中;你可以通过启动REGEDIT程序并查看HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates\Root\Certificates找到它们。GetAcceptedIssuers()方法执行了Microsoft的本地函数CertEnumCertificateslnStore()。CA证书被作为一组base64位编码的字符串传回到Java方法。Java.security.cert.CertificateFactory将base64编码的证书转换成Java证书。 将Java加密技术同Windows结合起来(4)时间:2010-12-12证书撤消 有两种撤消证书的方法:Online Certificate Status Protocol(OCSP)和CRL。OCSP(见RFC2560)并没有得到广泛的支持,所以我只探讨用来确认一个证书的撤消状况的CRLs。CAs定期公布一个CRL(见RFC2459)。CRL是一列证书序号,由CA签署。如果一个证书的序号列在CRL中,那个证书就被撤消了,不再有效了。大多数证书在发布时,都有一个称为CRL Distribution Point(CDP)的扩展名。CDP通常是一个HTTP或Lightweight Directory Access Protocol(LDAP)URL,它指明该CRL存储在哪里。我的VeriSign证书的CDP是http://crl.verisign.com/class1.crl。该CRL有500多K,所以需要花些时间来下载。 Java的确提供了类java.security.cert.LDAPCertStoreParameters,它可以用来从一个LDAP目录获取一个CRL,但这并不适用于VeriSign CRL(因为那个CRL存在一个Web服务器上,而不是一个LDAP服务器上)。Microsoft有一个比Java更丰富的API用来管理证书撤消。如果你浏览一个安全的网站(HTTPS),IE将会检验服务器的证书是否已被撤消(假设服务器的证书有一个CDP)。IE将从证书链中的CAs获取CRLs并把它们缓存到IE的Temporary Internet Files(临时Internet文件)目录中。在下一次需要来自那个CA的CRL时,IE将首先检查缓存。如果它在缓存中找到该CRL,IE会检查该CRL是否过期。(CRLs也有有效的from/to期限。VeriSign运用一个10天的有效期限。)如果CRL已经过期,IE将获取一个新的CRL。 我考虑开发一个只用于Java的CRL获取、缓存和撤消确认过程——但是那样会需要大量的Java代码,需要支持几个URL协议(HTTP、 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |