浅析https协议

背景

HTTP为明文传输,起初设计HTTP协议的目的很单纯,就是为了传输超文本文件,那时候也没有太强的加密传输数据需求,因此HTTP一直保持着明文传输数据的特征。正是由于这一特性,传输过程当中的每一个环节,数据都有可能被篡改或窃取。算法

引入安全层

所以咱们须要引入一个加密方案。 从HTTP协议栈层面来看,能够在TCP和HTTP以前插入一个安全层,全部通过安全层的数据都会加密或者解密。浏览器

一般HTTP直接和TCP通讯,HTTPS则先和安全层通讯,而后安全层再和TCP层通讯。能够归纳为两个职责:安全

  • 对发起HTTP请求的数据进行加密操做
  • 对接收到HTTP的内容进行解密操做

初版:使用对称加密

对称加密即指加密和解密用的是相同的密钥 在HTTPS发送该数据以前,浏览器和服务器之间须要协商加密方式和密钥,过程以下服务器

  • 浏览器发送它所支持的加密套件列表(加密的方法)和一个随机数client-random
  • 服务器从加密套件列表中选取一个加密套件,而后还会生成一个随机数service-random,并将service-random和加密套件列表返回给浏览器
  • 浏览器和服务端分别返回确认消息
  • 浏览器和服务端利用相同的方法把client-random和service-random混合起来生成一个密钥master secret,而后开始进行数据的加密传输

缺点: client-random和seervice-random传输过程是明文的,黑客也能够拿到协商的加密套件和双方的随机数,黑客也能够合成密钥dom


第二版:使用非对称加密

非对称加密算法有A、B两把密钥,若是你用A密钥来加密,那么只能使用B密钥来解密。 服务器会本身保留私钥,而后将公钥以明文的方法发给浏览器函数

  • 首先浏览器仍是将加密套件列表发给服务器
  • 服务器会选择一个加密套件,而后将加密套件和公钥一块儿发送给浏览器
  • 而后就是浏览器和服务器返回确认消息
  • 这样浏览器在发送数据时就可使用该公钥来加密数据,而后服务器使用私钥来解密数据

缺点:网站

  • 非对称加密效率过低,影响页面打开速度
  • 没法保证服务器发送给浏览器的数据安全,服务端采用私钥加密,只能用公钥解密,黑客也是能够获取到公钥的,从而能够解开数据

第三版 对称加密和非对称加密搭配使用

基于以上两点缺点,能够选择一个更加完美的方案,在传输数据阶段依然使用对称加密,可是对称加密的密钥咱们采用非对称加密来传输加密

  • 浏览器向服务器发送对称加密套件列表、非对称加密套件列表和随机数client-random
  • 服务器保存随机数client-random,选择对称加密和非对称加密的套件,而后生成随机数service-random,向浏览器发送选择的加密套件、serice-random和公钥
  • 浏览器保存公钥,利用client-random和service-random计算出来pre-master,而后利用公钥对pre-master加密,并向服务器发送加密后的数据
  • 服务器拿出本身的私钥,解密出pre-master数据,并返回确认消息
  • 经过这三组随机数生成对称密钥,使用对称加密的方式来传输数据

pre-master是通过公钥加密以后传输的,因此黑客没法获取到pre-master,这样黑客就没法生成密钥,也就保证了黑客没法解密传输过程当中的数据了操作系统


第四版 添加数字证书

以上方式仍然存在问题,例如访问百度时,黑客有可能经过dns劫持将ip地址替换成黑客的ip地址,这样访问的就是黑客的服务器,黑客能够在本身的服务器上实现公钥和私钥。 那么怎么证实访问的服务器是百度的,就须要使用权威机构(Certiificate Atuthority)颁发的数字证书(Diital Certificate)。设计

对于浏览器来讲,数字证书有两个做用:

1)向浏览器证实服务器身份

2)数字证书中包含了服务器的公钥


数字证书的申请和验证

申请数字证书

  • 服务器准备一套私钥和公钥,私钥留着本身使用
  • 向CA机构提交公钥、公司、站点等信息并等待认证
  • CA经过线上、线下多种渠道来验证网站所提供信息的真实性
  • 审核经过,会颁发认证的数字证书,包含网站的公钥、组织信息、CA信息、有效时间、证书序列号,同时包含一个CA生成的数字签名

签名:CA使用Hash函数计算网站提交的明文信息,并得出信息摘要,而后再使用他的私钥对信息摘要进行加密,加密后的秘闻就是数字签名

浏览器如何验证数字证书

  • 读取证书中的明文信息,采用CA签名时相同的hash函数计算并获得信息摘要A,再利用对应CA的公钥解密签名数据,获得信息摘要B; 对比二者若是一致,则说明证书合法
  • 这时候验证了CA是谁,可是浏览器不知道该不应信任,就会继续查找给这个CA颁发证书的CA, 再以一样的方式验证它上级CA的可靠性。一般操做系统会内置信任的顶级CA的证书信息,若是这个CA链中没有找到浏览器内置的顶级CA,证书也会被断定非法

参考

极客时间《浏览器原理与实践》

相关文章
相关标签/搜索