『 Linux 』HTTPS

文章目录


HTTPS协议

HTTPS协议并不是一个独立的协议,其是一种以HTTP协议为基础,在该协议上进行一种加密协议从而使得在这种策略下在网络传输中提供更高的安全性,使得数据传输更加保密,完整以及可靠;

通常数据存在两种状态,明文以及密文:

  • 明文

    明文指未经加密处理的原始信息,明文可以是任何形式的可读数据,如文本,图像,音频等数据;

    明文在传输或存储时若是没有进行加密保护则非常容易被进行拦截和读取,例如电子邮件的内容,未加密的文档以及未加密的用户敏感信息等等;

  • 密文

    密文是通过加密算法处理后的信息,通过加密算法和加密密钥,明文可以被转换为不可读的形式,只有被授权的访问者持有对应的解密算法以及密钥才能进行解密;

    密文在传输过程中即使被第三方劫持获取,也难以被解读和利用;

通常情况下,在使用HTTP协议进行数据传输时都是按明文的状态进行传输,以之前编写的简易HTTP服务器为例;

使用浏览器对主页进行访问,而在使用HTTP协议进行数据传输(包括请求和响应)时对应的数据都是按照明文的方式进行传输,若传输的数据是用户敏感信息,而该敏感信息同样是以明文的方式进行传输,若是数据被中间人截取将会泄露用户的敏感信息;

HTTPS协议则是在HTTP协议的基础上增加了一个用于对信息进行加密的软件层;

通常这个用来加密的软件层为SSL协议或是TLS协议;

  • SSL协议

    SSL协议是由Netscape公司在1990年代中期开发的一种加密协议,旨在通过加密数据传输来提高互联网通信的安全性,其功能为如下:

    • 数据加密

      对数据进行加密传输,放置数据被窃听;

    • 身份验证

      通过数字证书验证通信双方的身份;

    • 数据完整性

      使用摘要函数确保数据未被篡改;

  • TLS协议

    TLS协议是SSL协议的继任者,由标准化组织IETF开发,以解决SSL协议中存在的各种安全问题,其功能如下:

    • 数据加密

      SSL相比,TLS引入了更加强大的加密算法;

    • 身份验证

      通过数字证书,实现更加可靠的身份验证;

    • 数据完整性

      使用消息认证码(MAC)和改进的哈希算法(如SHA-256)确保数据未被篡改;

    • 握手协议改进

      TLS1.3简化了握手过程,提高了连接建立的效率和安全性;


密钥

密钥是一种用于加密和解密信息的一组数据,在加密算法中起着至关重要的作用;

密钥可以控制加密和解密的过程,是的即使相同的密文在使用不同的密钥时也会产生不同的密文使得数据的安全性得到保障;

假设存在一个字符串"hello",对该字符串中的每个字母对应的ASCII码进行异或上7;

对应结果如下:

  • h的ASCII码为104,^7结果为111对应字母o
  • e的ASCII码为101,^7结果为98对应字母b
  • l的ASCII码为108,^7结果为107对应字母k
  • o的的ASCII码为111,^7结果为104对应字母h

最终得到的新的字符串为"obkkh",同样的这个新的字符串可以通过^7从而得到字符串"hello"(两个^7相互抵消);

其中字符串"hello"则可以类比为明文,使用异或得到的新的字符串"obkkh"则为密文,7则为密钥,对应的异或即为加密/解密算法;


加密的原因

对数据进行加密的主要目的是为了保障信息的安全性和隐私性;

  • 保密性

    加密可以确保只有授权的人员才能访问信息,无论是存储还是在网络上进行数据的传输,加密都可以放置未经授权的第三方窃听和查看信息;

  • 完整性

    加密不仅仅可以隐藏信息,还可以通过一些验证方式验证信息在传输过程中未被篡改;

  • 认证

    加密技术可以用于验证发送方的身份,以确保信息来源是可信的;

  • 防止抵赖

    通过使用数字签名,发送者不能否认自己发送过的信息,防止抵赖;

  • 数据保护和隐私

    在处理敏感数据,如个人身份信息,金融数据,医疗记录等,加密是保护数据隐私的基本手段,可避免数据泄露引发的各种法律和隐私问题;

