一直对 HTTPS
的概念模模糊糊。本篇详细介绍以下内容:
什么是
HTTPS
数字签名是什么?
CA
机构HTTPS
运行机制
https详解
什么是HTTPS
HTTPS
,也称作 HTTP over TLS
。 TLS
的前身是 SSL
。
HTTPS
和 HTTP
协议相比提供了
- 数据完整性:内容传输经过完整性校验
- 数据隐私性:内容经过对称加密,每个连接生成一个唯一的加密密钥
- 身份认证:第三方无法伪造服务端(客户端)身份,比如U盾是一种用于客户端身份认证的证书,https服务端会要求客户端将证书传送过去。
数字签名机制
通常为了保证数据传输过程数据不被篡改,我们会在传输数据中加上数字签名。
- 数据传输前
- 使用摘要算法(e.g.
Hash
)对传输内容进行加密 ,生成摘要(digest
) - 使用协商好的
RSA
公钥加密上一步生成的摘要, 从而得到数字签名
- 使用摘要算法(e.g.
- 接收到传输的数据后
- 使用
RSA
私钥解密数字签名,得到传输内容摘要 - 使用相同的摘要算法对传输内容加密,与上一步解密出来的摘要比对,不一致则已经被篡改
- 使用
CA 机构
又称为证书授权 (Certificate Authority) 机构,浏览器会内置这些 “受信任的根证书颁发机构” (即 CA
)
SSL/TLS
协议的基本思路是采用公钥加密法,也就是说,客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。而 HTTPS
又是基于 TLS
。
虽然使用数字签名机制可保证数据不被篡改,但却保证不了 公钥的可靠性 。假如遭受中间人攻击,客户端接收到中间人伪造的公钥,在客户端加密完成后,中间人再拦截传送内容,就可以使用自己的私钥截取消息。
CA
作为第三方权威机构,可以帮助客户端与服务器建立可靠的数据传输通道:
- 服务器向
CA
机构申请证书,CA
机构使用自己的私钥加密服务器提供的 公钥 及其他服务器信息(域名等),作为证书颁发给服务器。 - 浏览器会内置所有权威的
CA
机构的相关信息,比如公钥,用于解密服务器传递过来的证书,获取其中的 公钥 等信息。如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。
HTTPS 运行机制
客户端向服务器发起
HTTP
请求,发送支持的通信协议(e.g.TLS
)以及用于后续生成 对话密钥 的随机数。明文传输。服务器接收到 随机数 及 通信协议 ,同时也生成 随机数 (用于后续生成 对话密钥 ),同时将
CA
证书发送给客户端。明文传输。客户端接收到 随机数 及 证书后,首先匹配到对应的
CA
机构的公钥,解密出证书的颁发机构、域名、有效时间、服务器提供的公钥等信息,并一一校验。校验成功后,生成随机数(用于后续生成 对话密钥 ),并使用证书中服务器提供的公钥加密随机数,发送给服务器。服务器接收到数据后,使用私钥解密,得到随机数,加上第一二步中的两个随机数,使用双方约定的算法生成一个 “对话密钥” ,用于加密响应与解密请求。
客户端也由以上的三个随机数,得到一个相同的 对话密钥 ,用于加密请求与解密响应。
细节
- 三个伪随机数保证了最终生成的密钥更接近与随机
- 每次请求都会生成新的 对话密钥
- 对称加密与解密相对于
RSA
非对称加解密,保证了性能
参考链接
从 HTTP 到 HTTPS - 什么是 HTTPS
HTTPS 工作原理
阮一峰 - 数字签名是什么
阮一峰 - SSL/TLS协议运行机制的概述