一、http与https的概念
HTTP | HTTPS |
---|---|
超文本传输协议 | 安全套接字超文本传输协议 |
是一个基于请求与响应、无状态的的协议,是应用层的协议 | 通过计算机网络进行安全通信的传输协议 |
常基于TCP/IP传输数据 | 在HTTP的基础上加入了SSL/TLS协议 |
以明文的方式发送内容 | HTTP+加密+认证+完整性保护=HTTPS |
二、http的通讯过程
HTTP 通信过程
actor 客户端 as client
participant 服务端80端口 as server
-
建立 TCP 连接(三次握手)
client → server : 你能听到我说话么?
client ← server : 我能听到,你能听到我说话么?
client → server : 我也能听到,那我开始给你发数据了哈~ -
客户端发送请求信息
client → server : 发送请求命令(GET /xx HTTP/x.x)
client → server : 发送请求头信息(如 User-Agent、Host)
client → server : 发送请求体 -
服务端返回响应信息
client ← server : 返回协议版本号与响应状态码
client ← server : 返回响应头信息
client ← server : 返回响应体 -
关闭 TCP 连接(四次挥手)
client → server : 我的数据已经都发送完毕啦
client ← server : 我知道了,我这边可能还有数据要发送,请稍等~
client ← server : 我的数据也发送完毕了
client → server : 好的我知道了,那断开链接了哈
三、https的通讯过程
actor 客户端 as client
participant 服务端443端口 as server
-
SSL/TLS 建立连接
client → server : ClientHello(你好呀,我请求建立 HTTPS 安全连接,包里是我支持的 SSL/TLS 版本和加密组件)
client ← server : SeverHello(收到,我选择好 SSL/TLS 版本和加密组件了,放包里了)
client ← server : Certificate(这是我的数字证书,我的公开密钥在证书里)
client ← server : ServerHelloDone(我的握手信息已经发送完毕了~)
client → client : 验证下服务端的数字证书
client → client : ClientKeyExchange(我先来生成一个对称加密秘钥 master_secret,然后用服务端数字证书中的公开密钥来加密这个 master_secret)
client → server : ChangeCipherSpec(这是用你的公开密钥加密过的会话密钥,请查收)
client → server : Client Finish(没问题的话后面我给你发的消息就都用会话密钥来加密了哈~)
server ← server : 使用我的私有密钥来解密一下,得到 master_secret
client ← server : ChangeCipherSpec(我已经得到会话密钥了,之后的消息我就都加密发送了)
client ← server : Server Finish(完毕) -
group HTTP 通信
client → server : 加密的请求
client ← server : 加密的响应 -
关闭连接
client → server : 请求关闭 SSL/TLS 连接
四、答案总结
问题:http与https的区别是什么?
- https比http更安全
- http是超文本传输协议,链接简单无状态,信息明文传输
- HTTPS通过TLS/SSL提高安全方式
- HTTP和HTTPS使用完全不同的连接方式
- HTTP和HTTPS使用的端口也不一样
- HTTP默认使用的是80
- HTTPS默认使用的是443端口
- HTTPS协议需要使用CA证书,可能需要一定的费用