HTTPS 协定是由 HTTP 加上 TLS/SSL 协定构建的可进行加密传输、身份认证的网络协议。TLS 的前身是 SSL,TLS1.0 就是 SSL3.1,TLS1.1 是 SSL3.2,TLS1.2 则是 SSL3.3。HTTPS 规范端口是 443。TLS/SSL 中应用了非对称加密,对称加密以及 Hash 算法。
证书产生过程
-
向 CA 机构提交申请,提交信息包含:
- 公司信息
- 域名
- 加密算法(例如:RSA)
- Hash 签名算法(例如:sha256)
- 加密位数
-
CA 机构收到证书申请,发送证书和私钥给申请者,证书蕴含这些信息:
- 证书内容(域名、公钥、有效期等等)
- 证书签名(Hash 签名算法对内容摘要,CA 机构再用本人的私钥对摘要进行加密,失去证书签名)
签名就是在信息的前面再加上一段内容
CA 机构发送给申请者的私钥和证书中公钥是一对。这里的公钥用于加密,私钥用于解密。
https 连贯过程
-
客户端发送 Client Hello 给服务端,蕴含以下信息:
- 反对的 TLS 版本
- 反对的加密形式
- 随机数 random_C
- 域名
-
服务端收到申请后,发送 server Hello,蕴含以下信息:
- 确定 TLS 版本
- 随机数 random_S
- 确定加密形式
-
证书
- 内容 (域名、公钥、有效期等等)
- 签名
-
客户端收到申请后,将会做一下事件:
-
验证证书
- 操作系统和浏览器中存有 CA 机构的公钥。客户端应用 CA 机构的公钥对签名进行解密,解密胜利阐明证书由 CA 机构颁发。
- 签名胜利解密后失去证书摘要。客户端应用 Hash 签名算法对证书内容进行摘要,而后和签名解密后的摘要比拟,相等阐明证书没有被批改过。证书内容(公钥、域名、有效期)可信。
- 客户端验证证书内容的域名是否和以后网址是统一的,证书是否过期。
-
生成随机数
- 验证通过后,客户端生成随机数 Pre-master,而后用证书中的公钥进行加密,发送给服务端
-
-
服务端
- 服务端应用 CA 机构给的密钥对加密的随机数进行解密,获取随机数 Pre-master
-
客户端 / 服务端
- 服务端和客户端别离用依据 random_C,random_S 和 Pre-master 生成密钥,用于加密传输数据。
第一步要确认服务端的身份是否可信,能力进行上面的数据传输。证书的作用就是确认服务端身份,确认证书来自权威可信机构,且证书内容未作批改,证书内容可信,证书内容无效,从而确认服务端的身份。
以上只是单向认证,双向认证时客户端也要发送蕴含公钥的证书给服务端,服务端验证证书胜利后,应用客户端的公钥加密通信计划,再给客户端,而后客户端生成随机数 Pre-master,依据随机数生成的密钥加密传输数据。
服务端证书可信后,再应用申请证书时生成的公钥对随机数加密,服务端收到后用申请证书时生成的私钥解密。保障了随机数的安全性,不会被第三方解密获取。
传输数据的密钥依据随机数 Pre-master 生成的,所以随机数窃密非常重要。
加密算法
- 非对称加密算法:RSA,DSA/DSS
- 对称加密算法:AES,RC4,3DES
- Hash 算法:MD5,SHA1,SHA256