http和https是什么?
http又叫做超文本传输协议,被用于Web浏览器和网站服务器之间传递信息,http协议以明文方式发送内容,不提供任何的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,http不适合传输一些敏感信息,比如:信用卡号,密码等等。
在谷歌浏览器17年之后的版本中,一般访问http开头的网站,都会有提示不安全,比如我旦的网上办事大厅就是http页面,所以会被谷歌浏览器标为不安全网页
为了解决http协议的这一缺陷,需要使用另外一种协议:安全套接字层超文本传输协议https,为了数据传输安全,https在http的基础上加入了ssl协议,ssl依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。所以https页面相对于http页面,就非常安全,现在基本所有网页都是用https协议,比如我们常见的12306网页,这个安全系数必须很高的网站。
http和https的基本概念
http:超文本传输协议,是一个基于请求与响应,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有www文件都必须遵守这个标准,设计http的初衷是为了提供一种发布和接收html页面的方法。
要理解http的概念,第一个,我们要知道他是一种协议,那么协议就有固定的规定吧,在http那就是http报文的格式,http协议规定了请求报文和相应报文的格式,而说他是常基于TCP/IP协议传输数据,意思其实就是客户端和服务端用TCP建立连接,建立连接之后我们之间传递的带有数据的报文的格式,用http的报文格式,所以http被说成是基于TCP/IP协议传输数据。
https:那https就很简单了,https就是基于http不安全的缺点上,加了一层ssl来保证安全传输的协议。他是一种通过计算机网络进行安全通信的传输协议,经由http进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的是要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私和完整性。
http的工作过程
在理解http的工作过程之前,我们先复习一些计算机网络的知识。
第一个,每次报文的传输,都需要下图中的数据流,发送端,先从顶层往底层添加相应层级的首部,打包成报文通过数据链路层传输到接收端,然后再接收端,从底部往顶部,一层层剥离相对应的首部数据。所以在http执行之前要建立tcp连接,tcp连接需要三次握手,那么就需要经历三次这个过程。
在http中的tcp建立过程,当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上,同时去掉各层协议头,每层协议都要检查协议标识,以确定接收的数据上层协议。
物理层:当数据通过网卡的时候,判断是否需要上传
数据链路层:当拿到数据后,就要从摘到网络层的头,检查MAC地址和当前网卡的MAC是否匹配
网络层:当数据链路层的MAC匹配成功后,拿到IP头,判断IP地址是否和当前的匹配
传输层: 当IP头匹配成功,TCP头会携带端口,将报文交给指定的端口进程进行处理
接下里我们就可以去理解http的工作过程了。
1、客户端输入一个url,http第一步会用过DNS解析域名对这个地址进行解析,得到服务器的IP地址,毕竟客户端要连接到服务器,连IP地址都没有,那就无法连接了。
2、封装HTTP请求数据包,因为数据包要自顶向下开始封装,http是应用层,在TCP的传输层之上,所以要先封装HTTP数据包
3、封装成TCP包,建立TCP连接(TCP的三次握手)
4、建立完连接后,客户端发送请求命令
5、服务器响应
6、服务器关闭TCP连接
Connection如果是keep-alive的话,TCP连接会保持打开状态,节省了每次传输数据都需要建立连接的开销
1)在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。
2)在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。
https工作过程
https最主要的就是比http多了一个SSL(Secure Socket Layer)连接的过程,其他的与http基本一致,所以我们只需要了解一下SSL的连接过程和加密的相关算法就行了。
SSL连接过程
- 客户端要先向服务器发送请求,比如我们要进入百度的网页,https://baidu.com,根据https,可以连接到服务器的443端口,而伴随发送的信息主要是随机值1和客户端支持的加密算法。
- 服务器接收到信息之后给予客户端响应握手信息,包括随机值2和匹配好的协商加密算法, 其实这个算法就是从客户端发送过来的加密算法中的某一个。
- 随后服务器给客户端发送第二响应报文,这个报文是一个数字证书,这个证书其实就是公钥,包含了很多信息,比如证书的颁发机构,过期时间,服务端的公钥,第三方证书认证机构(CA)的签字,服务端的域名信息等
- 接收到证书后,客户端会通过TLS对证书进行解析,如果证书没问题,就会生成一个随机值(预主秘钥),如果发生异常,就会弹出一个警告框,提示证书存在问题。
- 客户端认证证书通过之后,接下来是用过随机值1,随机值2,预主秘钥组装会话秘钥,然后通过证书的公钥,加密会话秘钥
- 传送加密信息,这部分传送是用证书加密之后的会话秘钥,服务端接收到之后可以通过秘钥解密得到随机值1,随机值2,和预主秘钥。
- 服务器解密得到上面三个钥之后,组装会话秘钥,跟客户端会话秘钥相同
- 客户端通过会话秘钥加密一条消息给服务端,验证服务端是否正确接受客户端加密的消息
- 通过服务端也会通过会话秘钥加密一条消息回传给客户端,如果客户端能正常接受的话,SSL层连接就完成了。
SSL相关问题
1.怎么保证保证服务器给客户端下发的公钥是真正的公钥,而不是中间人伪造的公钥呢?
2.证书如何安全传输,被掉包了怎么办?
3.第三方攻击者能否让自己的证书显示出来的信息也是服务端呢(伪装服务端一样的配置)
显然这个是不行的,因为当第三方攻击者去CA那边寻求认证的时候CA会要求其提供例如域名的whois信息、域名管理邮箱等证明你是服务端域名的拥有者,而第三方攻击者是无法提供这些信息所以他就是无法骗CA他拥有属于服务端的域名。
4.安全性考虑:
HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用
SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行
对称加密和非对称加密
对称加密指的就是加密和解密使用同一个秘钥,所以叫做对称加密。对称加密只有一个秘钥,作为私钥。
非对称加密指的是:加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。
对称加密算法相比非对称加密算法来说,加解密的效率要高得多。但是缺陷在于对于秘钥的管理上,以及在非安全信道中通讯时,密钥交换的安全性不能保障。所以在实际的网络环境中,会将两者混合使用.
例如针对C/S模型,
-
服务端计算出一对秘钥pub/pri。将私钥保密,将公钥公开。
-
客户端请求服务端时,拿到服务端的公钥pub。
-
客户端通过AES计算出一个对称加密的秘钥X。 然后使用pub将X进行加密。
-
客户端将加密后的密文发送给服务端。服务端通过pri解密获得X。
-
然后两边的通讯内容就通过对称密钥X以对称加密算法来加解密。
http和https的区别
端口不同:Http与Http使用不同的连接方式,用的端口也不一样,前者是80,后者是443;
资源消耗:和HTTP通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源;
开销:Https通信需要证书,而证书一般需要向认证机构购买;
所以在选择的时候,尽管https在隐私和安全上有更大的优势,但是也会因此提高延迟,有更多的开销,所以对一些如果隐私和安全要求没那么高的网站,做https带来的代价可能会更高。
http状态码(面试题)
下面常见的http状态码:
100:这个状态码是告诉客户端应该继续发送请求,这个临时响应是用来通知客户端的,部分的请求服务器已经接受,但是客户端应继续发送求请求的剩余部分,如果请求已经完成,就忽略这个响应,而且服务器会在请求完成后向客户发送一个最终的结果
200:这个是最常见的http状态码,表示服务器已经成功接受请求,并将返回客户端所请求的最终结果
202:表示服务器已经接受了请求,但是还没有处理,而且这个请求最终会不会处理还不确定
204:服务器成功处理了请求,但没有返回任何实体内容 ,可能会返回新的头部元信息
301:客户端请求的网页已经永久移动到新的位置,当链接发生变化时,返回301代码告诉客户端链接的变化,客户端保存新的链接,并向新的链接发出请求,已返回请求结果
404:请求失败,客户端请求的资源没有找到或者是不存在
500:服务器遇到未知的错误,导致无法完成客户端当前的请求。
503:服务器由于临时的服务器过载或者是维护,无法解决当前的请求,
本文参考于https://www.cnblogs.com/wqhwe/p/5407468.html和https://blog.csdn.net/xiaoming100001/article/details/81109617以及https://blog.csdn.net/zam183/article/details/85270472