经典面试题-HTTP与HTTPS的区别

本文引用自霍格沃兹测试开发学社录播课

HTTP 与 HTTPS 的区别

霍格沃兹测试开发学社
http://ceshiren.com

经典面试题

  • HTTP 与 HTTPS 的区别是什么?

考察点

  • 《计算机网络》相关知识
  • 了解 HTTP 与 HTTPS 协议的特点
  • 理解 HTTP 与 HTTPS 的通信过程

技术点

  • HTTP 与 HTTPS 的概念
  • HTTP 通信过程
  • HTTPS 通信过程

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 HTTP/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 的区别是什么?

  1. HTTPS 比 HTTP 更安全
    • HTTP 是超文本传输协议,连接简单无状态,信息明文传输
    • HTTPS 通过 SSL/TLS 提供安全方式
  2. HTTP 和 HTTPS 使用完全不同的连接方式
  3. HTTP 和 HTTPS 用的端口也不一样
    • HTTP 是 80 端口
    • HTTPS 是 443 端口
  4. HTTPS 协议需要到 CA 申请证书,可能需要一定费用: