HTTPS

214 阅读3分钟

转载自:github.com/CyC2018/CS-…

HTTP与HTTPS

HTTP有以下缺点

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

HTTPS并不是新协议,而是让HTTP先和SSL(Secure Sockets Layer)通信,再由SSL和TCP通信,也就是说HTTPS使用了隧道进行通信(就是应用层下面加了一层SSL)

通过使用SSL,HTTPS具有了

  • 加密(防窃听)
  • 认证(防伪装)
  • 完整性保护(防篡改)

加密

对称加密

对称密钥加密(Symmetric-Key Encryption),加密和解密使用同一密钥。

  • 优点:运算速度快;
  • 缺点:无法安全地将密钥传输给通信方

非对称加密

非对称密钥加密,又称公开密钥加密(Public-Key Encryption),加密和解密使用不同的密钥。

公开密钥所有人都可以获得,通信发送方获得接收方的公开密钥之后,就可以使用公开密钥进行加密,接收方收到通信内容后使用私有密钥解密。

非对称密钥除了用来加密,还可以用来进行签名。因为私有密钥无法被其他人获取,因此通信发送方使用其私有密钥进行签名,通信接收方使用发送方的公开密钥对签名进行解密,就能判断这个签名是否正确。

  • 优点:可以更安全地将公开密钥传输给通信发送方;
  • 缺点:运算速度慢。

HTTPS采用的加密方式

HTTPS 采用混合的加密机制,使用非对称密钥加密用于传输对称密钥来保证传输过程的安全性,之后使用对称密钥加密进行通信来保证通信过程的效率。(下图中的 Session Key 就是对称密钥)

  • 在这个过程中使用了非对称密钥加密的功能

认证

通过使用证书来对通信方进行认证。 因为要保证客户端第一次拿到的是服务器的公钥; 证书是可以被切换的,但是被切换证书的颁发者一般是不合法的; 你可以去模拟正规机构办法的证书,但是由于指纹的影响很难做到;

指纹:证书机构将原来的信息通过指纹算法(一个hash算法)计算得到并用私钥加密与原信息一起发出去。用户先通过同样的hash算法计算指纹。而后使用公钥解密证书中的指纹;将两者进行对比(注意这里需要区分非对称加密的两种场景)

数字证书认证机构(CA,Certificate Authority)是客户端与服务器双方都可信赖的第三方机构。

服务器的运营人员向 CA 提出公开密钥的申请,CA 在判明提出申请者的身份之后,会对已申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公开密钥证书后绑定在一起。

进行 HTTPS 通信时,服务器会把证书发送给客户端。客户端取得其中的公开密钥之后,先使用数字签名进行验证,如果验证通过,就可以开始通信了。

  • 在这个过程中,使用了非对称密钥签名的功能

完整性验证

签名和验签保证了报文的完整性,因为就算数据被修改,在客户端验证签名时也能察觉到

签名、验签:不光是在第一次交换钥匙的时候使用,后面的所有HTTPS请求交互都会使用