本文是对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认证中心的信任。 根证书的签发者是它自己本身,下载根证书说明您对该根证书以下所签发的证书都表示信任。