HTTP 与 HTTPS 的概念
HTTP
超文本传输协议
是一个基于请求与响应,无状态的,应用层的协议
常基于 TCP/IP 协议传输数据
以明文方式发送内容
HTTPS
安全套接字层超文本传输协议
通过计算机网络进行安全通信的传输协议
在 HTTP 的基础上加入了 SSL/TLS 协议
HTTP + 加密 + 认证 + 完整性保护 = HTTPS
@startuml
title http通信过程
actor 客户端 as client
participant 服务端80端口 as server
group 建立TCP连接(三次握手)
client->server:你能听到我说话吗?
client<-server: 我能听到你说话,你能听到我说话吗?
client->server :我也能听到,那我开始给你发数据了
end
group 客户端发送请求信息
client -> server:发送请求命令(GET/XX HTPP/X.X)
client -> server:发送请求头信息(如 User-Agent\ Host)
client ->server :发送请求体
end
group 服务端返回响应信息
client<-server :返回协议版本号与响应状态吗
client<-server:返回响应头信息
client<-server:返回响应体
end
group 关闭Tcp连接(四次挥手)
client -> server:我的数据已经都发送完毕
client <- server:我知道了,我这边可能还有数据要发送,请稍等
client <-server: 我的数据也发送完毕
client ->server:好的我知道了,那断开连接了
end
@enduml
@startuml
title HTTPS 通信过程
actor 客户端as client
participant 服务端443端口 as server
group 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(完毕)
end
group HTTP 通信
client -> server : 加密的请求
client <-- server : 加密的响应
end
group 关闭连接
client -> server : 请求关闭 SSL/TLS 连接
end
@enduml
总结:
http与https的区别
1https比http更安全
http是超文本传输协议,连接更简单,信息明文传输
https通过SSL/TLS提供安全方式
2http和https使用完全不同的连接方式
3http与https用的端口也不一样
http:80端口
https:443端口
4https协议需要到CA申请证书,可能需要一定费用