SSL握手中的个别细节

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:
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



 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1271898

相关文章
|
网络协议 应用服务中间件 网络安全
阿里云环境中TLS/SSL握手失败的场景分析
TLS/SSL握手是一个相对复杂的过程,在阿里云环境中结合产品,安全等特性,可能会让TLS/SSL握手过程的不定性更多。本文来总结下各种握手失败的场景。
阿里云环境中TLS/SSL握手失败的场景分析
|
网络协议 安全 网络安全
第一次访问网站时,连接和ssl握手慢
第一次访问网站时,连接和ssl握手慢
372 0
第一次访问网站时,连接和ssl握手慢
|
关系型数据库 MySQL 网络安全
【C#】【MySQL】【配置数据源】SSL Connection error 发生一个或多个错误。由于·意外的数据包格式,握手失败
【C#】【MySQL】【配置数据源】SSL Connection error 发生一个或多个错误。由于·意外的数据包格式,握手失败
221 0
【C#】【MySQL】【配置数据源】SSL Connection error 发生一个或多个错误。由于·意外的数据包格式,握手失败
|
安全 网络安全
|
应用服务中间件 网络安全 Java
|
算法 网络安全 数据安全/隐私保护
|
算法 网络安全 数据安全/隐私保护
|
关系型数据库 Java 数据安全/隐私保护
终极解决:iOS 与 Java 服务器之间 SSL 握手失败的解决:Cipher Suites
iOS 与 Java 服务器之间 SSL 握手失败的解决:Cipher Suites 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循“署名-非商业用途-保持一致”创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。
1730 0