HTTP介绍
http(Hypertext Transfer Protocol)协议中文称为超文本传输协议,其主要的作用就是定义浏览器与服务器的交互规则。http采用低层协议为tcp协议,且http是无状态协议。
HTTP请求模型与响应模型
请求格式:
响应格式:
在进行交互时利用套接字编程把对应的数据按照协议规定填充到对应的地方形成字符串,在通过TCP传输到服务器/客服端,服务器或者客服端再解析这些字符串进行对应的操作,一次http交互就完成了
HTTP通信过程
由于HTTP作为应用层协议,底层靠tcp协议实现,其默认端口为80,主要通信过程如下:
- 服务器监听80端口,也就是通过套接字(Socket)监听端口
- 客户端发起一个tcp连接到服务器,也就是创建套接字
- 服务端收到来自客服端的连接请求,并建立连接
- 客户端发送请求,服务器响应请求,双方通过HTTP定义的协议相互交互消息
- 关闭tcp连接
套接字编程就是HTTP协议的具体实现过程。
HTTP的优点
- 易扩展:可以增加新的约定而不影响已有的约定
- 全平台支持:所有连接网络的设备都可以使用http协议与服务器交互数据
- 速度快
HTTPS介绍
HTTPS(Hyper Text Transfer Protocol Secure)基于HTTP,是HTTP的安全版本,其端口为443,低层实现与HTTP并没有太多的区别,因为HTTP采用的明文传输,而在网络任何人都可以通过抓包工具抓取报文,所以HTTP是不安全的,所以就推出了HTTPS,HTTPS传输的是密文,通过SSL/TLS协议作加密和安全认证。
HTTPS保证安全的核心机制----SSL/TLS
SSL与TLS
这两个是同一个协议,只是版本不同,SSL中文称安全套接字协议(Secure Sockets Layer)由于SSL1.0和2.0都有很多缺陷,在升级为SSL3.0时改名为TLS,所以TLS是基于SSL的,不过为了方便就把 HTTPS 中的核心加密协议称为SSL/TLS
SSL/TLS的工作原理
SSL/TLS主要核心就是非对称加密和对称加密,典型的非对称加密有(RSA),对称加密有(AES)这里为了方便描述和观看就使用英文简称代替前面的中文名称。
RSA生成一个公钥一个私钥,公钥用于加密需要传输的数据,私钥用于解密,且也只有对应公钥的私钥才能解密。
在客户端与服务器通信时把双方的公钥公布给对方,再使用对应的公钥把需要传输的数据进行加密为密文,把密文传输到服务器或者客户端时,再使用自己私钥进行解密,拿到明文。
但是如果使用RSA把所有需要传输的数据进行加密非常的耗费性能,而AES则相对性能要好的多,但是AES只生成一个秘钥,这个秘钥既能加密,也能解密,那该如何将秘钥传输给对方而又保证秘钥的安全性呢?
所以有了另一个解决方案:先使用AES加密需要传输的数据,再使用RSA加密AES的秘钥,再把加密的数据和密匙传输给对方,客服端或者服务器拿到传输过来的密文后,先用自己的RSA私钥解密AES的秘钥,再用秘钥解密数据,这样就既保证了数据的安全性,性能也不算太差。
但是这里又引出了另一个问题:**如何保证双方拿到的RSA公钥是对方生成的呢?**万一有个人伪造公钥发给客户端,客户端也不知道呀,客户端用这个公钥进行加密传输,他给你拦截了,他不就获得了客户端发送的数据了
这里就引出了一个重要的机制:数字签名
数字签名
数字签名就是为了防止数据被伪造,抵赖,相当于显示生活中在假条上面签名盖章一样。
数字签名依赖哈希算法和非对称加密算法。
现在客户端/和服务器通信,双方都害怕发过来的公钥是伪造的,它们就去找一个三方机构-证书颁发机构(Certificate Authority简称CA),CA知道服务器的公钥,CA使用哈希算法对公钥生成一个摘要,这个摘要是唯一的,再使用RSA的私钥把摘要进行加密,这样就生成了一个服务器公钥的数字证书(就是加了密的摘要),把这个证书返回给服务器,服务器在通过网络将公钥和证书一起返回给客户端。
客户端拿到服务器的公钥和证书之后,先去CA获取加密证书的私钥对应的公钥,拿到公钥进行验证这个证书得到哈希值,再将得到的公钥进行哈希运输也得到哈希值,如果这两个哈希值是一致的那么就证明这个公钥没被篡改,签名成立,否则就不成立。
CA是建立在操作系统层面的,不依赖余网络,所以不用担心CA公钥的安全性
HTTP与HTTPS
- 端口号 :HTTP 默认是 80,HTTPS 默认是 443。
- URL 前缀 :HTTP 的 URL 前缀是
http://
,HTTPS 的 URL 前缀是https://
。 - 安全性和资源消耗 : HTTP 协议运行在 TCP 之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS 是运行在 SSL/TLS 之上的 HTTP 协议,SSL/TLS 运行在 TCP 之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。所以说,HTTP 安全性没有 HTTPS 高,但是 HTTPS 比 HTTP 耗费更多服务器资源。