星期二的时候给别人问到https,没回答好,现在重新梳理一次,方便以后查找
什么是HTTPS?
HTTPS 协议一般理解为HTTP+SSL/TLS,通过 SSL证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密。
SSL
SSL(Secure Socket Layer,安全套接字层):1994年为 Netscape 所研发,SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。
TLS
TLS(Transport Layer Security,传输层安全):其前身是 SSL,它最初的几个版本(SSL 1.0、SSL 2.0、SSL 3.0)由网景公司开发,1999年从 3.1 开始被 IETF 标准化并改名,发展至今已经有 TLS 1.0、TLS 1.1、TLS 1.2 三个版本。SSL3.0和TLS1.0由于存在安全漏洞,已经很少被使用到。TLS 1.3 改动会比较大,目前还在草案阶段,目前使用最广泛的是TLS 1.1、TLS 1.2。
端口
80 通讯
443 协商怎么加密
443可以改吗? 可以,但要知道是改成什么了
https:// 默认请求443
TLS是在TCP三次握手之后吗
是的,HTTPS 是先进行 TCP 三次握手,再进行 TLS(1.2版本) 四次握手
可参考: https://zhuanlan.zhihu.com/p/399105434
TLS握手过程
Client Hello
客户端发送:Client Hello
其中包含了TLS版本号,和支持的加密套件,还有随机数1
Server Hello
服务端会返回约定好的套件和随机数2
Certificate
这时候服务器在给客户端发送自己的证书,这样客户端就可以根据对照自己的证书信任列表来确认这个服务器是否可信
Server Key Exchange (服务器密钥交换)
把公钥发给客户端
Server Hello Done
告诉客户端发送完毕
Client Key Exchange
这时候就由客户端来生成预主密钥,而预主密钥会结果公钥的加密,然后发回给服务端
Change Cipher Spec (更改密码规范)
这一步告诉服务器往后的数据就用商议好的算法和密钥来加密了
Encrypted Handshake Message(加密握手消息,先是客户端发给服务端,然后服务端再发给客户端,双方都会发)
后续的通讯就用会话密钥来加密了
随机数1 + 随机数2 + 预主密钥 = 会话密钥