以运营商劫持为例,运营商劫持是指互联网服务提供商(ISP)未经用户同意,篡改或劫持用户访问的网络流量,这种行为往往导致用户访问某些网站或应用时遭遇问题,信息被截获或篡改,甚至被重定向到恶意网站,这种行为可能处于各种动机,如广告插入,信息过滤或是恶意攻击;

通常情况下,在网络中的任何信息的传输首先需要通过运营商,而若是你发送的数据,如网络请求是采用HTTP协议进行的,这表示这个请求是通过明文进行传输,当运营商或者中间人截获到你的请求时可能会对明文请求中的信息进行篡改,或是返回一个恶意的响应;

  • 正常访问过程

    你的浏览器发送HTTP请求至example-news.com的服务器;

    服务器返回网页内容展示给你;

  • IPS劫持过程

    输入网站example-news.com并按下回车;

    浏览器向example-news.com发送HTTP请求;

    在请求到达目标服务器前IPS拦截了请求;

    IPS篡改请求,重定向到一个带有广告的页面,如ad-redirect.com;

    你的浏览器最终展示的是ad-redirect.com页面而不是example-news.com页面;

    通常这种攻击方式被称为中间人攻击,即MITM攻击;


加密方式

常见的加密方式分为两种,对称加密以及非对称加密;

  • 对称加密

    对称加密即双方所使用的密钥相同,在使用相同加密/解密算法的前提下,使用该密钥进行加密的密文同样可以使用该密钥进行解密;

    在上文中出现的例子,即明文为字符串"hello",其各个字符通过异或^7得到新的字符串obkkh即为密文,该密文同样可以通过异或^7还原为"hello",其中7作为密钥,明文既可以通过该密钥进行加密得到密文,同样的密文也可以通过该密钥进行解密还原出明文,其中这里的7就可以类比为对称加密的密钥;

    相当于一扇门可以被一把钥匙锁上,也可以被同一把钥匙解锁;

    常见对称加密算法有:DES,3DES,AES,TDEA,Blwofish,RC2等;

    对称加密具有算法公开,计算量小,加密速度快,加密效率高等特点;

  • 非对称加密

    非对称加密中,每一个端都可以生成两个一对密钥,通常情况下两个密钥中必须公开一个密钥,其中这个被公开的密钥被称为公钥(公开密钥 - Public Key),而本端所存储的密钥(永远不离开本端)被称为私钥(私有密钥 - Private Key);

    利用公钥进行加密的数据只能通过私钥进行解密,公钥无法对使用公钥加密的密文进行解密;

    私钥也如此,使用私钥进行加密的密文只能通过公钥进行解密,私钥无法解密使用私钥加密的密文;

    相当于一扇门拥有两把钥匙,两把钥匙都有一样的特性,在使用一把钥匙锁门的时候只能使用另一把钥匙开门;

    非对称加密也有一些对应的缺点:

    • 速度极慢

      非对称加密的算法通常比加密算法慢得多,主要原因是非对称算法依赖于复杂的数学运算,如大整数的幂运算模运算,椭圆曲线运算等需要耗费大量时间开销的运算;

    • 密钥管理难度大

      为了保证足够的安全性,非对称加密算法通常需要较长的密钥,这个长度通常在2048位及其以上,这对存储和传输都需要更高的要求;

    • 数据体积增加

      非对称加密的安全性很大程度依赖于密钥的长度,在计算能力不断提高的情况下,原来安全的密钥长度可能不再安全故需要不断增加密钥长度以保持足够的安全性,这也提高了计算和管理的成本;

    除了这些缺点以外还有其他缺点,但不再这里赘述,非对称加密安全性比对称加密安全性要高得多,但其也因为速度过慢所以不推荐用来进行持久性的双端交互(请求与响应);

    通常情况下HTTPS协议采用的是 对称加密+非对称加密 的方式进行;


