HTTPS是如何保障数据传输安全的

须要对密码学简单认识一下

什么是对称加密、非对称加密、单向散列、消息认证码、数字签名、证书、PKI体系算法

信息安全浏览器

  • 机密性:信息是否被泄漏。使用对称加密、非对称加密来保证
  • 完整性:信息是否被修改,使用单向散列、消息认证码、数字签名来保证
  • 真实性:发送者是否冒名顶替的。使用消息认证码、数字签名来保证
  • 不能否认性:作过了会不会抵赖。使用数字签名来保证

对称加密

实现信息安全的机密性,那么可使用对称加密安全

什么是对称加密:服务器

  • 使用同一个密钥进行加密解密,算法速度快。
  • 对称加密常见的算法是DES和AES。
  • 对称加密算法经常使用来加密大量内容。

对称加密.png

非对称加密

实现信息安全的机密性,那么可使用非对称加密markdown

什么是非对称加密:并发

  • 拥有俩个密钥:公钥和私钥,公钥公开的给别人,私钥本身保存着。
  • 公钥加密后的密文可使用私钥来解密
  • 私钥加密后的密文可使用公钥来解密
  • 对比与 对称加密要慢上许多
  • 常见的非对称算法是RSA

非对称加密.png

使用非对称加密算法能够直接加密信息。好比小明生成本身的密钥时,把公钥对外公开。小红想向小明传输信息可以使用小明的公钥对消息加密后再发送,而后小明收到后能够用本身的私钥来解密。其余人即时获得加密后的信息也没法破解。svn

不过这样使用开销很大,通常现实中使用对称加密来加密原始消息,使用非对称加密来传输用来加密消息的对称密钥,(用非对称加密来加密对称加密的密钥。)函数

单向散列(hash)

能够用单向散列来证实数据的完整性flex

不定长的数经散发处理后会压缩成固定长度。其特色是相同的输入必定有相同的输出,不一样的输入几乎没有相同的输出,根据输出没法还原输入。网站

场景举例:咱们再网站上对外公布了一个10Gb大小的资源连接和对应的sha256哈希值。用户从第三方下载到相似资源后能够作sha256散列运算,若是计算的哈希值和咱们原始资源的哈希值相同,就表示数据是真实完整的

常见的散列算法有:MD5(不安全)、SHA一、SHA256

消息认证码(hmac)

消息认证码就是带密钥的散列函数

特色:

  1. 大量信息通过处理变成短小固定长度值(有点相似单向散列)
  2. 消息不一样或者密钥不一样会致使结果不一样
  3. 没法从结果“解密”出原始信息

消息认证码.png

toekn = header(算法名)+ '.' + payload(有用信息) + '.' + hmac(header + '.' + patload,密钥)

使用场景:JWT鉴权使用的token就用到了消息认证码。当服务器把token发送给客户端,客户端下次请求时要带上token,服务器收到token后会截取 header + '.' + payload 作hmac运算,获得的结果和token的第三部分即hmac作对比。

数字签名

小明使用私钥对消息加密即签名,其余人使用小明的公钥若是能解密表示消息必定是小明发的。

签名能防止抵赖的发生,用来保证信息的不能否认性

数字签名.png

证书与PKI体系

一个证书上包含一些公开的明文信息以及证书颁发者对该信息的签名(私钥加密)。任何人想验证证书信息的真伪,只须要用证书颁发者的公钥对签名进行解密,再和证书上的明文信息作对比便可。

image.png

HTTPS是如何作密钥协商的

什么是HTTPS

HTTPS是超文本传输安全协议,在HTTP的基础上经过传输加密和身份认证保证了传输过程的安全性。

HTTPS = HTTP + SSL

HTTP与HTTPS的区别

  • HTTP的url是 http:// 开头 , HTTPS的url是 https:// 开头。
  • HTTP使用 80 端口 , HTTPS使用 443 端口。
  • HTTP数据传是明文传输,不安全。 HTTPS数据加密了,可保证数据私密性、完整性、防止中间人攻击。

SSL/TLS协议流程(HTTPS握手过程)

详细流程:

  1. 浏览器将本身支持的一套加密算法发给服务器,同时发一个浏览器随机数
  2. 服务器向浏览器发送选择的加密算法、服务器生成的随机数、服务器数字证书
  3. 浏览器收到证书后对证书的CA签名进行验证,若是验证经过,会从证书中拿到服务器的公钥。
  4. 浏览器对浏览器随机数+服务器随机数进行处理,生成预备主密码。
  5. 浏览器使用服务器的公钥对预备主密码进行加密,发给服务器。
  6. 服务器收到后使用本身的私钥解密出预备主密钥。
  7. 浏览器和服务器分别使用预备主密钥和俩个随机数,生成共享主密钥。
  8. 两者使用共享主密钥,使用对称加密算法加密数据。

简单的来讲:

  1. 浏览器使用HTTPS的url访问服务器与服务器创建SSL链接。
  2. 服务器收到请求行,会发送包含公钥的证书
  3. 浏览器使用公钥加密对称密钥并发送给服务器
  4. 服务器使用私钥解密对称密钥
相关文章
相关标签/搜索