SSL握手中的个别细节

晨曦之光 发布于 2012/04/10 15:00
阅读 164
收藏 0

1.CipherSuite
CipherSuite由三部分组成:密钥交换算法,对称加密算法,签名算法。这三个算法组合而成一个Suite,密钥交换算法描述握手消息中的KeyExchange的相关细节,这里交换的是pre-master,而对称加密算法描述密钥交换算法交换的内容细节的用法,签名算法的作用主要在认证。所以,虽然一般上SSL握手都是在client KeyExchange中使用server的公钥加密pre-master,然而这并不是唯一的做法,比如如果CipherSuite是TLS_DH_RSA_WITH_DES_CBC_SHA的话,那就说明使用DH算法交换密钥,而是用RSA进程前面,摘要算法是SHA。注意,密钥交换算法和证书的类型没有什么关系,证书只是为了验证对端的身份,和密钥交换算法属于不同的业务范畴,它们之间的一点联系就是有的时候用服务器证书里面的内容就能使得客户端将pre-master安全的传输给服务器,比如RSA签名的RSA公钥的证书,从证书中就能取出服务器的公钥,于是客户端就可以使用该公钥来加密自己的pre-master,自己留一份,传给服务器一份,于是两端都有了这个pre-master,然后就可以计算出相同的对称密钥了,如果是DH密钥交换算法,那么也很简单,虽然证书中可能没有DH相关的信息,但是服务器端可以在Server KeyExchange消息中包含DH的自己的份额,然后客户端在Client KeyExchange中包含DH的自己的份额,然后两端即可计算出相同的对称密钥了,不管怎样总是能协商出一个仅此两端共享的对称密钥。证书用于认证,但是有时也能包含一些用于密钥交换的信息(比如RSA),CipherSuite中的KeyExchangeMethod用于密钥交换,信息可以和证书毫无关联。
2.certificate verify消息
该消息的含义在于认证客户端,由于服务器端通常信任很多客户端,如果A和B都是服务器信任的,A要是拿着B的证书进行验证就不好了,所以客户端如果提供证书的话,那么就要发送这个消息来证实自己就是证书的所有者。正如认证一个人的身份不能只看他的证件是否有效,还要他按指印或者签字是一样的道理。那么为何服务器端不用发送这个消息来证实自己的身份呢?多个服务器也是可以互相盗用证书的,以RSA密钥交换算法为例,答案就在于pre-master是用从服务器证书取出的公钥加密的,然后由客户端发给服务器的,如果服务器证书不是自己的,那么它将无法解密这个pre-master。不过要注意,有时候为了效率因素,有些情况下在SSL握手交互过程中是不验证证书所有者的身份真实性的,这就可能招来中间人攻击。
3.Finished消息
该消息是SSL握手中的最后要互传的消息,包含一个所有握手消息的摘要值,这是为了防止中间人将强度较大的CipherSuite在client hello消息中删除,使得server不得不选择强度较小的CipherSuite,然而这非client所愿。问题是这个摘要不可以被中间人更改吗?想象一下这时共享对称密钥已经协商好了,ChangeCipherSpec已经经过,所以这些消息本身是加过密的。
4.所有细节详情:参考RFC2246


原文链接:http://blog.csdn.net/dog250/article/details/5629064
加载中
返回顶部
顶部