HTTPS
SSL(Secure Sockets Layer),有 v2 和 v3 两个版本,SSL 发展到 v3 时已经证明了它自身是一个非常好的安全通信协议,于是互联网工程组 IETF 在 1999 年把它改名为 TLS(传输层安全,Transport Layer Security),正式标准化,版本号从 1.0 重新算起,所以 TLS1.0 实际上就是 SSLv3.1。
TLS 由记录协议、握手协议、警告协议、变更密码规范协议、扩展协议等几个子协议组成,综合使用了对称加密、非对称加密、身份认证等许多密码学前沿技术。
数字证书
打开浏览器左上角,就可以看到当前网址对应的证书。证书的详细信息包含:版本号、序列号、签名算法、签名哈希算法、颁发者、有效期从、到、使用者、公钥、公钥参数、增强型密钥用法、使用者密钥标识符、授权信息访问、使用者可选名称、证书策略、CRL 分发点、SCT 列表、密钥用法、基本约束、指纹。
-
指纹:由 CA 机构对证书内容采用指纹算法,得到一个 hash 值,用于保证证书的完整性。若证书的信息若被修改,指纹内容也会发生变化。
-
验证证书合法性:服务端用私钥对指纹进行加密生成数字签名;客户端得到证书之后,通过对数字签名进行解密,得到指纹和证书内容,将证书内容进行散列得到的指纹与解密得到的指纹进行比对,即可验证证书是否被篡改。
加密过程:
-
1.浏览器将自己支持的一套加密规则发送给网站。
-
2.网站从中选出一组加密算法与 HASH 算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
-
3.获得网站证书之后浏览器要做以下工作:
- a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。
- b) 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。
- c) 使用约定好的 HASH 计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。
-
4.网站接收浏览器发来的数据之后要做以下的操作:
- a) 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。
- b) 使用密码加密一段握手消息,发送给浏览器。
-
5.浏览器解密并计算握手消息的 HASH,如果与服务端发来的 HASH 一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。