HTTPS

 

1 HTTP缺点

HTTP是明文传输的,也就意味着,介于发送端、接收端中间的任意节点均可以知道传输的内容是什么。算法

所以HTTP具备以下的缺点:服务器

  1. 窃听风险:被第三方通讯内容。session

  2. 篡改风险:第三方修改客户端和服务券的通讯内容。dom

  3. 冒充风险:第三方能够仿冒客户端或者服务端发给对端的通讯内容。

2 HTTPS

HTTPS实际上是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会经过TLS进行加密,因此传输的数据都是加密后的数据函数

 

2.1 客户端发起HTTPS请求

客户端与服务端之间创建TCP链接,使用的是443端口ui

 

2.2 handshake协议(握手协议)

client发送ClientHello,指定版本,随机数(RN),全部支持的密码套件(CipherSuites):加密

  1. TLS的版本
  2. 随机数:这个是用来生成最后加密密钥的影响因子之一,包含两部分:时间戳(4-Bytes)和随机数(28-Bytes)
  3. session-id:用来代表一次会话,第一次创建没有。若是之前创建过,能够直接带过去。
  4. 加密算法套装列表:客户端支持的加密-签名算法的列表,让服务器去选择。
  5. 压缩算法:彷佛通常都不用
  6. 扩展字段:好比密码交换算法的参数、请求主机的名字等等

 

 

收到client hello后,服务器恢复ACK,没有使用捎带确认spa

 

 

server回应ServerHello,指定版本,RN(服务器生成的随机数,稍后用于生成"对话密钥"),选择CipherSuites,会话ID(Session ID)server

经过这一步,客户端和服务器就完成了加密和签名算法的交换。xml

 

server发送Certificate

而后,服务器给客户端展现证书

ServerKey Exchange:用来发送密钥交换算法相关参数和数据的。根据密钥交换算法的不一样,传递的参数也是不一样的。

ServerHello Done:服务器要传输的信息结束

 

client拿到servercertificate后,就能够开始利用certificate里的public key进行session key的交换了。

ClientKey Exchange:客户端对Server Key Exchange的回应,用于交换密钥须要的参数。和服务器同样,不一样的密钥交换算法实现是不同的,所以须要的参数也是有差别的:包含pre-master secret。客户端生成第三个随机数。若是是采用RSA算法,会生成一个48字节随机数,而后用server的公钥加密以后再放入报文中;

change_cipher_spec 客户端使用上面的3个随机数client random, server random, pre-master secret, 计算出48字节的master secret, 这个就是对称加密算法的密钥。

Server-Client已经将服务器认证的相关工做作完了,密文函数&密钥交换须要的参数也都相互传递了。

  1. server hello 中选择了加密函数
  2. ServerKey Exchange:传递加密函数的一个参数
  3. ClientKey Exchange:传递了机幂函数的另外一个参数。这个参数是使用服务器的公钥加密过的

Encrypted Handshake Message:代表握手已经完成,而且对以前发过的数据进行加密发送给对方作校验,防止被篡改。同时也验证一下,加密算法、密钥工做是否正常。

 

 

 

 

 

总结

SSL/TLS握手过程能够分红两种类型:

  1. 双向认证,就是双方都会互相认证,也就是二者之间将会交换证书。
  2. 单向认证,客户端会认证服务器端身份,而服务器端不会去对客户端身份进行验证

这个过程实际上产生三个随机数:client random, server random, pre-master secret.前两个随机数都是明文传送的,只有pre-master secret是加密的(RSA或者DH)。server使用RSA证书,RSA便可以用做签名也能够用做不对称加密,pre-master secret就是用server的RSA证书中包含的公钥加密的。

 3 HTTP与RAS

RSA算法在:

  1. 证书签名的时候
  2. 密钥交换

RAS计算过程:

  1. 选两个超级大的素数:p 和 q

  2. 把他们乘起来:n = p * q

  3. 而后把p-1和q-1也乘起来:m = (p - 1) * (q - 1)

  4. 再找一个和m互质的数:e -> gcd(e, m) = 1

  5. 最后,找一个d,知足:(e * d) mod m = 1而后公钥就是(n, e)的组合,私钥就是(n, d)的组合

4 HTTPS与STL

TLS要作的事情就是两个:身份校验 & 加密算法和密钥协商。

相关文章
相关标签/搜索