(6).握手结束客户端打算所有吸收信息的 hash 值,并采取协商密钥解密 encrypted_handshake_message,验证做事器发送的数据和密钥,验证通过则握手完成;(7).加密通信开始利用协商密钥与算法进行加密通信。
把稳:(a) 做事器也可以哀求验证客户端,即双向认证,可以在过程2要发送 client_certificate_request 信息,客户端在过程4中先发送 client_certificate与certificate_verify_message 信息,证书的验证办法基本相同,certificate_verify_message 是采取client的私钥加密的一段基于已经协商的通信信息得到数据,做事器可以采取对应的公钥解密并验证;(b) 根据利用的密钥交流算法的不同,如 ECC 等,协商细节略有不同,总体相似;(c) sever key exchange 的浸染是 server certificate 没有携带足够的信息时,发送给客户端以打算 pre-master,如基于 DH 的证书,公钥不被证书中包含,须要单独发送;(d) change cipher spec 实际可用于关照对端改版当前利用的加密通信办法,当前没有深入解析;(e) alter message 用于指明在握手或通信过程中的状态改变或缺点信息,一样平常告警信息触发条件是连接关闭,收到不合法的信息,信息解密失落败,用户取消操作等,收到告警信息之后,通信会被断开或者由吸收方决定是否断开连接。

1.1.14. Wireshark工具抓包Frame: 物理层的数据帧概况Ethernet II: 数据链路层以太网帧头部信息Internet Protocol Version 4: 互联网层IP包头部信息Transmission Control Protocol: 传输层的数据段头部信息,此处是TCPHypertext Transfer Protocol: 运用层的信息,此处是HTTP协议。
1.2. WEB类1.2.1. HTTP协议中可利用的方法

当浏览一个Web页面时,客户端要向做事器发送要求,而这个要求中要包含要求的方法。
HTTP协议/1.1支持的方法有:GET、POST、PUT、DELETE、HEAD、OPTIONS、TRACE、CONNECT。

1.2.1.1. GET方法(获取资源)

用来要求访问被URI标识的资源,指定的资源被做事器解析往后返回相应内容。

用户访问jsp等程序时软件测试之平安测试基本常识二 GraphQL

1.2.1.2. POST方法(传输实体主体)

紧张用于传输实体的主体,虽然用GET方法也能传输实体的主体,但一样平常不用GET方法进行传输。
虽说POST方法和GET方法很相似,但POST的紧张目的不是获取相应的主体内容。

1.2.1.3. PUT方法(传输文件)

用于传输文件,就像FTP协议的文件上传一样,哀求在要求报文的主体包含文件内容,然后保存到要求URI指定的位置。
由于HTTP/1.1的PUT方法自身不带验证机制任何人都可以上传文件,存在安全问题,因此一样平常的Web网站不该用这个方法。
若合营Web运用程序自身的验证机制,或架构设计采取REST标准的同类Web网站,就可能开放利用PUT方法。

1.2.1.4. DELETE(删除文件)

用于删除文件,按要求的URI删除指定资源。
与PUT方法一样,HTTP/1.1的DELETE方法自身也不带验证机制,以是一样平常的Web网站也不该用DELETE方法。
当合营Web运用程序的验证机制,或遵守REST标准时有可能会开放利用。

1.2.1.5. HEAD(得到报文首部)

HEAD方法和GET方法一样,只是HEAD方法不返回报文主体部分。
紧张用于确认URI的有效性以及资源更新的日期韶光等。

1.2.1.6. OPTIONS(讯问支持的方法)

用于查询针对要求URI指定的资源支持的方法。

1.2.1.7. TRACE(追踪路径)

用于让Web做事器端将之前的要求通信环回给客户真个方法。
发送要求时,在Max-Forwards首部字段中填入数值,每经由一个做事器端就将该数字减1,当数值刚好减到0时,就停滞连续传输,末了吸收到要求的做事器端则返回状态码200 OK的相应。
客户端通过TRACE方法可以查询发送出去的要求是若何被加工修正/修改的。
这是由于,要求想要连接到源目标做事器可能会通过代理中转,TRACE方法便是用来确认连接过程中发生的一系列操作。
但是,TRACE方法本来就不怎么常用,再加上它随意马虎引发XST (Cross-Site Tracing,跨站追踪)攻击,常日就更不会用到了。

1.2.1.8. CONNECT(哀求用隧道协议连接代理)

CONNECT 方法哀求在与代理做事器通信时建立隧道,实现用隧道 协议进行 TCP 通信。
紧张利用SSL(Secure Sockets Layer,安全套接层)和TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。
CONNECT 方法的格式为:CONNECT 代理做事器名:端口号 HTTP版本。