数据指纹

数据指纹又被称作数据摘要,表示数据通过特定算法将任意长度的输入数据转换为固定长度的输出(通常是哈希值)的一个过程;

常见的哈希函数有MD5 , SHA-1 , SHA-256 等,通常来说数据指纹存在以下特点:

  • 固定长度

    无论输入数据的长度是多少,生成的摘要长度都是固定的,例如SHA-256所生成的数据指纹总是256位;

  • 不可逆

    从数据指纹中无法还原出原始数据;

  • 唯一性

    不同输入数据所生成的数据指纹(理想状况下)应该是唯一的,即使输入数据有非常小的变化,通过同样的算法重新生成的数据指纹也会有非常大的显著变化,也就是所谓的"雪崩效应";

  • 快速计算

    哈希函数的计算效率通常比较高,可以快速生成数据指纹;

在使用相同的哈希函数对不同长度数据生成数据指纹的长度是相同的,生成的数据指纹大小通常要比原数据小得多,这些原数据可能是音频,视频等二进制文件;

实际上百度网盘中秒传的功能实际上就是应用了类似的方式,当用户A上传一个网盘服务器中不存在的资源即文件A后,当资源被上传成功后对应的服务器将会为该资源进行生成对应的数据摘要,并且将该数据摘要存储在云端当中,当用户B同样的将相同的资源即文件A进行上传时,对应的服务端将会先对该资源进行数据摘要,数据摘要具有唯一性与快速计算的特点,服务端对该资源生成对应的数据摘要后在云端当中进行比对,比对发现该资源在云端中存在后对用户A与用户B生成对应的软链接从而达到秒传的功能;

通常情况下摘要进行加密就会生成对应的数字签名;


网络通信加密方案及短板

