你要知道的HTTP--HTTPS协议底层实现原理

663 阅读4分钟

http的缺点

  • 通信使用明文,内容可能会被窃听;
  • 不验证通信方的身份,因此有可能遭遇伪装;
  • 无法证明报文的完整性,有可能已遭篡改;

什么是HTTPS

HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer),其实 HTTPS 并不是一个新鲜协议,Google 很早就开始启用了,初衷是为了保证数据安全。

https简单的说就是安全版的http,因为http协议的数据都是明文进行传输的,所以对于一些敏感信息的传输就很不安全,为了安全传输敏感数据,网景公司设计了SSL(Secure Socket Layer),在http的基础上添加了一个安全传输层,对所有的数据都加密后再进行传输,客户端和服务器端收到加密数据后按照之前约定好的秘钥解密。

对称加密

对称加密是指用来加密和解密的是同一个秘钥。其特点是加密速度快,但是秘钥容易被黑客截获,所以安全性不高。常见的有AES、DES算法。

假如http只采用对称加密的方式进行通信,由于密钥是共享的,如果被中间人拦截得到密钥那么加密的意义就不存在了。那么有人可能就想到了非对称加密的方式。

非对称加密

加密和解密时使用不同的密钥,一般成对出现,称公钥和私钥。用公钥加密的数据需要用私钥来解密,用私钥来加密的内容需要用公钥来解密。非对称加密的特点是安全性高,缺点是加密效率低,需要进行大量的运算。常见的有RSA算法。

假如http只采用非对称加密的方式进行通信,咋一看是完美的中间人不可能得到私钥所以就无法解密。但是由于http并不能验证通信方的身份,所以就不能保证收到的公钥是真实你想要的通信用户的公钥,一旦是中间人的公钥这样也是不能保证完全的安全。所以就出现了第三方权威认证机构,这样就保证了通信的方身份的确认。

如果全部采用非对称加密的方式那样通信效率是很低的,他需要进行大量的运算。所以是同时采用对称加密和非对称加密的方式进行通信。真正的通信也是首先将对称加密的密钥用非对称加密的方式传输,之后的通信都采用对称加密的方式。

摘要

一段信息或者一个文件通过某个哈希算法(也叫摘要算法)而得到的一串字符。常用的摘要算法有MD5、SHA等。

数字签名

数字签名就是摘要通过私钥加密后的信息。

数字证书

数字证书是一个经证书授权中心生成的文件,数字证书里一般会包含公钥、公钥拥有者名称、CA的数字签名、有效期、授权中心名称、证书序列号等信息。其中CA的数字签名是验证证书是否被篡改的关键,它其实就是对证书里面除了CA的数字签名以外的内容进行摘要算法得到一个摘要,然后CA机构用他自己的私钥对这个摘要进行加密就生成了CA的数字签名,CA机构会公开它的公钥,验证证书时就是用这个公钥解密CA的数字签名,然后用来验证证书是否被篡改。

身份认证

CA机构:第三方身份认证的权威机构。CA认证机构会检验签名会信任一些CA认证证书。它会生成一对公钥和私钥。将公钥给网站证书,把私钥给网站。

浏览器收到证书后去验证,解析证书得到相关信息,然后使用公钥将证书中的数字签名进行解密得到摘要,使用同样的规则将相关进行Hash运算得到的值与摘要进行对比,如果相同就代表验证通过。

HTTPS握手过程

  • Client Hello:初次建立握手,发送的数据有tls/ssl版本,Random对称机密算法需要用的随机值,Cipher Suites允许使用的加密算法
  • Server Hello:tls版本、Cipher Suites服务端选择的加密方式、Random、Session ID(是否有值可以看出是否请求过该服务)
  • Certificate:发送证书
  • Server Key Exchange对称加密密钥协商
  • Server Hello Done
  • Client Key Exchagne, Change Cipher Spec, Encrypted Handshake Message(客户端生成密钥,切换密钥通讯,验证密钥是否正确)
  • New Session Ticket(服务器告诉客户端之后要使用这种方式通信)
  • Change Cipher Spec(切换密钥通信)
  • Encrypted Hanldeshake Message(服务器验证客户端这个消息,双方通过算法产生的密钥是相同的)
  • Application Data(http-over-tls,也就是所谓的https协议,唯一不同的就是多了一个Encrypted Application Data加密的数据, 之后的通信都在这里)