HTTPS 协议是由 HTTP 加上 TLS/SSL 协议构建的可进行加密传输、身份认证的网络协议。HTTPS 标准端口是 443。TLS/SSL 中使用了非对称加密,对称加密以及 Hash 算法。

SSL层使用密钥对HTTP数据加密,再发送给TCP;

获取证书

  1. 向 CA 机构提交申请,提交信息包括:

    • 公司信息
    • 域名
    • 加密算法(例如:RSA)
    • Hash 签名算法(例如:sha256)
    • 加密位数
  2. CA 机构收到证书申请,发送证书和私钥给申请者,证书包含这些信息:

    • 证书内容(域名、公钥、有效期等等)
    • 证书签名(Hash 签名算法对内容摘要,CA 机构再用自己的私钥对摘要进行加密,得到证书签名)
签名就是在信息的后面再加上一段内容
CA 机构发送给申请者的私钥和证书中公钥是一对。这里的公钥用于加密随机数,私钥用于解密随机数,随机数用来生成密钥,加密传输内容。
还有一对密钥,分别是CA机构的私钥,和客户端电脑上的公钥,私钥在生成证书时对证书内容摘要加密,公钥用于浏览器客户端对证书内容摘要进行解密,证明了证书来自于信任的权威机构,验证服务器身份。

https 连接过程

获取数据加密密钥

SSL发送一组握手数据,生成数据加密密钥,建立通信;

  1. 客户端发送 Client Hello 给服务端,包含以下信息:

    • 支持的 TLS 版本
    • 支持的加密方式
    • 随机数 random_C
    • 域名
  2. 服务端收到请求后,发送 server Hello,包含以下信息:

    • 确定 TLS 版本
    • 随机数 random_S
    • 确定加密方式
    • 证书

      • 内容(域名、公钥、有效期等等)
      • 签名
  3. 客户端收到请求后,将会做一下事情:

    • 验证证书

      • 操作系统和浏览器中存有 CA 机构的公钥。 客户端使用 CA 机构的公钥对签名进行解密,解密成功说明证书由 CA 机构颁发。
      • 签名成功解密后得到证书摘要。客户端使用 Hash 签名算法对证书内容进行摘要,然后和签名解密后的摘要比较,相等说明证书没有被修改过。证书内容(公钥、域名、有效期)可信。
      • 客户端验证证书内容的域名是否和当前网址是一致的,证书是否过期。
    • 生成随机数

      • 验证通过后,客户端生成随机数 Pre-master,然后用证书中的公钥进行加密,发送给服务端
  4. 服务端

    • 服务端使用 CA 机构给的密钥对加密的随机数进行解密,获取随机数 Pre-master
  5. 客户端/服务端

    • 服务端和客户端分别用根据 random_C,random_S 和 Pre-master 生成密钥,用于加密传输数据
第一步要确认服务端的身份是否可信,才能进行下面的数据传输。证书的作用就是确认服务端身份,确认证书来自权威可信机构,然后使用证书中的公钥保护随机数,最后通过随机数生成密钥,加密数据,且证书内容未作修改,证书内容可信,证书内容有效,从而确认服务端的身份。
以上只是单向认证,双向认证时客户端也要发送包含公钥的证书给服务端,服务端验证证书成功后,使用客户端的公钥加密通信方案,再给客户端,然后客户端生成随机数 Pre-master,根据随机数生成的密钥加密传输数据。
服务端证书可信后,再使用申请证书时生成的公钥对随机数加密,服务端收到后用申请证书时生成的私钥解密。保证了随机数的安全性,不会被第三方解密获取。
传输数据的密钥根据随机数 Pre-master 生成的,所以随机数保密十分重要。直接使用证书的公钥和私钥去加、解密传输数据比较慢。

加密算法

  • 非对称加密算法:RSA,DSA/DSS
  • 对称加密算法:AES,RC4,3DES
  • Hash 算法:MD5,SHA1,SHA256

小正
42 声望4 粉丝

« 上一篇
http缓存