加密方式分为对称加密与非对称加密,两种加密方式在上文中都有介绍,在此不进行赘述;

  • 只使用对称加密

    使用对称加密即服务端为不同的客户端维护一组单独的对称密钥,这个密钥可能是以安装的形式内置进客户端内,也可能是其他方式,客户端与服务端通过对称密钥对明文进行加密从而达到隐私效果;

    这是一种理想的方式,但是有许多不同的需要用来思考的点;

    • 密钥的管理

      一个服务端可以控制若干个客户端,那么如果该服务的服务人群基数过大,那么服务端需要加大对应的管理方式;

    • 复杂性

      虽然进行了加密,但采用的加密方式是对称加密,对称加密的方式需要考虑客户端如何获取服务端的对称密钥?如何保证客户端所获得的密钥是安全的且不会被盗取的?如果以离线的方式进行下发密钥如何定期对密钥的安全性进行提升等等,其维护成本将会更大;

    • 安全性

      如果是以离线的方式分发密钥,如何证明服务端或客户端所接受到的请求/响应是未被经过篡改的,如果分发与保管的方式不难,那么这意味着每个人都能获取这个对称加密的密钥,安全系数大大降低;

      就假设密钥分发的方式是以第一次客户端向服务端进行发起请求,服务端再将密钥以明文的形式返回给客户端,这种方式中间人可以轻而易举的获取密钥从而达到窃听或篡改请求/响应的目的;

    对称加密在效率和性能上的优势使其能成为数据加密的理想选择,但在密钥管理,分发和更新方面面临挑战,所以只使用对称加密作为通信加密手段是不理想的;

  • 只使用非对称加密

    只使用非对称加密的前提下,服务端具有两个密钥分别为公钥和私钥,其中私钥不离开服务端,公钥必须公开,当客户端向服务端发起请求的时候对应的服务端将公钥发送给客户端;

    当客户端再次对服务端发起请求时使用公钥对明文进行加密,此时的请求因为使用公钥进行加密,即使中间人获取了公钥也无法对使用公钥进行加密的密文进行解密从而保证了客户端向服务端发起的请求密文无法被破解;

    但是其无法保证服务端向客户端发送的响应是否安全,因为公钥很可能已经被中间人获取,中间人虽然无法对客户端向服务端发起的请求密文进行解密,但是对于服务端向客户端发起的响应密文可以通过使用最初获取的服务端向客户端以明文形式发送的密钥对响应密文进行解密,监听或是篡改响应;

    同样只使用非对称加密是不完全安全的;

  • 双方都使用非对称加密

    双方都使用非对称加密的方案即客户端与服务端都可以生成对应的密钥对(公钥与私钥),通过交换公钥的方式来对服务端和客户端的通信之间进行加密;

    这种方式与上面的方式基本相同,一样只能保持一端向另一端的通信是安全,而另一个方向是不安全的;

    同时双方都使用非对称加密还有一个缺点就是效率会变得更慢,通常非对称加密不用来进行持久的请求和响应;

    缺点:

    • 不安全
    • 速度慢
  • 非对称加密配合对称加密

    通常情况下HTTPS协议所采用的方式即为非对称加密配合对称加密,其中非对称加密是用来保护对称加密密钥的传输的,而实际双端在进行交互的时是采用对称加密的方式来进行传输;

    这种方式提高了双端进行交互的安全性同时也提高了效率,即只有在分发对称密钥时采用的是非对称加密的方式,进行真正的网络通信时采用的是对称加密的方式,由于中间人无法对使用公钥S的密文进行解密,无法获取对称密钥故无法进行解密操作;

    但实际上中间人的攻击方式不只有这一个,无论是服务端还是客户端,在直接进行交互时无法判断所接受到的请求或是响应是否有被进行篡改,无法证明这个请求是否可信;

    这意味着中间人同样可以使用修改请求/响应的方式使得服务端/客户端与本端进行交互,无法辨别对方的身份;

    中间人虽然不能以获取服务端公钥S来窃取双方的通信或是修改,但是中间人可以通过生成自已的密钥对,通过替换服务端返回给客户端的响应中的公钥替换成自己的私钥从而达成窃听/修改数据的目的,本质原因是客户端与服务端无法验证对方所发送的请求/响应是否可信;


CA认证

在上文中对于网络通信加密的方案中,最后一个方案才是实际的使用方案,这个方案解决了大部分的问题,包括安全性和效率,将所有的问题指向了最后一个问题:

  • 如何保证双方所接受到的报文(请求和响应)可信

在最后一种方案中,MITM只能依靠通过修改从服务端发给客户端的响应中的公钥进行替换,那么说明MITM修改了对应的报文但因为服务端与客户端没有验证消息是否可信的渠道导致密文被窃听/修改,那么只需要解决最后一个问题: 提供验证对端身份的方式 ;

但是实际上无论双端如何进行交换数据或者验证身份,只有两端的前提下就必须面临一下问题:

  • 验证身份时必须将对应存有身份的报文进行加密以免被修改
  • 哪一端先进行加密以及如何获取密钥而不被窃取与替换

在只有双端的情况下这又是一个 "鸡生蛋,蛋生鸡" 的问题,所以在实际的解决方案中必须引入第三方,由第三方提供权威的认证,以在进行公钥传输时公钥无法被替换;

CA(Certficate Authority , 证书颁发机构)是网络安全基础设施中至关重要的组成部分;

