HTTPS简介

HTTPS用途

HTTPS协议安全性

https如何进行数据传输的?

握手过程

握手消息 动作描述 消息内容
1. Client —> ClientHello —> Server 客户端(浏览器)发送一个hello消息给服务端,发起建立SSL会话的请求。并告诉服务端,自己支持哪些加密算法(Cipher Suite List)。除此之外,还需要产生一个随机数(第一个随机数,用于以后生成对称密钥),发送给服务端。 1)支持的协议版本,如TLS 1.0版<br/>2)由客户端生成的随机数,用于生成后面的“对称密钥”<br/>3)支持的加密方法,比如RSA公钥加密<br/>4)支持的压缩方法<br/>5)请求的域名<br/>
2. Server —> ServerHello —> Client 服务端的首次响应,会确定加密协议版本,以及加密的算法,也会生成一个随机数(第二个随机数)给客户端。 1)协议的版本<br/>2)加密的算法<br/>3)服务端生成的随机数<br/>
3. Server —> Certificate —> Client 还会把自己的证书发送给客户端,让客户端进行校验。服务端证书中的公钥也可被用于加密后面握手过程中生成的对称密钥。 1)服务端证书<br/> 证书颁发机构的名称<br/> 证书本身的数字签名<br/> 证书持有者公钥<br/> 证书签名用到的Hash算法<br/>
4. Server --> ServerKeyExchange —> Client 指定使用哪种密钥协商协议。服务端可以在ServerKeyExchange之后立即发送CertificateRequest消息,要求校验客户端的证书。 1)使用哪种密钥协商方式<br/>2)密钥协商时客户端需要的信息
5. Server —> ServerHelloDone —> Client 服务器发送ServerHelloDone消息,告知客户端服务器这边握手相关的消息发送完毕。
6. Client —> ClientKeyExchange —> Server 消息中包含客户端这边的EC Diffie-Hellman算法相关参数,然后服务器和客户端都可根据接收到的对方参数和自身参数运算出对称密钥。 1)密钥协商时服务端需要的信息
7. Client —> ChangeCipherSpec —> Server ChangeCipherSpec消息,通知服务器此消息以后客户端会以加密方式发送数据。 准备好了做加密传输的通知
8. Client —> Finished —> Server 客户端计算生成对称密钥,然后使用该对称密钥加密之前所有收发握手消息的Hash值,发送给服务器,服务器将相同的会话密钥(使用相同方法生成)解密此消息,校验其中的Hash值。
9. Server —> ChangeCipherSpec —> Client ChangeCipherSpec消息,通知客户端此消息以后服务器会以加密方式发送数据。 准备好了做加密传输的通知
10. Server — > Finished —> Client 服务器使用对称密钥加密(生成方式与客户端相同)之前所发送的所有握手消息的hash值,发送给客户端去校验。
11. Application Data 真正的数据传输(使用对称加密)

1. Client Hello

2. Server Hello

3. Server Certificate

如何校验服务端证书呢?

CA怎么验证证书是不是自己颁发的呢?以及做证书内容校验?

* 浏览器通常也会内置大多数主流权威CA的根证书。
* 如果查找不到对应的可信CA,则判断这个证书是伪造的,不可信的。(浏览器则会提醒该证书不是可信任机构颁发的,并询问是否要继续访问)

4. Server Key Exchange

5. Server Hello Done

6. Client Key Exchange

7. Client Change Cipher Spec

8. Client Finished

struct {
    opaque verify_data[verify_data_length];
} Finished;

verify_data
   PRF(master_secret, finished_label,Hash(handshake_messages))
      [0..verify_data_length-1];

8.1. Server New Session Ticket

9. Server Change Cipher Spec

10. Server Finished

11. Application Data

参考文献

源链接

Hacking more

...