跳转至

SSL

  • TLS(传输层安全)是更为安全的升级版 SSL

  • SSL握手协议(SSL Handshake protocol)

  • SSL记录协议(Record Protocol)

数字签名 数字签名就是“非对称加密+摘要算法”,其目的不是为了加密,而是用来防止他人篡改数据。

其核心思想是:比如A要给B发送数据,A先用摘要算法得到数据的指纹,然后用A的私钥加密指纹,加密后的指纹就是A的签名,B收到数据和A的签名后,也用同样的摘要算法计算指纹,然后用A公开的公钥解密签名, 比较两个指纹,如果相同,说明数据没有被篡改,确实是A发过来的数据。假设C想改A发给B的数据来欺骗B,因为篡改数据后指纹会变,要想跟A的签名里面的指纹一致,就得改签名,但由于没有A的私钥, 所以改不了,如果C用自己的私钥生成一个新的签名,B收到数据后用A的公钥根本就解不开。

https://www.ruanyifeng.com/blog/2014/02/ssl_tls.html

TLS过程: 1. ClientHello (client -> server),客户端向服务端提供以下信息:

  • 支持的协议版本
  • 一个客户端生成的随机数,稍后用于生成"对话密钥"
  • 支持的加密方法,比如RSA公钥加密
  • 支持的压缩方法

这里需要注意的是,客户端发送的信息之中不包括服务器的域名。也就是说,理论上服务器只能包含一个网站,否则会分不清应该向客户端提供哪一个网站的数字证书。这就是为什么通常一台服务器只能有一张数字证书的原因。 对于虚拟主机的用户来说,这当然很不方便。2006年,TLS协议加入了一个Server Name Indication扩展,允许客户端向服务器提供它所请求的域名。

  1. 服务器响应ServeHello

  2. 确认使用的加密通信协议版本

  3. 一个服务器生成的随机数,稍后用于生成"对话密钥"
  4. 确认使用的加密方法,比如RSA公钥加密
  5. 服务器证书

除了上面这些信息,如果服务器需要确认客户端的身份,就会再包含一项请求,要求客户端提供"客户端证书"。比如,金融机构往往只允许认证客户连入自己的网络,就会向正式客户提供USB密钥,里面就包含了一张客户端证书。

  1. 客户端回应

  2. 一个随机数。该随机数用服务器公钥加密,防止被窃听。

  3. 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
  4. 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验。