引言
HTTPS是HTTP协议的安全版本,通过使用SSL(安全套接层)或TLS(传输层安全)协议加密通信,为数据传输提供了保密性、完整性和身份认证。与传统的HTTP相比,HTTPS能够防止敏感信息被窃取、篡改和劫持,为用户和网站提供了更安全可靠的通信方式。
常见的加密方式
对称加密:只有一个秘钥,加密和解密所用密匙是相同的。特点:算法公开,计算量小,加密速度快效率高。
非对称加密:有两个秘钥(公钥和私钥),用公钥加密只有持有私钥的接受者才能解密,反之亦可。特点:算法复杂,加密速度慢,但是秘钥的分发的管理比较容易。
对称和非对称加密进行通信
如上图所示,看上去似乎没问题,但其实一开始服务端向客户端发送S(秘钥协商时)就已经被中间人劫持。如下图
非对称+对称+证书
证书
服务端在使用HTTPS前,需要向CA机构申领一份数字证书,数字证书⾥含有证书申请者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书里获取公钥就行了,证书就如身份证,证明服务端公钥的权威性。
该证书所包含的主要信息如下:
证书持有人信息:证书中包含了证书持有人的身份信息,如姓名、电子邮件地址、组织名称等。这些信息用于确保证书的有效性和唯一性。
证书持有人的公钥:证书中包含了证书持有人的公钥。公钥是加密通信中的重要组成部分,用于加密数据和验证签名。
证书颁发机构信息:证书中包含了颁发该证书的证书颁发机构的信息,如名称、网址等。这些信息用于验证证书颁发机构的可信度和信任链。
证书序列号:证书中包含了唯一的证书序列号,用于标识该证书的唯一性。
证书的有效期限:证书中包含了证书的有效期限,即该证书的使用期限。过期的证书将不再被信任和接受。
数字签名:证书中包含了由证书颁发机构使用其私钥对证书内容进行加密生成的数字签名。数字签名用于验证证书的完整性和真实性。
通信过程
1.客户端请求:客户端发起HTTPS请求,连接到服务器。
2.证书解析:服务器响应并发送其数字证书给客户端。
3.CA证书验证:客户端使用内置的根证书或中间证书对服务器的证书进行验证。
4.验证签名:客户端使用CA的公钥解密服务器证书中的数字签名,得到数据摘要,并与服务器公钥加密的数据摘要进行对比,以验证证书的真实性。
5.证书链验证:如果证书是由中间CA颁发,客户端还需验证中间CA的合法性。
6.证书有效期验证:客户端检查证书是否在有效期内。
7.身份和安全性确认:一旦证书验证成功,客户端确认服务器的身份,使用证书中的公钥加密一个随机生成的对称密钥,并将其发送给服务器。
8.服务器解密对称密钥:服务器使用自己的私钥解密得到对称密钥。
9. 后续通信使用对称加密:客户端和服务器使用该对称密钥加密后续的所有通信数据
数字签名
数字签名是一种用于验证电子文档或数据完整性和真实性的技术手段。它类似于传统纸质文件的签名,在数字领域提供了身份认证、数据完整性保护和防止抵赖等功能。
数字签名的基本原理如下:
私钥和公钥:数字签名使用非对称加密算法。签名者拥有一对密钥,其中一个是私钥,用于生成数字签名;另一个是公钥,用于验证签名。
数据摘要:签名者首先对原始数据(例如文件或信息)进行哈希计算,生成唯一的数据摘要(也称为消息摘要或哈希值)。数据摘要的作用是将数据压缩成固定长度的字符串,具备唯一性和不可逆性。
数字签名生成:签名者使用私钥对数据摘要进行加密操作,生成数字签名。只有使用相应公钥可以验证数字签名的合法性。
数字签名验证:接收者获取到原始数据、数字签名和签名者的公钥。接收者使用签名者的公钥(CA公钥是公开的)对数字签名进行解密操作,得到解密后的数据摘要。然后,接收者对原始数据进行同样的哈希计算,生成新的数据摘要。最后将两个数据摘要进行比较,如果相同,则说明数据完整且未被篡改,数字签名有效。
中间人能篡改证书吗?
中间人理论上不能篡改证书,因为他们没有CA的私钥来重新生成匹配的数字签名。即使篡改了证书的明文,客户端在验证签名时会发现不一致,从而拒绝该证书。
总结
HTTPS工作过程中涉及到的秘钥有三组:
1.非对称加密(CA):用于检验证书是否被篡改,服务器持有(证书的)私钥(在形成CSR文件申请证书时获得),客户端持有公钥(操作系统包含了可信任的CA机构有哪些,同时持有对应的公钥)。服务器在客户端请求时返回携带签名的证书,客户端通过这个公钥进行证书验证,保证证书的合法性。
2.非对称加密(协商生成对称秘钥):客户端用收到的CA证书中的公钥(是被信任的)给随机生成的对称秘钥加密,传输给服务器,服务器通过私钥解密获取到对称加密秘钥。
3.对称加密(数据传输)