推荐自助建网站平台,建筑工程网上办事大厅,网站平台建设的流程,wordpress 鼠标文章目录 HTTP1、概念2、认识URL3、协议格式、请求方法和状态码4、HTTP请求和响应报头5、Cookie和Session HTTPS1、对称和非对称加密2、对称非对称加密安全分析3、证书 HTTP
1、概念 我们在应用层定制协议时#xff0c;不建议直接发送结构体对象#xff0c;因为在不同的环境… 文章目录 HTTP1、概念2、认识URL3、协议格式、请求方法和状态码4、HTTP请求和响应报头5、Cookie和Session HTTPS1、对称和非对称加密2、对称非对称加密安全分析3、证书 HTTP
1、概念 我们在应用层定制协议时不建议直接发送结构体对象因为在不同的环境下结构体内存对齐规则可能不一样。而自己制定的协议格式又存在很多问题、不足。对此我们学习成熟、优秀的HTTP协议来提升自己对协议的理解提高自己的协议定制能力。 HTTPHyper Text Transfer Protocol全称超文本传输协议是用于从万维网WWW:World Wide Web 服务器传输超文本到本地浏览器的传送协议。同时它是基于客户端-服务器模型即客户端如浏览器发起请求服务器处理请求并返回响应。
一个典型的HTTP请求-响应周期如下
1、建立TCP连接客户端首先与服务器建立TCP连接。HTTP协议通常使用80端口HTTP或443端口HTTPS 2、发送HTTP请求客户端通过TCP连接发送HTTP请求。请求包括请求行、请求头和请求体可选 3、处理请求服务器接收到请求后解析请求执行相应的操作如查询数据库、处理文件等并生成响应 4、返回HTTP响应服务器将响应通过TCP连接发送回客户端。响应包括状态行、响应头和响应体 5、关闭连接请求和响应完成后TCP连接通常会被关闭。HTTP/1.1引入了持久连接Keep-Alive允许在同一连接上进行多次请求和响应 2、认识URL URL统一资源定位符是互联网上资源的地址也称为网址。它标识并定位网页、图片、视频、文件等资源。一个完整的URL由多个部分组成每部分有特定作用。以下是URL的组成部分解析 点分十进制的IP地址给用户使用体验感并不好对此域名会被解析成IP地址。现实生活中我们通信真正用到的是IP地址用域名标识互联网中的一台唯一主机协议和端口号标识该主机上唯一的一个服务资源路径找到唯一的一个资源。 少量的情况提交或者获取的数据本身可能包含和URL中特殊的字符冲突的字符要求BS浏览器和服务器双方进行编码(encode)和解码(decode)编码解码浏览器和服务器默认帮我们处理了通常无需手动干预。
3、协议格式、请求方法和状态码 HTTP方法这么多但是大多对用户是禁用的我们最常使用的就两个GET和POST即上传数据和接受数据两种。当我们想提交参数给服务器时使用GET方法提交的参数是通过URL提交的参数受限POST方法也支持提交参数通过请求的正文部分提交参数比GET方法私密一点。 GET请求可以被保存为书签和历史记录而POST请求不可以。 我们平时常见的状态码比如200OK404Not Found403Forbidden 无请求权限302Redirect重定向504Bad Gateway 重定向可分为临时重定向和永久重定向其中状态码301表示的就是永久重定向而状态码302和307表示的是临时重定向。当我们想要登陆点击登陆就会跳转到登陆页面这是重定向。而当我们登陆成功后又会返回主页面这也是重定向。重定向要配合报头 Location: URL\r\n 字段来使用
4、HTTP请求和响应报头 属性名说明Accept告知服务器客户端可以接受的MIME类型如text/html, application/jsonAccept-Charset客户端可以接受的字符集如UTF-8Accept-Encoding客户端支持的内容编码如gzip, deflateAccept-Language客户端优先选择的语言如en-US, zh-CNUser-Agent 客户端的软件信息如浏览器类型和版本 Cache-Control指定缓存机制如何处理请求和响应如no-cache, max-age3600Connection控制当前连接的选项如keep-aliveContent-Length请求体的长度字节数Content-Type请求体的MIME类型如application/jsonCookie客户端发送给服务器的cookie信息Host请求的目标主机和端口号如example.com:8080Origin指示请求的发起源常用于CORS跨域资源共享Referer指示请求的来源URL即当前页面是从哪个页面跳转过来的Location搭配3XX状态码使用告诉客户端接下来要去哪里访问 长短连接HTTP/1.0使用短连接HTTP/1.1及以后的版本使用长连接) 短连接指的是每个HTTP请求/响应对都使用一个独立的TCP连接。请求完成后连接立即关闭客户端和服务器在后续请求时需要重新建立连接。缺点就是会降低性能效率低。 长连接指的是在一个TCP连接上可以发送多个HTTP请求和响应对。连接在一个请求/响应周期后不会立即关闭而是保持打开状态允许后续的请求和响应在同一连接上进行。体现在请求报头的Connectionkeep-alive字段
5、Cookie和Session
Cookie和Session: HTTP是一个无状态协议这意味着每个请求都是独立的服务器不会保留以前的请求信息。为了保持状态比如登陆状态Web应用通常使用Cookie和Session等技术。 Cookie 是存储在客户端浏览器中的一个小型文本文件用于存储用户的会话信息。主要用于在客户端和服务器之间传递信息例如用户身份验证状态、用户偏好设置等。而Session 是服务器端用于存储用户会话信息的机制用于跟踪用户会话存储用户身份验证状态、购物车内容等敏感或大型数据。 当客户端首次访问服务器时服务器通过HTTP响应头的Set-Cookie字段发送Cookie到客户端客户端将这些Cookie存储在本地。在随后的请求中客户端通过HTTP请求头的Cookie字段自动发送Cookie回服务器服务器读取Cookie信息以识别用户并响应请求。同时服务器为每个用户创建唯一的Session ID存储在服务器端并同样通过Set-Cookie发送Session ID给客户端。客户端在后续请求中发送Session ID服务器使用Session ID检索会话信息处理请求。这样Cookie和Session协同工作使服务器能够识别和跟踪用户的会话状态。 对比与总结 特性CookieSession存储位置客户端服务器端安全性相对较低易受客户端攻击相对较高不易受客户端攻击容量限制每个Cookie 4KB左右每个域名20-50个Cookie通常没有容量限制取决于服务器存储容量依赖机制独立存在用于存储少量数据依赖Cookie或URL重写传递Session ID使用场景存储用户偏好、跟踪会话状态等存储用户身份验证状态、购物车内容等敏感信息 HTTPS HTTP协议最初设计用于网页内容的快速传输。然而由于HTTP传输的数据是明文存在数据被窃取或篡改的风险。为提升数据传输的安全性SSL协议被开发出来其后继者TLS传输层安全协议进一步增强了安全性。将SSL/TLS协议应用于HTTP协议之上即结合体HTTPS。 简单理解就是HTTPS在HTTP的基础上做了加密处理所谓加密就是让传输的明文数据通过一系列手段加工成密文解密就是将密文再进行一系列手段加工成明文在加密解密过程中辅助这个过程完成的数据叫做密钥。
1、对称和非对称加密 对称加密是采用单钥密码系统的加密方法同一个密钥可以同时用作信息数据的加密和解密这种加密的方式称为对称加密也称为单密钥加密
特征加密和解密的密钥都是相同的 常见的对称加密算法DES、3DES、AES、TDEA、Blowfish、RC2等 特点算法库开源、计算量小、加密速度快、加密效率高 对称加密其实就是通过同一个“密钥”把明文加密成密文并且也能用密钥将密文解密成明文 非对称加密是一种加密技术它使用一对密钥公钥和私钥。公钥可以公开任何人都可以使用它来加密信息但只有持有对应私钥的人才能解密。私钥是保密的只有拥有者可以使用它来解密信息或者加密信息。这种加密方式允许安全地交换信息因为即使公钥被截获没有私钥也无法解密信息。私钥加密的信息只能由公钥解密而公钥加密的信息只能由私钥解密
常见非对称加密算法RSA、 DSA、ECDSA等 特点算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂而使得加密解密速度没有对称加密解密的速度快 公钥和私钥是配对的最大的缺点就是运算速度非常慢比对称加密算法慢得多 2、对称非对称加密安全分析 只使用对称加密涉及密钥交换问题在建立安全通信之前双方需要安全地交换密钥这本身是一个挑战特别是在未建立安全通信之前。 只使用非对称加密只能保证一端通信是安全的。假设公钥和私钥是由服务器生成的那么客户端到服务器端的通信是安全的因为只有服务器有私钥。可是服务器到客户端的通信并不是安全的因为中间人也有服务器生成的公钥能解密知道明文内容。那如果双方都各自生成公钥和私钥然后交换公钥的话可以暂时解决问题但是这样子双方通信效率太低了。 使用非对称和对称加密在非对称加密的基础上让服务器生成公钥S和私钥S对保证客户端到服务器单方通信安全。然后客户端生成对称密钥X用S加密发送给服务器只有服务器能用私钥S解密。之后双方的通信使用对称密钥X来进行加密解密保证效率。 可是这样子仍然是不安全的有一种中间人攻击MITM方案一开始就把服务器发来的公钥S替换掉客户端也是毫不知情的它并不知道发来公钥是否合法。
MIMT攻击过程如下
服务器拥有公钥 S、私钥 S中间人拥有公钥M、私钥M客户端拥有对称密钥X客户端向服务器发起请求连接服务器将公钥S以报文的形式发送客户端中间人劫持报文将服务器公钥S并且保存起来重新伪造报文将自己的公钥M发送给客户端客户端获取到公钥M通过这个公钥M加密X形成报文发送给服务器中间人再次劫持通过自己的私钥M解密获取到密钥X。将上次-保存的服务器公钥S对密钥X加密处理形成报文后发送给服务器服务器通过私钥S解密还原出客⼾端发送的对称密钥X此后的服务器客户端之间进行的对称加密通信在中间人看来是毫无作用。密钥X中间人也有当前面两者进行通信时中间人直接解密获取对应的数据甚至修改数据都可以
3、证书 现在我们找到了通信安全的核心问题即如何验证服务器发来公钥的合法性对此我们引入证书来解决这个问题。
证书组成部分
公钥证书中包含服务器的公钥用于加密数据或验证数字签名数字签名由CA使用其私钥对证书内容进行签名确保证书未被篡改所有者信息包括服务器的域名、组织名称等信息用于识别服务器的身份证书颁发机构CA的信息指明颁发该证书的CA以及CA的数字签名保证证书的可信度有效期证书的有效时间范围。过期的证书需要更新否则浏览器会提示用户连接不安全
数据摘要和数据指纹和数字签字补充 数据摘要也称为数字指纹利用单向散列函数如Hash函数对信息进行处理生成固定长度的数字摘要的技术。这种摘要用于验证数据的完整性因为即使是微小的数据变化也会导致完全不同的摘要结果。常见的摘要算法包括MD5、SHA1、SHA256和SHA512等它们将无限长的输入映射到有限长度的输出尽管存在理论上的碰撞两个不同输入产生相同输出风险但实际上非常低 数据摘要不是加密因为没有解密过程。它主要用于确保数据未被篡改通过比较数据的原始摘要和传输或存储后的摘要来检测变化。如果两者一致数据未被篡改如果不一致数据可能已被篡改。这种方法常用于验证文件完整性、数字签名等场景。对数据摘要进行加密就能得到数字签名了
为什么签名不直接加密而是要先hash形成摘要 签名不直接加密整个数据而是先做哈希哈摘要主要是因为效率。直接加密大量数据会很慢而且对比解密后的数据也很耗时。用哈希摘要数据量小得多验证起来快得多。 验证服务器发来公钥的合法性变成验证证书的合法性。先对数据进行散列算法得到数据指纹用CA机构的私钥对数据指纹加密得到签名。浏览器内置了很多CA机构的公钥客户端只认CA的公钥 中间人如果只篡改了证书的明文由于他没有CA机构的私钥所以无法Hash之后使用私钥形成数字签名那么也没有办法对篡改后的证书形成匹配的签名 中间人如果篡改了证书的签名这时候无论是否篡改证书的明文客户端收到证书后都会发现明文hash后的散列值和签名解密后的值不一致。因为hash过程是不可逆的同时客户端只认CA的公钥进行解密所以中间人再怎么修改也没资格进行证书的全新形成 如果对证书的整体掉包但是别忘记证书明⽂中包含了域名等服务端认证信息如果整体掉包客户端依旧能够识别出来证书有问题。所以安全高效的通信就是使用非对称加密对称加密证书认证