CA负责颁发和管理数字证书,通过签发公钥证书来验证通信双方的身份,其通常负责:

  • 身份验证和证书颁发

    当一个实体(网站或者用户)申请数字证书时,CA需要验证他的身份;

    CA在验证申请者身份后使用自己的私钥对申请者的信息(包括公钥)进行签名,生成对应的数字证书;

  • 证书管理

    CA所颁发的数字证书是具有有效期的,到期之前需要进行更新与重新签发;

    如果证书的持有者的私钥泄露或发现伪造,CA需要吊销这些证书并通知各网络方;

  • 维护证书吊销列表

    已吊销证书的列表,供客户端在验证证书时参考,确保证书未被撤销;

  • 提供OCSP服务

    在线证书状态协议(OCSP)服务器,实时查询证书状态,确认其有效性;

而实际上服务端在使用HTTPS之前需要向CA机构申领一份数字证书,数字证书里含有证书申请者的信息,公钥信息等等;

服务器把证书传给浏览器,浏览器从证书中里获取公钥;

服务端在使用HTTPS协议前需要先一份数字证书,这个证书中包含的内容包括服务端的域名,服务端的申请者(一般为对应公司的法人),服务端的公钥等信息(私钥永远不会离开本端),将这些信息将被生成为一个.csr后缀文件;

CA机构将收到来服务端的对应的CA证书申请信息并对申请进行审核,当审核通过后将为服务器颁发数字证书,对应的这个数字证书是在服务端内以安装的形式存在的,当接收到来自一个客户端的请求时对应的服务端将直接将数字证书以明文的形式发送给客户端;

通常情况下客户端中存在许多的来自不同CA机构的公钥,当客户端接收到对应的证书后将使用对应CA机构的公钥对证书信息解密为明文并核对对应的信息;

通常在浏览器中存在当前客户端(浏览器)所访问的服务器的对应的证书列表,也可以查看这些证书的信息;


CA证书的细节以及如何保证服务端公钥的安全性和数据完整性

证书分为两部分信息,分为明文信息(INFO)与数字签名;

  • 明文信息

    明文信息通常携带该证书的签发机构,证书有效期,拓展信息,申请域名,证书申请者以及服务端的公钥等信息;

    这些信息是明文信息,表示无论是任何人只要获取到对应的证书都可以获得对应的信息,对应的在这些信息当中不存在敏感信息,既是明文信息也是公开信息;

  • 数字签名

    签名的字面意思就是在一份文件中使用自己的名字进行签名,数字签名也可以以相同的概念进行理解,在一组数据中,将这组数据使用对应的哈希算法进行数据摘要,这个哈希算法会形成一组固定长度的数据指纹,将数据指纹使用自己的私钥进行加密,这些加密后的密文即为数字签名;

当客户端接收到对应的证书后会进行以下操作:

  • 解密数字签名

    将证书中的数字签名使用对应CA机构的公钥进行解密,解密得到对应的数据指纹;

  • 提取明文信息中的数据摘要

    使用相同的哈希算法对明文信息进行数据摘要;

  • 比对数据指纹

    将解密数字签名所得到的数据指纹与提取得到的明文信息的数据摘要进行比对;

    由于数据指纹具有唯一性,当数据摘要与数据指纹相同时进行其他信息的核对;

  • 其他信息的核对

    核对明文信息中域名与申请的域名是否相匹配,有效期是否匹配,证书是否吊销等;

当上述所有步骤全部验证通过后客户端才会信任从证书中获取的服务端的公钥;

数据指纹具有唯一性,如果MITM采用修改证书数据的方式进行攻击,那么其必定要修改证书中的明文信息与数字签名,如果只修改其中一个而不修改另外一个的话根据数据指纹的比对将会将该证书视为一个不合法的证书(修改对应的明文数据时再进行数据摘要将会发生"雪崩效应",即使是很小的更改在最终的数据摘要下都会出现很大的变化),但MITM无法对数字签名进行修改,原因是数字签名具有两个条件:

  • 明文信息的摘要
  • CA机构的私钥

