HTTP和HTTPS的区别【面试常考】

这个是根据查阅别人的博客,并结合自己的思想总结的,发出来是对自己的检验也希望可以帮到大家;如有错误欢迎指出

HTTP和HTTPS是计算机网络中很重要的知识点,面试的时候很容易被问他们的区别,可能每个人都会有自己理解;

HTTP是明文传输的,传输过程中容易被拦截、修改或者伪造请求;HTTPS则是在HTTP基础上进行进行了一些信息保护,相比HTTP来说更为安全。

 这是一个简单的回答,但是比较笼统,如果想要找到好的工作,中间的很多细节还是需要我们去仔细研究的。

HTTPS和HTTP

HTTP是什么:HTTP 是一种 超文本传输协议(Hypertext Transfer Protocol) 协议,它是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。

HTTP的原理:

  1. 客户端浏览器通过网络与服务器建立连接(通过TCP实现,一般端口号为80),建立连接后客户端可发送请求给服务器(请求的格式为:统一资源标识符(URL)、协议版本号,后边是 MIME 信息包括请求修饰符、客户机信息和许可内容)
  2. 服务器接收到请求之后会返回一定的相应(其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是 MIME 信息包括服务器信息、实体信息和可能的内容)

HTTP的缺点:

  1. 使用明文通信,一些重要的内容会被窃听(密码)
  2. 不能验证对方的身份,可能是伪造的信息
  3. 无法验证报文的完整性,有可能已经被修改

HTTPS如何解决HTTP的问题:

  • HTTPS 只是在 HTTP 的基础之上增加了加密处理、认证机制和完整性保护,即 HTTPS = HTTP + 加密 + 认证 + 完整性保护
    • 加密,HTTPS 通过对数据加密来使其免受窃听者对数据的监听,这就意味着当用户在浏览网站时,没有人能够监听他和网站之间的信息交换,或者跟踪用户的活动,访问记录等,从而窃取用户信息。
    • 数据一致性,数据在传输的过程中不会被窃听者所修改,用户发送的数据会完整的传输到服务端,保证用户发的是什么,服务器接收的就是什么。
    • 身份认证,是指确认对方的真实身份,也就是证明你是你(可以比作人脸识别),它可以防止中间人攻击并建立用户信任。
  • HTTPS 不是应用层的一种新协议,只是 HTTP 协议的改进(HTTP协议中的部分通信接口被ssl/tls协议代替),通常 HTTP 直接与 TCP 进行通信,当使用 ssl 协议时则先与 ssl 通信,再由 ssl 和 tcp 通信,
  • 通过上面的分析可以看出来,HTTPS 只是在 HTTP 的基础上增加了 ssl 协议;

HTTPS的原理:

  1. 客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。
  2. Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
  3. 客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
  4. 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
  5. Web服务器利用自己的私钥解密出会话密钥。
  6. Web服务器利用会话密钥加密与客户端之间的通信。

区别:

  1. http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
  2. http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  3. http的连接很简单,是无状态的。Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)

 SSL和TSL

SSL是“Secure Sockets Layer”的缩写,中文叫做“安全套接层”,其出现就是为了解决HTTP传输不安全的问题;到了1999年,SSL被标准化,标准化之后的名称改为 TLS(是“Transport Layer Security”的缩写),中文叫做“传输层安全协议”,所以这两者其实就是同一种协议,只不过是在不同阶段的不同称呼。

SSL协议是位于TCP/IP协议与各种应用层协议之间,为数据通信提供安全支持,可分为两层:

  • SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
  • SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

所以,SSL协议提供的服务有:

  1. 认证用户和服务器,确保数据发送到正确的客户端和服务器;

  2. 加密数据以防止数据中途被窃取;

  3. 维护数据的完整性,确保数据在传输过程中不被改变。

细心的同学可能会发现,这不还是HTTPS解决HTTP的那几个问题吗?对,还是实现加密处理、认证机制和完整性保护这三点,由此也可以看出SSL协议的重要性,这也是HTTP和HTTPS之间的主要区别。

