基本流程
客户端(如浏览器)先发起一个 HTTPS 请求,服务端响应这个请求,并发送给客户端 TA 的证书。浏览器检查 CA 证书是否合法。不合法浏览器会给出警告。合法则浏览器生成一个随机数,并用 CA 证书里服务端的公钥加密随机数。接着浏览器将用公钥加密后的随机数传给服务端,服务端用对应的私钥解密加密后的随机数,得到随机数。接下来服务端通过随机数对接下来的通信数据进行对称加密,并把加密后的数据传给客户端。之后的内容都通过对称加密传输。客户端有随机数,得到加密后的数据可以解密。
细节
建立连接具体细节
先是 TCP 3 次握手,然后客户端再发一个 Client Hello 的包,然后服务端响应一个 Server Hello,接着再给客户端发送证书。
在 Client Hello 包里,会告知使用的 TLS 版本,一个随机数,支持的加密套件。
Server Hello 里有:选中的加密套件。
接着服务端一般会发送给客户端好几个证书。
CA 证书
认证机构用自己的私钥对
-
证书包含?
颁发机构信息
服务端公钥
公司信息
域名
有效期
指纹
…
-
证书验证链
非对称加密
对称加密
前向安全性
TLS (Transport Layer Security)传输层安全性协议
SSL(Secure Sockets Layer)安全套接层
疑问
降级
HTTPS 的 URL 是加密的吗?
非浏览器等客户端会如何“告警”?
如 SSH 需要手动验证签名是否正确。