对Https的认识

本文是对Https原理整体的认识,没有对涉及到的技术和知识点展开深层次的阐述,后期有时间的情况下会逐步完善。

本文涉及到的知识点

  • 对称加密和非对称加密
  • 消息摘要
  • 数字签名
  • 数字证书(自签名证书和CA证书,自签名证书需要在客户端配置进行校验)
  • TLS和SSL
  • 单向认证和双向认证
  • CA根证书

Http && Https

Http协议通信采用的明文传输内容,传输内容容易被截获,这样就很不安全,所有Https就应用而生了。
简单来说,Https = Http + TLS/SSL,在Http的基础上用TLS协议对传输内容进行加密,这样就可以确保网络交互的安全。Http和Http使用的默认端口分别是80和443。
Https的安全性体现在三个方面:

  • 对内容进行加密
  • 对交互方身份认证
  • 保证通信数据的完整性

TLS/SSL加密

对称加密

加密和解密采用相同的密钥,优点是速度快,加密效率高;缺点是交互双方协商的密钥一旦泄漏,双方的通信就不再安全

非对称加密

有一对密钥,分别是公钥和私钥,用公钥加密的内容只能用私钥解密,用私钥加密的内容只能用公钥解密;缺点是速度慢,效率比较低,尤其对于加密数据比较庞大时弊端更加明显

对称加密 + 非对称加密

TLS协议采用的是对称和非对称结合的方式。首先的疑问是:两种加密方式会不会更慢?答案是不会,因为非对称加密只对对称加密的密钥进行加密,这样客户端就可以放心的把对称加密的密钥发送给服务器了,客户端与服务器短交互的内容是用对称加密的密钥来加密的。

TLS握手流程

下图是整个握手流程的简图

握手流程

服务端的证书从哪里来?

服务端的证书有两个来源

  • 从CA机构购买
  • 开发者创建自签名证书

对于服务端使用自签名证书的情况,客户端需要手动配置,将该证书添加到受信任列表,否则客户端对服务器端认证不通过,这就是单向认证。
对于服务端使用CA证书的情况,客户端一般预置了CA的根证书,只要根证书的兼容性够强,它能覆盖的客户端就越多,因此就不用手动添加对服务端的证书信任了。

单向认证 && 双向认证

简单来说,单向认证是客户端验证服务端的身份,双向认证是服务端同时要验证客户端的身份。
一般应用都是用的单向认证,只有对于安全级别要求较高的应用或场景才使用双向认证。

单向认证

单向认证

双向认证

双向认证

以上两张图片来源:Https单向认证和双向认证

消息摘要 – Message Digest

消息摘要就是对一个消息进行hash算法而得到的一个固定长度的唯一的字符串,如果消息被篡改了,那么消息摘要也要发生变化,所以消息摘要可以用来验证消息的完整性。常用的hash算法有SHA、MD5等。

数字签名 – Signature

服务端用私钥对消息摘要加密得到一个加密的字符串,这就是数字签名字符串,数字签名技术由非对称加密和消息摘要组合而成。

数字证书 – Certificate

数字证书由数字签名、公钥、证书的发布机构、证书的过期日期等信息组成

根证书 – Root Certificate

根证书是CA认证中心签发的数字证书,它能够代表CA机构的身份。 安装根证书代表受CA认证中心的信任。 根证书的签发者是它自己本身,下载根证书说明您对该根证书以下所签发的证书都表示信任。

坚持原创技术分享,您的支持将鼓励我继续创作!