加密 

在上面HTTPS的原理部分也提到了加密, 这里我们就来说一下加密,通常加密分为对称加密、非对称加密和混合加密

对称加密

  • 对称加密,又被成为私钥加密,即信息的发送方和接收方使用同一个秘钥去加密和解密信息,它采用了对称密码编码技术;
  • 对称加密算法密钥较短,破译困难,除了数据加密标准(DES),另一个对称密钥加密系统是国际数据加密算法(IDEA),它比DES的加密性好,且对计算机性能要求也没有那么高。

优点:

        算法公开、计算量小、加密速度快、加密效率高 

缺点:

  1. 数据传送之前,发送方和接收方需要协商好秘钥,然后两方都要保存好秘钥,如果任意一方不慎将秘钥泄露信息加密就会变得不再安全;
  2. 每对用户每次使用对称加密算法时,都需要使用其他人不知道的唯一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担;
  3. 对称加密算法一般不能提供信息完整性的鉴别。它无法验证发送者和接受者的身份;

 常见的对称加密算法有: DES、3DES、Blowfish、IDEA、RC4、RC5、RC6 和 AES

非对称加密

与对称加密算法不同,非对称加密算法需要使用两个秘钥:公开秘钥、私有秘钥;

公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

非对称加密算法实现机密信息交换的基本过程是:

       甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。甲方只能用其专用密钥解密由其公用密钥加密后的任何信息。

优点:安全

缺点:速度比较慢

常见的非对称加密算法有: RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)

混合加密

结合对称加密和非对称加密的优缺点,混合使用两种加密算法而产生混合加密,TLS中也是使用的这种加密方式;

实现过程:

       首先,使用非对称加密,用来传输对称加密的秘钥,以此可解决对称加密传输过程不安全的问题;然后用随机数产生对称算法使用的,再用公钥加密。对方拿到密文后用私钥解密,取出会话密钥。这样,双方就实现了对称密钥的安全交换。

摘要算法(Hash算法)

Hash算法特别的地方在于它是一种单向算法,用户可以通过hash算法对目标信息生成一段特定长度的唯一hash值,却不能通过这个hash值重新获得目标信息。因此Hash算法常用在不可还原的密码存储、信息完整性校验等。

可能有人会疑惑为什么要用单向的?因为双向的话也存在安全问题,比如说我们常用的支付宝,我们支付宝的密码和支付密码在数据库存储之前的加密算法一定是单向不可逆的,否则可能会出现程序员拿到加密后的密码把他们再进行还原,如果是这样的你还能放心使用支付宝吗。

其实我们可以把Hash算法理解成一种特殊的压缩算法,它能够把任意长度的数据压缩成一种固定长度的字符串,这就好像是给数据加了一把锁。

常见的摘要算法有: MD2、MD4、MD5、HAVAL、SHA

有人可能会对MD5产生疑惑,因为网上有些网站中可以将MD5加密后的密码还原,其实,这是因为MD5这种加密算法用的比较多,一些网站就把一些常用的MD5原文和密文进行了保存,它的还原只是在数据库中查找出来的,对于比较麻烦的密码采用MD5加密后去网站还原是还原不出来的。

认证

如何确定你自己的唯一性呢?我们在上面的叙述过程中出现过公钥加密,私钥解密的这个概念。提到的私钥只有你一个人所有,能够辨别唯一性,所以我们可以把顺序调换一下,变成私钥加密,公钥解密。使用私钥再加上摘要算法,就能够实现数字签名,从而实现认证。

到现在,综合使用对称加密、非对称加密和摘要算法,我们已经实现了加密、数据认证、认证,那么是不是就安全了呢?非也,这里还存在一个数字签名的认证问题。因为私钥是是自己的,公钥是谁都可以发布,所以必须发布经过认证的公钥,才能解决公钥的信任问题。

发布的公钥必须是让 CA(Certificate Authority,证书认证机构) 颁布具有认证过的公钥,才能解决公钥的信任问题。

你可能感兴趣的:(计算机网络,面试知识点)