SSL/TLS

http://rrsongzi-gmail-com.iteye.com/blog/600816

SSL/TLS:

加密:用非对称秘钥交换对称秘钥

完整性:摘要 

身份认证:用对方的公钥,解密

数字签名:用自己的私钥加密,对方公钥解密,//不可抵赖

假如现在 Alice 向 Bob 传送数字信息,为了保证信息传送的保密性、真实性、完整性和不可否认性,需要对传送的信息进行数字加密和签名,其传送过程为:

1.Alice 准备好要传送的数字信息(明文);

2.Alice 对数字信息进行哈希运算,得到一个信息摘要;

3.Alice 用自己的私钥对信息摘要进行加密得到 Alice 的数字签名,并将其附在数字信息上;

4.Alice 随机产生一个加密密钥,并用此密码对要发送的信息进行加密,形成密文;

5.Alice 用 Bob 的公钥对刚才随机产生的加密密钥进行加密,将加密后的 DES 密钥连同密文一起传送给Bob;

6.Bob 收到 Alice 传送来的密文和加密过的 DES 密钥,先用自己的私钥对加密的 DES 密钥进行解密,得到 Alice随机产生的加密密钥;

7.Bob 然后用随机密钥对收到的密文进行解密,得到明文的数字信息,然后将随机密钥抛弃;

8.Bob 用 Alice 的公钥对 Alice 的数字签名进行解密,得到信息摘要;

9.Bob 用相同的哈希算法对收到的明文再进行一次哈希运算,得到一个新的信息摘要;

10.Bob 将收到的信息摘要和新产生的信息摘要进行比较,如果一致,说明收到的信息没有被修改过。

收到 Server Certificates

接下来收到的应该是 server 端的证书消息了,取出所有的消息,最头上的是 server 证书,最末端的 CA 根证书。在SUN JDK JSSE 中实现的 SSL 是这样处理的:

从 SSLContex 中取出 trust manager ,如果用过 java SSL 编程的同学应该知道,可以自己实现 X509TrustManager 和X509KeyManager 两个接口来定制对证书的验证, sun jdk 中就是调用这个 trust manager 的验证方法来验证证书

猜你喜欢

转载自luckywnj.iteye.com/blog/2274243