HTTPS中SSL/TLS握手时的私钥用途(RSA、ECDHE)

从上一篇HTTPS中CA证书的签发及使用过程中知道服务端在申请CA证书时只上交了密钥对中的公钥,那么只有服务端知道的私钥有什么做用呢?html

SSL/TLS层的位置

SSL/TLS层在网络模型的位置,它属于应用层协议。接管应用层的数据加解密,并经过网络层发送给对方。算法

SSL/TLS协议分握手协议和记录协议,握手协议用来协商会话参数(好比会话密钥、应用层协议等等),记录协议主要用来传输应用层数据和握手协议消息数据,以及作加解密处理。咱们应用层的的消息数据在SSL记录协议会给分红不少段,而后再对这个片断进行加密,最后在加上记录头后就发送出去。缓存

SSL/TLS 握手协议又细分为四个子协议,分别是握手协议、密码规格变动协议、警告协议和应用数据协议。安全

握手流程(HTTPS中TLS/SSL的握手过程

首先是TCP握手,TCP三次完成以后才进入SSL握手,SSL握手老是以ClientHello消息开始,就跟TCP握手老是以SYN包开始同样。服务器

SSL/TLS握手时的私钥用途(RSA、ECDHE)

两种使用方式分别是:使用RSA来作密钥交换和使用ECDHE来作密钥交换。对于RSA来讲,客户端生成预主密钥,而后用公钥加密再发给服务器,服务器用私钥来解密获得预主密钥,而后由预主密钥生成主密钥,再由主密钥生会话密钥,最后用会话密钥来通讯。网络

 

对于ECDHE来讲,客户端和服务器双方是交换椭圆曲线参数,私钥只是用来签名,这是为了保证这个消息是持有私钥的人给我发的,而不是冒充的。双方交换完参数以后生成预主密钥,再生成主密钥和会话密钥。这就跟刚才RSA后面的流程同样了。session

能够看出RSA和椭圆曲线密钥交换算法的私钥用途是不同的,RSA密钥交换时是用来作加解密的,椭圆曲线密钥交换时是用来作签名的。函数

SSL/TLS中的预主密钥、主密钥和会话密钥

主密钥是由预主密钥、客户端随机数和服务器随机数经过PRF函数来生成;会话密钥是由主密钥、客户端随机数和服务器随机数经过PRF函数来生成,会话密钥里面包含对称加密密钥、消息认证和CBC模式的初始化向量,但对于非CBC模式的加密算法来讲,就没有用到这个初始化向量。加密

session 缓存和session ticket里面保存的是主密钥,而不是会话密钥,这是为了保证每次会话都是独立的,这样才安全,即便一个主密钥泄漏了也不影响其余会话。spa

 

还有不少其余的密码交换/协商机制:http://www.javashuo.com/article/p-nddogmha-gx.html

 

主要摘自http://www.360doc.com/content/18/0606/20/13644263_760231690.shtml

相关文章
相关标签/搜索