HTTP要求中GET要乞降POST要求有什么不同?

GET和POST本色上没有差异,由于GET和POST都是HTTP协议中两种发送要求的方法,而HTTP是基于TCP/IP的在万维网中通信的协议,以是GET和POST要求都是基于TCP连接的,GET能做的事情POST也能做到,比如你要把GET要求加上Request Body,给POST带上URL参数,技能上是完备可以实现的。

还有一点,GET和POST还有一个重大的不同,那便是GET要求发送的是一个TCP数据包,而POST要求发送两个。
详细来说,利用GET要求时,浏览器会把http header和data一起发送出去,而POST要求会先发送 http header,直到做事器端返回100 continue,浏览器再发送data。

1.2.2. 理解CookieSession机制

会话(Session)跟踪是Web程序中常用的技能,用来跟踪用户的全体会话。
常用的会话跟踪技能是Cookie与Session。
Cookie通过在客户端记录信息确定用户身份,Session通过在做事器端记录信息确定用户身份。

1.2.2.1. Cookie机制

Cookie便是由做事器发给客户真个分外信息,而这些信息以文本文件的办法存放在客户端,然后客户端每次向做事器发送要求的时候都会带上这些分外的信息。

1.2.2.1.1. Cookie的定义

当用户利用浏览器访问一个支持Cookie的网站的时候,用户会供应包括用户名在内的个人信息并且提交至做事器;接着,做事器在向客户端回传相应的超文本的同时也会发回这些个人信息,当然这些信息并不是存放在HTTP相应体(Response Body)中的,而是存放于HTTP相应头(Response Header);当客户端浏览器吸收到来自做事器的相应之后,浏览器会将这些信息存放在一个统一的位置,对付Windows操作系统而言,我们可以从: [系统盘]:\Documents and Settings[用户名]\Cookies目录中找到存储的Cookie;

自此,客户端再向做事器发送要求的时候,都会把相应的Cookie再次发回至做事器。
而这次,Cookie信息则存放在HTTP要求头(Request Header)了。
有了Cookie这样的技能实现,做事器在吸收到来自客户端浏览器的要求之后,就能够通过剖析存放于要求头的Cookie得到客户端特有的信息,从而动态天生与该客户审察对应的内容。
很多网站的登录界面中看到“请记住我”的功能便是通过Cookie实现的。

1.2.2.1.2. Cookie的特点

实质上cookies便是http的一个扩展。
有两个http头部是专门卖力设置以及发送cookie的,它们分别是Set-Cookie以及Cookie。

Cookie具有不可跨域名性。

提示:Cookie中保存中文只能编码。
一样平常利用UTF-8编码即可。
不推举利用GBK等中文编码,由于浏览器不一定支持,而且JavaScript也不支持GBK编码。

从客户端读取Cookie时,包括maxAge在内的其他属性都是不可读的,也不会被提交。
浏览器提交Cookie时只会提交name与value属性。
maxAge属性只被浏览器用来判断Cookie是否过期。

1.2.2.1.3. 设置Cookie的所有属性

String name:Cookie的名称(Cookie一旦创建,名称便不可变动)

Object value:Cookie的值。
如果值为Unicode字符,须要为字符编码;如果值为二进制数据,则须要利用BASE64编码。

int maxAge:Cookie失落效韶光,单位秒。
如果为正数,则该Cookie在大于maxAge秒之后失落效。
如果为负数,该Cookie为临时Cookie,关闭浏览器即失落效,浏览器也不会以任何形式保存该Cookie。
如果为0,表示删除该Cookie。
默认为–1。

boolean secure:Cookie是否仅被利用安全协议传输。
安全协议有HTTPS,SSL等,在网络上传输数据之前先将数据加密。
默认为false。

String path:Cookie利用路径。
如果设置为“/sessionWeb/”,则只有contextPath为“/sessionWeb”的程序可以访问该Cookie。
如果设置为“/”,则本域名下contextPath都可以访问该Cookie。
把稳末了一个字符必须为“/”。

String domain:可以访问该Cookie的域名。
如果设置为“.google.com”,则所有以“google.com”结尾的域名都可以访问该Cookie。
把稳第一个字符必须为“.”。

String comment:Cookie用途解释。
浏览器显示Cookie信息的时候显示该解释。

int version:该Cookie使>用的版本号。
0表示遵照Netscape的Cookie规范,1表示遵照W3C的RFC 2109规范。

1.2.2.2. Session机制1.2.2.2.1. Session的定义

除了利用Cookie,Web运用程序中还常常利用Session来记录客户端状态。
Session是做事器端利用的一种记录客户端状态的机制,利用上比Cookie大略一些,相应的也增加了做事器的存储压力。

Session是在做事器端程序运行的过程中创建的,不同措辞实现的运用程序有不同创建Session的方法,而在Java中是通过调用HttpServletRequest的getSession方法(利用true作为参数)创建的。
在创建了Session的同时,做事器会为该Session天生唯一的Session id,而这个Session id在随后的要求中会被用来重新得到已经创建的Session;在Session被创建之后,就可以调用Session干系的方法往Session中增加内容了,而这些内容只会保存在做事器中,发到客户真个只有Session id;当客户端再次发送要求的时候,会将这个Session id带上,做事器接管到要求之后就会依据Session id找到相应的Session,从而再次利用之。

1.2.2.2.2. Session的特点

Session保存在做事器端。
为了得到更高的存取速率,做事器一样平常把Session放在内存里。
每个用户都会有一个独立的Session。
如果Session内容过于繁芜,昔时夜量客户访问做事器时可能会导致内存溢出。

Session在用户第一次访问做事器的时候自动创建。
须要把稳只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session。
如果尚未天生Session,也可以利用request.getSession(true)逼迫天生Session。

Session天生后,只要用户连续访问,做事器就会更新Session的末了访问韶光,并掩护该Session。
用户每访问做事器一次,无论是否读写Session,做事器都认为该用户的Session“生动(active)”了一次。

session会在一定韶光内保存在做事器上。
当访问增多,会比较占用你做事器的性能。
考虑到减轻做事器性能方面,应该利用COOKIE。

1.2.2.2.3. Session对浏览器的哀求

Session须要利用Cookie作为识别标志。
HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此做事器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也便是HttpSession.getId()的返回值)。
Session依据该Cookie来识别是否为同一用户。

新开的浏览器窗口会天生新的Session,但子窗口除外。
子窗口会共用父窗口的Session。

如果客户端浏览器将Cookie功能禁用,或者不支持Cookie怎么办?例如,绝大多数的手机浏览器都不支持Cookie。
Java Web供应了另一种办理方案:URL地址重写。

1.2.2.2.4. Session有效期

由于会有越来越多的用户访问做事器,因此Session也会越来越多。
为防止内存溢出,做事器会把短韶光内没有生动的Session从内存删除。
这个韶光便是Session的超时时间。
如果超过了超时时间没访问过做事器,Session就自动失落效了。

Session的超时时间为maxInactiveInterval属性,可以通过对应的getMaxInactiveInterval()获取,通过setMaxInactiveInterval(longinterval)修正。

Session的超时时间也可以在web.xml中修正。
其余,通过调用Session的invalidate()方法可以使Session失落效。

1.2.2.2.5. Session的常用方法

void setAttribute(String attribute, Object value):设置Session属性。
value参数可以为任何Java Object。
常日为Java Bean。
value信息不宜过大

String getAttribute(String attribute):返回Session属性

Enumeration getAttributeNames():返回Session中存在的属性名 >

void removeAttribute(String attribute):移除Session属性

String getId():返回Session的ID。
该ID由做事器自动创建,不会重复

long getCreationTime():返回Session的创建日期。
返回类型为long,常被转化为Date类型,例如:Date createTime = new Date(session.get >CreationTime())

long getLastAccessedTime():返回Session的末了生动韶光。
返回类型为long

int getMaxInactiveInterval():返回Session的超时时间。
单位为秒。
超过该韶光没有访问,做事器认为该Session失落效

void setMaxInactiveInterval(int second):设置Session的>超时时间。
单位为秒

void putValue(String attribute, Object value):不推举的方法。
已经被setAttribute(String attribute, Object Value)替代

Object getValue(String attribute):不被推举的方法。
已经被getAttribute(String attr)替代

boolean isNew():返回该Session是否是>新创建的

void invalidate():使该Session失落效

Cookie和Session的差异与联系?

差异:

①Cookie是把用户的数据存到本地,而Session则是把用户的数据存在做事器;

②单个Cookie的大小不能超过4K,而单个Session的大小与做事器内存有关(理论上做事器内存足够大可以无限制存储数据,但实际肯定是只存主要的数据);

③Cookie不屈安,如果黑客入侵你的电脑,可以剖析你电脑里的Cookie并进行Cookie欺骗,而Session会更安全。

联系:

①Cookie没有禁用的情形下,Cookie会作为SID值的容器;

②可以把一些敏感、主要的信息放在Session里,其他信息放在Cookie中。