而MITM通常无法获取到CA机构的私钥,因为私钥是永远不能离开本端的,即使MITM重新修改了明文数据与对应数字签名中的数据指纹,但是其没有CA机构的私钥,无法生成对应的数字签名,这意味着CA证书保证了服务端所发送的公钥是可信的;


CA认证后对称加密与非对称加密配合使用的安全性

在上文提到了几种对网络通信进行加密的方案,包括只使用对称加密,只使用非对称加密,双端都是用非对称加密,对称加密与非对称加密配合使用的四种方案,其中最后一种方案无论是安全性还是效率都是最高的,但其在安全方面中由于双端无法验证对方是否可信所以存在被MITM更换服务端公钥导致的MITM进行窃听/修改数据的风险;

而增加了CA认证后MITM无法修改证书中的服务器的公钥从而保证了通信过程整体的数据完整性以及数据安全性;


中间人的攻击方式

中间人攻击的常见方法和步骤为如下:

  • 流量劫持

    攻击者需要位于目标设备和网络之间的通信途径上,常见的方法包括:

    • ARP欺骗

      攻击者使用伪造的ARP(地址解析协议)消息,是受害者将攻击者的MAC地址与合法设备或路由器的IP地址进行绑定,从而使受害者错误的将通信流量发送到攻击者的设备上;

    • DNS欺骗

      攻击者通过伪造DNS响应,将受害者引导到一个伪造的网站而非目标的真实地址;

    • WI-FI攻击

      攻击者设置一个具有相同SSID的恶意热点,使受害者连接到攻击者的WI-FI,而不是合法的WI-FI;

  • SSL剥离

    攻击者将受害者从HTTPS安全连接降级为HTTP连接以实现明文流量的拦截,通过代理服务器攻击者可以将受害者与真实服务器之间的通信转成为明文数据,但在浏览器中仍然显示为安全连接;

  • 协议篡改

    通过篡改协议数据包,攻击者可以修改或注入数据,如对HTTP请求或响应包进行修改以窃取敏感信息或插入恶意代码;

  • 会话劫持

    攻击者劫持双方会话,通过复制会话令牌或Cookies冒充一方实现未经授权的访问;

预防中间人攻击的方式包括:

  • 使用加密通讯

    确保使用HTTPS连接进行数据传输(注意证书合法性)以避免使用不安全的HTTP;

  • 验证证书

    用户应验证数字证书的有效性以防止被假证书欺骗;

  • 使用虚拟专用网络

    通过虚拟专用网络加密数据传输防止局域网内的不安全通信;

  • 强认证机制

    使用双因素认证等措施增加攻击难度;

  • 保持系统和软件更新

    即使修复已知漏洞以防止被利用;

相关推荐
dessler4 分钟前
Docker-如何启动docker
运维·docker·云原生·容器·eureka
zhy295634 分钟前
【DOCKER】基于DOCKER的服务之DUFS
运维·docker·容器·dufs
无为之士9 分钟前
Linux自动备份Mysql数据库
linux·数据库·mysql
秋名山小桃子18 分钟前
Kunlun 2280服务器(ARM)Raid卡磁盘盘符漂移问题解决
运维·服务器
与君共勉1213819 分钟前
Nginx 负载均衡的实现
运维·服务器·nginx·负载均衡
岑梓铭26 分钟前
(CentOs系统虚拟机)Standalone模式下安装部署“基于Python编写”的Spark框架
linux·python·spark·centos
努力学习的小廉26 分钟前
深入了解Linux —— make和makefile自动化构建工具
linux·服务器·自动化
MZWeiei30 分钟前
Zookeeper基本命令解析
大数据·linux·运维·服务器·zookeeper
7yewh1 小时前
嵌入式Linux QT+OpenCV基于人脸识别的考勤系统 项目
linux·开发语言·arm开发·驱动开发·qt·opencv·嵌入式linux
Arenaschi1 小时前
在Tomcat中部署应用时,如何通过域名访问而不加端口号
运维·服务器