https 如何作到安全

HTTPS

咱们都知道 HTTPS 传输安全,为何安全呢?密码学保证?下面介绍一些 HTTPS 用到的技术。算法

SSL/TLS

SSL(Secure Sockets Layer),中文叫安全套接层,是网景公司 90 年代中期设计来解决 HTTP 协议明文传输的缺点(嗅探、劫持、篡改)。浏览器

到 1999 年,IETF 把 SSL 标准化,标准化以后名称改成 TLS(Transport Layer Security),中文叫传输层安全协议。安全

HTTPS

什么是 HTTPS?网络

HTTPS = HTTP + SSL/TLS。网站

即不安全的 HTTP 协议加上 SSL/TLS 等于安全的 HTTPS。加密

加密解密

加密和解密是一对互逆的数学运算:操作系统

加密:明文 + 密钥 = 密文设计

解密:密文 + 密钥 = 明文对象

对称加密

对称加密的意思就是加密和解密使用相同的密钥,例如在压缩文件上设置密码,解密就须要输入相同的密码。数学

非对称加密

非对称加密则使用不一样的密钥(公钥和私钥)进行加密解密。

密钥交换

网站和浏览器之间要实现安全的密钥交换该如何实现?

方案一:使用对称加密算法

若是单纯使用对象加密算法,浏览器和网站之间必需要交换密钥,密钥直接用明文传输很容易被窃取,没法保证密钥的安全性。

方案二:使用非对称加密算法

  1. 网站基于非对称加密算法随机生成一对密钥对 x,y,目前还很安全,只有网站知道
  2. 网站把 x 留在手里,把 y 用明文传输到浏览器(y 有可能被窃取)
  3. 浏览器拿到 y 以后,先随机生成第三个对称加密的密钥 z,而后用 y 加密 z 获得最新的 f(本质上就是用非对称加密保证对称加密的安全性),将 f 发送到网站(由于 x,y 是成对的,只有 x 才能解密 y 加密的结果,全部 y 泄露也没法解密 k)
  4. 网站拿到 f 以后,用 x 解密获得 z,至此浏览器和网站都有对称加密的密钥 z,能够进行通讯加密

思考一下,方案二是否安全和完美?

依旧不安全,方案二能够在必定程度上防止嗅探,但没法防范网络数据篡改(中间人攻击)。

在网站和浏览器交换密钥的过程当中,中间人接收网站发送的密钥 y 保存下来,改用本身生成的密钥对伪形成网站与浏览器交互,同时使用密钥 y 伪形成浏览器与网站交互。

方案二不安全的根源是缺少可靠的身份认证,浏览器没法鉴别本身收到的密钥是否是来自网站。

所以须要引入 CA 证书机制(身份认证),基于 CA 证书进行密钥交换(具体 CA 机制可查看另外一篇介绍 CA 的文章)。

此时获得方案三:

  1. 网站首先花钱从权威 CA 机构那里购买一个数字证书,证书一般包含一个私钥和一个公钥证书文件
  2. 浏览器访问网站时将公钥证书文件发送给浏览器
  3. 浏览器验证收到的证书(权威机构担保真假,主流浏览器和操做系统都会内置权威 CA 机构的根证书)
  4. 若是证书可信,就随机生成一个对称加密密钥 k,使用公钥加密 k,获得密钥 c
  5. 将密钥 c 发送到网站,网站根据私钥解密出密钥 k,至此密钥交换完成

这就是 HTTPS 加密传输的过程。

相关文章
相关标签/搜索