论Java加密技术与Windows的结合 (3)
在数字签名中,用私钥来完成签名,用公钥来完成确认。被签名了的文件通常是经过哈希算法处理过的。哈希算法是一个单向算法,它可以减小文件的大小。运用MD5哈希算法,文件被简小到16字节。运用SHA1哈希算法,文件被简小到20字节。然后,就用签名人的私钥对经哈希算法处理过的文件进行加密。任何人都可以用签名人的公钥来解密哈希文件。
你必须非常小心地保护私钥。Windows将私钥以有些令人迷惑的形式存储在文件系统中。一个恶意的侵犯者可以进入到你的计算机并找到你的私钥。任何得到了你的私钥的人都可以化装成你,在你不知道的情况下做出签署文件等行为。一种保护私钥的方法就是用一个加密的智能卡,该卡上存储了私钥。运用一个加密的智能卡,用户仍然可以进行公钥加密和签名活动,但没有人——甚至用户——可以读取私钥。智能卡有一个RSA加密和签名处理器,只有这个RSA处理器有权使用私钥。
当一个SSL服务器向一个SSL客户端确认身份时,客户端必须根据下面这些标准来确定服务器的证书是否有效:
· 证书必须有一个信任链,其根CA必须是客户端信任的。
· 服务器证书,和信任链中所有的CA证书必须有有效的签名。每个证书都是由下面更高级的CA来签署的,除了根CA外,它签名自己的证书。
· 当前的日期和时间必须在服务器证书的有效期内,而且也在信任链中所有证书的有效期内。每个证书都有一个有效期(证书可以有效使用的一个开始日期和时间以及结束日期和时间)。
· 每个CA应该管理和公布一个CRL。客户端必须可以从信任链中的每个CA得到CRLs,来查看服务器证书或下属CA的一个证书是否已被其下面更高级的CA撤消了。
· 证书必须可以有效用于其目的。钥匙的用途定义在证书中。例如,CA批准的仅用于数字签名的一个钥匙就不能用于SSL钥匙交换。
Java安全实现环境中不进行证书撤消确认,就是说,它不进行CRL处理。我将向你展示如何运用Microsoft Windows的本地加密函数来检查证书信任链中的CRLs,从而为Java实现一个TrustManager和KeyManager。
TrustManager
javax.net.ssl.X509TrustManager有三个方法,你可以在MSTrustManagerlmpl.java中找到: · getAcceptedIssuers()为Microsoft证书库中的所有CAs返回一组证书。
· checkClientTrusted()执行服务器的安全策略。
· checkServerTrusted()执行客户端的安全策略。
一个典型的TCP网络安全策略是:
· 客户端开始连接。假设客户端只连接到“安全的”服务器。客户端应该要求
Tags:关键字:论Java加密技术与Windows的结合
责任编辑:glen


您的位置:
