http和https遇到的问题
1.为什么http也需要加上签发
1.加签、验签的作用 常见的http请求交互过程中,请求参数通过url或者request body等形式传输。 但是由于http请求的开放性,使得请求参数很容易被拦截篡改。 因此,需要对请求参数进行加签,然后在请求接受方对请求参数进行验签, 确保两个签名是一样的,验签通过之后请求处理方就可以进行业务逻辑处理了。 但是,加签和验签只能解决请求传输过程中参数篡改的问题, 并不能解决敏感参数传输的安全性问题。 2.加签、验签的处理思路 加签和验签就是在请求发送方将请求参数通过加密算法生成一个sign值, 放到请求参数里;请求接收方收到请求后, 使用同样的方式对请求参数也进行加密得到一个sign值, 只要两个sign值相同,就说明参数没有被篡改。 3.签名参数sign生成的方法: 第一步:将所以头参数(注意时所有参数),出去sign本身,以及值是空的参数,按参数键字母升序排序。 第二步:然后把排序后的参数按参数1值1参数2值2......参数n值n (这里的参数和值必须是传输参数的原始值,不能是经过处理的, 如不能将"转成"后再拼接)的方式拼接成一个字符串。 第三步:把分配给接入方的验证密钥key拼接在第2步得到的字符串前面。 第四步:在上一步得到的字符串前面加上密钥key(这里的密钥key是接口提供方分配给接口接入方的), 然后计算md5值,得到32位字符串,然后转成大写,得到的字符串作为sign的值放到请求参数里。 例子: 描述: 现在假设需要传输的数据是: http://xxx.com/api/guest/rechargeNotify?p2=v2&p1=v1&method=cancel&p3=&pn=vn(实际情况最好是通过post方式发送) 步骤: 1.拼接字符串,首先去除值是空的参数p3,剩下p2=v2&p1=v1&method=cancel&pn=vn, 然后按参数名字符升序排序得到字符串:method=cancel&p1=v1&p2=v2&pn=vn。 2.然后做参数名和值的拼接,最后得到methodcancelp1v1p2v2pnvn。 3.在上面拼接得到的字符串前面加上验证密钥key,假设是abc,得到新的字符串abcmethodcancelp1v1p2v2pnvn。 4.将上面得到的字符串进行md5计算,假设得到的是abcdef,然后转为大写,得到ABCDEF这个值即为sign签名值。 最终产生的url应该如下:http://xxx.com/api/guest/rechargeNotify?p2=v2&p1=v1&method=cancel&p3=&pn=vn&sign=ABCDEF 5.注意:计算md5之前请确保请求发送方和接收方使用的字符串编码一致,比如统一使用utf-8编码,如果编码方式不一致则计算出来的签名会校验失败。 验签过程 其实就是将请求url按照上述的规则进行同样的操作,计算得到参数的签名值, 然后和参数中传递的sign值进行对比,如果一致则校验通过,否则校验不通过。 ps:个人觉得签字的验证方式有很多,http请求和https请求都可以灵活的使用算法实现自己的签验方式,都是为了防止第三方的拦截和串改
2.捂手发生的协议层
过程:
tcp三次握手的过程,accept发生在三次握手哪个阶段? 第一次握手:客户端发送syn包(syn=j)到服务器。 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个ASK包(ask=k)。 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1)。 三次握手完成后,客户端和服务器就建立了tcp连接。这时可以调用accept函数获得此连接
http请求回头捂手过程
http和捂手可以说没有关系。
http是应用层协议,它的任务是与服务器交换信息。
至于怎么连到服务器,怎么保证数据正确,http不管。
事实上它总是假设数据是正确地传输的。
而tcp的任务是保证连接的可靠,包括防丢、防错。
为了做到这些,在初次连接时要进行3次握手,以保证确实连接到了目标机器。
而连接上后具体传送什么数据,tcp是不管的。
别的应用层协议也能通过tcp进行,那么这种协议在底层也进行3次握手。
在某些情况下,http可以不通过tcp实现,那就不需要3次握手。
比如,我做了一把遥控咖啡壶,遥控器和壶通过红外直接连接,通过htcpcp(RFC2324定义的超文本咖啡壶控制协议)与咖啡壶交互。
字符直接调制到红外上,此时htcpcp应用层下面直接是物理层,当然不存在3次握手了,连ip地址和mac地址也不存在。
补充评论:
HTTP属于TCP/IP协议族,所以绝大多数情况下HTTP下面是TCP。
强行构造例外也不是绝对不行(比如我的茶壶),但这样做是不实用的。
3.为什么http请求还要加IP白名单
答问了解:
问:TCP三次握手成功后,IP地址在网络连接和数据传输就不再需要?这个命题对吗?
问:我啰嗦一句,解释一下,当两台主机建立TCP连接时,握手前通过IP在相应端口进行握手通信,当握手成功后,他们之间的数据传输还依赖IP地址吗?
问:想说说我自己的想法,我认为,握手成功后就跟IP地址没有关系了
答:TCP 的核心就是IP,连接成功,保持连接,还得靠IP呢!
学习来源:
//签名
https://www.cnblogs.com/boothsun/p/7460105.html
//捂手过程
https://blog.csdn.net/cywosp/article/details/6724518
//解答为什么http会有捂手
https://www.zhihu.com/question/67772889
https://www.zhihu.com/question/52991675
https://bbs.csdn.net/topics/397796542
//为什么要加白名单
http://www.goubanjia.com/help/article-62.html
//捂手和ip的关系
https://bbs.csdn.net/topics/392291171