zoukankan      html  css  js  c++  java
  • https之加密内容介绍2

    加密算法:

    对称加密算法

    非对称加密算法:

     rsa:

      rsa加密:公钥加密,私钥解密;

      rsa签名:私钥加密,公钥解密;

    (一)解决内容可能被窃听的问题——加密

    方法1. 对称加密

    这种方式加密和解密同用一个密钥。加密和解密都会用到密钥。没有密钥就无法对密码解密,反过来说,任何人只要持有密钥就能解密了。

    以对称加密方式加密时必须将密钥也发给对方。可究竟怎样才能安全地转交?在互联网上转发密钥时,如果通信被监听那么密钥就可会落人攻击者之手,同时也就失去了加密的意义。另外还得设法安全地保管接收到的密钥。

    方法2. 非对称加密

    公开密钥加密使用一对非对称的密钥。一把叫做私有密钥,另一把叫做公开密钥。顾名思义,私有密钥不能让其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得。

    使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听而盗走。

    前端基础:为什么https比http更安全?https的工作原理是什么?

     

    非对称加密的特点是信息传输一对多,服务器只需要维持一个私钥就能够和多个客户端进行加密通信。

    这种方式有以下缺点:

    • 公钥是公开的,所以针对私钥加密的信息,黑客截获后可以使用公钥进行解密,获取其中的内容;
    • 公钥并不包含服务器的信息,使用非对称加密算法无法确保服务器身份的合法性,存在中间人攻击的风险,服务器发送给客户端的公钥可能在传送过程中被中间人截获并篡改;
    • 使用非对称加密在数据加密解密过程需要消耗一定时间,降低了数据传输效率;

    方法3.  对称加密+非对称加密(HTTPS采用这种方式)

    使用对称密钥的好处是解密的效率比较快,使用非对称密钥的好处是可以使得传输的内容不能被破解,因为就算你拦截到了数据,但是没有对应的私钥,也是不能破解内容的。就比如说你抢到了一个保险柜,但是没有保险柜的钥匙也不能打开保险柜。那我们就将对称加密与非对称加密结合起来,充分利用两者各自的优势,在交换密钥环节使用非对称加密方式,之后的建立通信交换报文阶段则使用对称加密方式。

    具体做法是:发送密文的一方使用对方的公钥进行加密处理“对称的密钥”,然后对方用自己的私钥解密拿到“对称的密钥”,这样可以确保交换的密钥是安全的前提下,使用对称加密方式进行通信。所以,HTTPS采用对称加密和非对称加密两者并用的混合加密机制。

    (二)解决报文可能遭篡改问题——数字签名(校验数据的完整性)

    网络传输过程中需要经过很多中间节点,虽然数据无法被解密,但可能被篡改, 那如何校验数据的完整性呢?— — 校验数字签名。

    数字签名有两种功效:

    • 能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名。
    • 数字签名能确定消息的完整性,证明数据是否未被篡改过。

    数字签名如何生成:

    前端基础:为什么https比http更安全?https的工作原理是什么?

     

    将一段文本先用Hash函数生成 (消息摘要),然后用发送者的私钥加密生成(数字签名),与原文文一起传送给接收者。接下来就是接收者校验数字签名的流程了。

    校验数字签名流程:

    前端基础:为什么https比http更安全?https的工作原理是什么?

     

    接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与上一步得到的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。

    假设消息传递在Kobe,James两人之间发生。James将消息连同数字签名一起发送给Kobe,Kobe接收到消息后,通过校验数字签名,就可以验证接收到的消息就是James发送的。当然,这个过程的前提是Kobe知道James的公钥。

    问题的关键的是,和消息本身一样,公钥不能在不安全的网络中直接发送给Kobe,或者说拿到的公钥如何证明是James的。

    此时就需要引入了证书颁发机构(Certificate Authority,简称CA),CA数量并不多,Kobe客户端内置了所有受信任CA的证书。CA对James的公钥(和其他信息)数字签名后生成证书。

    (三)解决通信方身份可能被伪装的问题——数字证书

    数字证书认证机构处于客户端与服务器双方都可信赖的第三方机构的立场上。我们来介绍一下数字证书认证机构的业务流程。

    前端基础:为什么https比http更安全?https的工作原理是什么?

     

    • 服务器的运营人员向数字证书认证机构提出公开密钥的申请
    • 数字证书认证机构在判明提出申请者的身份之后,会对已申请的公开密钥做数字签名
    • 然后分配这个已签名的公开密钥,并将该公开密钥放入公钥证书后绑定在一起
    • 服务器会将这份由数字证书认证机构颁发的公钥证书发送给客户端,以进行非对称加密方式通信。公钥证书也可叫做数字证书或直接称为证书。

    接到证书的客户端可使用数字证书认证机构的公开密钥,对那张证书上的数字签名进行验证,一旦验证通过,客户端便可明确两件事:

    一、认证服务器的公开密钥的是真实有效的数字证书认证机构。

    二、服务器的公开密钥是值得信赖的。

     

    2、加密算法

    HTTPS 解决数据传输安全问题的方案就是使用加密算法,具体来说是混合加密算法,也就是对称加密和非对称加密的混合使用,这里有必要先了解一下这两种加密算法的区别和优缺点。

    2.1 对称加密

    对称加密,顾名思义就是加密和解密都是使用同一个密钥,常见的对称加密算法有 DES、3DES 和 AES 等,其优缺点如下:

    • 优点:算法公开、计算量小、加密速度快、加密效率高,适合加密比较大的数据。
    • 缺点:交易双方需要使用相同的密钥,也就无法避免密钥的传输,而密钥在传输过程中无法保证不被截获,因此对称加密的安全性得不到保证。每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一密钥,这会使得发收信双方所拥有的钥匙数量急剧增长,密钥管理成为双方的负担。对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高。

    本文不对具体的加密算法做详细介绍,有兴趣的同学可以参考 对称加密算法详解,如果直接将对称加密算法用在 HTTP 中,会是下面的效果:

    HTTPS 详解(一):附带精美详尽的 HTTPS 原理图

     

    图2. 对称加密数据传输过程

    从图中可以看出,被加密的数据在传输过程中是无规则的乱码,即便被第三方截获,在没有密钥的情况下也无法解密数据,也就保证了数据的安全。但是有一个致命的问题,那就是既然双方要使用相同的密钥,那就必然要在传输数据之前先由一方把密钥传给另一方,那么在此过程中密钥就很有可能被截获,这样一来加密的数据也会被轻松解密。那如何确保密钥在传输过程中的安全呢?这就要用到非对称加密了。

    2.2 非对称加密

    非对称加密,顾名思义,就是加密和解密需要使用两个不同的密钥:公钥(public key)和私钥(private key)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公钥对外公开;得到该公钥的乙方使用公钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的私钥对加密后的信息进行解密。如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。常用的非对称加密算法是 RSA 算法,想详细了解的同学点这里:RSA 算法详解一、RSA 算法详解二,其优缺点如下:

    • 优点:算法公开,加密和解密使用不同的钥匙,私钥不需要通过网络进行传输,安全性很高。
    • 缺点:计算量比较大,加密和解密速度相比对称加密慢很多。

    由于非对称加密的强安全性,可以用它完美解决对称加密的密钥泄露问题,效果图如下:

    HTTPS 详解(一):附带精美详尽的 HTTPS 原理图

     

    图3. 客户端通过非对称加密把密钥 KEY 发送给服务器

    在上述过程中,客户端在拿到服务器的公钥后,会生成一个随机码 (用 KEY 表示,这个 KEY 就是后续双方用于对称加密的密钥),然后客户端使用公钥把 KEY 加密后再发送给服务器,服务器使用私钥将其解密,这样双方就有了同一个密钥 KEY,然后双方再使用 KEY 进行对称加密交互数据。在非对称加密传输 KEY 的过程中,即便第三方获取了公钥和加密后的 KEY,在没有私钥的情况下也无法破解 KEY (私钥存在服务器,泄露风险极小),也就保证了接下来对称加密的数据安全。

    而上面这个流程图正是 HTTPS 的雏形,HTTPS 正好综合了这两种加密算法的优点,不仅保证了通信安全,还保证了数据传输效率。

    ==============

    【思维导图】深入理解HTTPS原理、过程

    【思维导图】深入理解HTTPS原理、过程
    【思维导图】深入理解HTTPS原理、过程
    【思维导图】深入理解HTTPS原理、过程

    我们经常会遇到页面被运营商插入小广告这种事情(数据被篡改),可想而知,HTTP是有多么不安全。

    如何做到的?

    答:只需要设定相应的DNS,做一个中间人攻击,再将修改后的数据返回。

    那么:解决上面问题需要考虑哪些因素:

    【思维导图】深入理解HTTPS原理、过程

    HTTPS的设计的时候就主要考虑了以上的主要因素:数据加密 --传输内容进行混淆

    非对称加密(也叫公钥加密)

    对称加密(也叫密钥加密)

    身份验证 --通信双方验证对方的身份真实性

    数据完整性保护 --检测传输的内容是否被篡改或伪造

    因此切换使用HTTPS,就可以防止页面被运营商篡改问题。

    HTTPS概念如下:

    【思维导图】深入理解HTTPS原理、过程

    简单用图表示:

    【思维导图】深入理解HTTPS原理、过程

    安全HTTP的实现

    【思维导图】深入理解HTTPS原理、过程
    【思维导图】深入理解HTTPS原理、过程

    数据完整性:

    数字签名是只有信息发送者才能产生的别人无法伪造的一段文本,这段文本是对信息发送者发送信息真实性的一个有效证明,具有不可抵赖性。

    报文的发送方从报文文本生成一个128位的散列值(或称为报文摘要活哈希值),发送方使用自己的私钥对这个摘要值进行加密来形成发送方的数字签名。

    然后这个数字签名将作为报文的附件一起发送给报文的接收方。

    报文的接收方首先从接收到的原始报文中计算出128位的散列值,再用发送方的公钥来对报文附加的数字签名进行解密。

    如果两次得到的结果是一致的那么接收方可以确认该数字签名是发送方的,同时确认信息是真实的。

    HTTPS数据交互过程:

    HTTP中没有加密机制,可以通过SSL(Secure Socket Layer 安全套接层)或TLS(Transport Layer Security 安全层传输协议)的组合使用,加密HTTP的通信内容。

    SSL工作在OSI七层模型中的表示层,TCP/IP 四层模型的应用层。

    SSL记录协议操作:

    分段 将每个上层消息分解成不大于2^14(16384)位,然后有选择的进行压缩

    添加MAC 在压缩数据的基础上计算MAC

    加密 消息加上MAC用对称加密方法加密

    添加SSL记录头 内容类型(8位),主版本(8位),副版本(8位),压缩长度(16位)

    SSL握手过程:

    【思维导图】深入理解HTTPS原理、过程

    SSL协议两个重要概念,SSL会话,SSL连接;

    SSL连接是点到点的连接,而且每个连接都是瞬态的,每一个链接都与一个会话关联。

    SSL会话是一个客户端和一个服务器之间的一种关联,会话由握手协议(Handshake Protocol)创建,所有会话都定义了一组密码安全参数,这些安全参数可以在多个连接之间共享,会话可以用来避免每一个链接需要进行的代价高昂的新的安全参数协商过程。

    好的,今天的介绍先到这里了哈。

       

    前端基础:为什么https比http更安全?https的工作原理是什么?

    代码开发 2019-05-29 20:51:18

    链接:https://blog.fundebug.com/2019/04/26/why-is-https-more-secure-than-http/

    近几年,互联网发生着翻天覆地的变化,尤其是我们一直习以为常的HTTP协议,在逐渐的被HTTPS协议所取代,在浏览器、搜索引擎、CA机构、大型互联网企业的共同促进下,互联网迎来了“HTTPS加密时代”,HTTPS将在未来的几年内全面取代HTTP成为传输协议的主流。

    一、什么是HTTPS

    HTTPS是在HTTP上建立SSL加密层,并对传输数据进行加密,是HTTP协议的安全版。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。

    HTTPS主要作用是:

    (1)对数据进行加密,并建立一个信息安全通道,来保证传输过程中的数据安全;

    (2)对网站服务器进行真实身份认证。

    我们经常会在Web的登录页面和购物结算界面等使用HTTPS通信。使用HTTPS通信时,不再用http://,而是改用https://。另外,当浏览器访问HTTPS通信有效的Web网站时,浏览器的地址栏内会出现一个带锁的标记。对HTTPS的显示方式会因浏览器的不同而有所改变。

    二、为什么需要HTTPS

    在HTTP协议中有可能存在信息窃取或身份伪装等安全问题。使用HTTPS通信机制可以有效地防止这些问题,接下来,我们先来了解下

    HTTP协议存在的哪些问题:

    1.通信使用明文(不加密),内容可能被窃听

    由于HTTP本身不具备加密的功能,所以也无法做到对通信整体(使用HTTP协议通信的请求和响应的内容)进行加密。即,HTTP报文使用明文(指未经过加密的报文)方式发送。

    HTTP明文协议的缺陷是导致数据泄露、数据篡改、流量劫持、钓鱼攻击等安全问题的重要原因。HTTP协议无法加密数据,所有通信数据都在网络中明文“裸奔”。通过网络的嗅探设备及一些技术手段,就可还原HTTP报文内容。

    2.无法证明报文的完整性,所以可能遭篡改

    所谓完整性是指信息的准确度。若无法证明其完整性,通常也就意味着无法判断信息是否准确。由于HTTP协议无法证明通信的报文完整性,因此,在请求或响应送出之后直到对方接收之前的这段时间内,即使请求或响应的内容遭到篡改,也没有办法获悉。

    换句话说,没有任何办法确认,发出的请求/响应和接收到的请求/响应是前后相同的。

    3.不验证通信方的身份,因此有可能遭遇伪装

    HTTP协议中的请求和响应不会对通信方进行确认。在HTTP协议通信时,由于不存在确认通信方的处理步骤,任何人都可以发起请求。另外,服务器只要接收到请求,不管对方是谁都会返回一个响应(但也仅限于发送端的IP地址和端口号没有被Web服务器设定限制访问的前提下)

    HTTP协议无法验证通信方身份,任何人都可以伪造虚假服务器欺骗用户,实现“钓鱼欺诈”,用户无法察觉。

    反观HTTPS协议,它比HTTP协议相比多了以下优势:

    1. 数据隐私性:内容经过对称加密,每个连接生成一个唯一的加密密钥
    2. 数据完整性:内容传输经过完整性校验
    3. 身份认证:第三方无法伪造服务端(客户端)身份

    三、HTTPS如何解决HTTP上述问题?

    HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替而已。

    通常,HTTP直接和TCP通信。当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。简言之,所谓HTTPS,其实就是身披SSL协议这层外壳的HTTP。

    前端基础:为什么https比http更安全?https的工作原理是什么?

     

    在采用SSL后,HTTP就拥有了HTTPS的加密、证书和完整性保护这些功能。也就是说HTTP加上加密处理和认证以及完整性保护后即是HTTPS。

    前端基础:为什么https比http更安全?https的工作原理是什么?

     

    HTTPS 协议的主要功能基本都依赖于 TLS/SSL 协议,TLS/SSL 的功能实现主要依赖于三类基本算法:散列函数 、对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。

    前端基础:为什么https比http更安全?https的工作原理是什么?

     

    四、 HTTPS工作流程

    前端基础:为什么https比http更安全?https的工作原理是什么?

     

    1.Client发起一个HTTPS(比如https://juejin.im/user/5a9a9cdcf265da238b7d771c)的请求,根据RFC2818的规定,Client知道需要连接Server的443(默认)端口。

    2.Server把事先配置好的公钥证书(public key certificate)返回给客户端。

    3.Client验证公钥证书:比如是否在有效期内,证书的用途是不是匹配Client请求的站点,是不是在CRL吊销列表里面,它的上一级证书是否有效,这是一个递归的过程,直到验证到根证书(操作系统内置的Root证书或者Client内置的Root证书)。如果验证通过则继续,不通过则显示警告信息。

    4.Client使用伪随机数生成器生成加密所使用的对称密钥,然后用证书的公钥加密这个对称密钥,发给Server。

    5.Server使用自己的私钥(private key)解密这个消息,得到对称密钥。至此,Client和Server双方都持有了相同的对称密钥。

    6.Server使用对称密钥加密“明文内容A”,发送给Client。

    7.Client使用对称密钥解密响应的密文,得到“明文内容A”。

    8.Client再次发起HTTPS的请求,使用对称密钥加密请求的“明文内容B”,然后Server使用对称密钥解密密文,得到“明文内容B”。

    五、HTTP 与 HTTPS 的区别

    • HTTP 是明文传输协议,HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。
    前端基础:为什么https比http更安全?https的工作原理是什么?

     

    关于安全性,用最简单的比喻形容两者的关系就是卡车运货,HTTP下的运货车是敞篷的,货物都是暴露的。而https则是封闭集装箱车,安全性自然提升不少。

    • HTTPS比HTTP更加安全,对搜索引擎更友好,利于SEO,谷歌、百度优先索引HTTPS网页;
    • HTTPS需要用到SSL证书,而HTTP不用;
    • HTTPS标准端口443,HTTP标准端口80;
    • HTTPS基于传输层,HTTP基于应用层;
    • HTTPS在浏览器显示绿色安全锁,HTTP没有显示;

    六、为何不所有的网站都使用HTTPS

    既然HTTPS那么安全可靠,那为何不所有的Web网站都使用HTTPS?

    首先,很多人还是会觉得HTTPS实施有门槛,这个门槛在于需要权威CA颁发的SSL证书。从证书的选择、购买到部署,传统的模式下都会比较耗时耗力。

    其次,HTTPS普遍认为性能消耗要大于HTTP,因为与纯文本通信相比,加密通信会消耗更多的CPU及内存资源。如果每次通信都加密,会消耗相当多的资源,平摊到一台计算机上时,能够处理的请求数量必定也会随之减少。但事实并非如此,用户可以通过性能优化、把证书部署在SLB或CDN,来解决此问题。举个实际的例子,“双十一”期间,全站HTTPS的淘宝、天猫依然保证了网站和移动端的访问、浏览、交易等操作的顺畅、平滑。通过测试发现,经过优化后的许多页面性能与HTTP持平甚至还有小幅提升,因此HTTPS经过优化之后其实并不慢。

    除此之外,想要节约购买证书的开销也是原因之一。要进行HTTPS通信,证书是必不可少的。而使用的证书必须向认证机构(CA)购买。

    最后是安全意识。相比国内,国外互联网行业的安全意识和技术应用相对成熟,HTTPS部署趋势是由社会、企业、政府共同去推动的。

    HTTPS 详解(一):附带精美详尽的 HTTPS 原理图

     来源: https://segmentfault.com/a/1190000021494676

    前言

    作为一个有追求的程序员,了解行业发展趋势和扩充自己的计算机知识储备都是很有必要的,特别是一些计算机基础方面的内容,就比如本篇文章要讲的计算机网络方面的知识。本文将为大家详细梳理一下 HTTPS 的实现原理。

    近年来,随着用户和互联网企业安全意识的提高和 HTTPS 成本的下降,HTTPS 已经越来越普及。很多互联网巨头也在力推 HTTPS,比如谷歌的 Chrome 浏览器在访问 HTTP 网站时会在地址栏显示不安全的提醒,微信要求所有的小程序必须使用 HTTPS 传输协议,苹果也要求所有在 App Store 上架的应用必须采用 HTTPS ,国内外的大部分主流网站也都已迁移至 HTTPS,可见 HTTPS 全面取代 HTTP 只是时间问题。

    说了这么多,究竟什么是 HTTPS?它与 HTTP 相比有什么优缺点?其底层实现原理又是怎样的呢?下面就为你一一解答,先来看一下 HTTP 的弊端吧。

    1、HTTP 的最大弊端——不安全

    HTTP 之所以被 HTTPS 取代,最大的原因就是不安全,至于为什么不安全,看了下面这张图就一目了然了。

    HTTPS 详解(一):附带精美详尽的 HTTPS 原理图

     

    图1. HTTP数据传输过程

    由图可见,HTTP 在传输数据的过程中,所有的数据都是明文传输,自然没有安全性可言,特别是一些敏感数据,比如用户密码和信用卡信息等,一旦被第三方获取,后果不堪设想。这里可能有人会说,我在前端页面对敏感数据进行加密不就行了,比如 MD5 加盐加密。这么想就太简单了。首先 MD5 并不是加密算法,其全称是 Message Digest Algorithm MD5,意为信息摘要算法,是一种不可逆的哈希算法,也就是说经过前端 MD5 处理过的数据在服务器端是无法复原的。这里以密码举例,前端把用户密码通过 MD5 进行处理,并把得到的哈希值发送给服务器,服务器由于无法复原密码,就会直接用这个哈希值处理用户请求。所以第三方在获取这个哈希值后,可以绕过前端登录页面直接访问服务器,造成安全问题。另外,MD5 算法本身的安全性也存在缺陷,这里就不展开谈了。

    总之 MD5,SHA-1 之类的哈希算法并不能让 HTTP 变得更安全。要想让 HTTP 更安全,只能使用真正的加密算法,因为加密算法可以用密钥加密或还原数据,只要确保密钥不被第三方获取,那就能确保数据传输的安全了。而这正是 HTTPS 的解决方案,那下面就来了解一下加密算法吧。

     

     

     

    3、HTTPS 原理详解

    先看一下维基百科对 HTTPS 的定义

    Hypertext Transfer Protocol Secure (HTTPS) is an extension of the Hypertext Transfer Protocol (HTTP). It is used for secure communication over a computer network, and is widely used on the Internet. In HTTPS, the communication protocol is encrypted using Transport Layer Security (TLS) or, formerly, its predecessor, Secure Sockets Layer (SSL). The protocol is therefore also often referred to as HTTP over TLS, or HTTP over SSL.

    HTTPS (Hypertext Transfer Protocol Secure) 是基于 HTTP 的扩展,用于计算机网络的安全通信,已经在互联网得到广泛应用。在 HTTPS 中,原有的 HTTP 协议会得到 TLS (安全传输层协议) 或其前辈 SSL (安全套接层) 的加密。因此 HTTPS 也常指 HTTP over TLS 或 HTTP over SSL。

    可见HTTPS 并非独立的通信协议,而是对 HTTP 的扩展,保证了通信安全,二者关系如下:

    HTTPS 详解(一):附带精美详尽的 HTTPS 原理图

     

    图4. HTTP和HTTPS的关系

    也就是说 HTTPS = HTTP + SSL / TLS。

    接下来就是最重要的 HTTPS 原理解析了,老规矩先上图。

    HTTPS 详解(一):附带精美详尽的 HTTPS 原理图

     

    图5. HTTPS 加密、解密、验证及数据传输过程

    看上去眼花缭乱,不要怕,且听我细细道来。HTTPS 的整个通信过程可以分为两大阶段:证书验证和数据传输阶段,数据传输阶段又可以分为非对称加密和对称加密两个阶段。具体流程按图中的序号讲解。

    1.客户端请求 HTTPS 网址,然后连接到 server 的 443 端口 (HTTPS 默认端口,类似于 HTTP 的80端口)。

    2.采用 HTTPS 协议的服务器必须要有一套数字 CA (Certification Authority)证书,证书是需要申请的,并由专门的数字证书认证机构(CA)通过非常严格的审核之后颁发的电子证书 (当然了是要钱的,安全级别越高价格越贵)。颁发证书的同时会产生一个私钥和公钥。私钥由服务端自己保存,不可泄漏。公钥则是附带在证书的信息中,可以公开的。证书本身也附带一个证书电子签名,这个签名用来验证证书的完整性和真实性,可以防止证书被篡改。

    3.服务器响应客户端请求,将证书传递给客户端,证书包含公钥和大量其他信息,比如证书颁发机构信息,公司信息和证书有效期等。Chrome 浏览器点击地址栏的锁标志再点击证书就可以看到证书详细信息。

    HTTPS 详解(一):附带精美详尽的 HTTPS 原理图

     

    图6. B站 CA 证书

    4.客户端解析证书并对其进行验证。如果证书不是可信机构颁布,或者证书中的域名与实际域名不一致,或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。就像下面这样:

    HTTPS 详解(一):附带精美详尽的 HTTPS 原理图

     

    图7. 浏览器安全警告

    如果证书没有问题,客户端就会从服务器证书中取出服务器的公钥A。然后客户端还会生成一个随机码 KEY,并使用公钥A将其加密。

    5.客户端把加密后的随机码 KEY 发送给服务器,作为后面对称加密的密钥。

    6.服务器在收到随机码 KEY 之后会使用私钥B将其解密。经过以上这些步骤,客户端和服务器终于建立了安全连接,完美解决了对称加密的密钥泄露问题,接下来就可以用对称加密愉快地进行通信了。

    7.服务器使用密钥 (随机码 KEY)对数据进行对称加密并发送给客户端,客户端使用相同的密钥 (随机码 KEY)解密数据。

    8.双方使用对称加密愉快地传输所有数据。

    好了,以上就是 HTTPS 的原理详解了,如此精美的图搭配这么详细的过程解析,你再搞不懂就说不过去了吧哈哈。

    4、总结

    再来总结一下 HTTPS 和 HTTP 的区别以及 HTTPS 的缺点吧:

    HTTPS 和 HTTP 的区别:

    • 最最重要的区别就是安全性,HTTP 明文传输,不对数据进行加密安全性较差。HTTPS (HTTP + SSL / TLS)的数据传输过程是加密的,安全性较好。
    • 使用 HTTPS 协议需要申请 CA 证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、DigiCert 和 GlobalSign 等。
    • HTTP 页面响应速度比 HTTPS 快,这个很好理解,由于加了一层安全层,建立连接的过程更复杂,也要交换更多的数据,难免影响速度。
    • 由于 HTTPS 是建构在 SSL / TLS 之上的 HTTP 协议,所以,要比 HTTP 更耗费服务器资源。
    • HTTPS 和 HTTP 使用的是完全不同的连接方式,用的端口也不一样,前者是 443,后者是 80。

    HTTPS 的缺点:

    • 在相同网络环境中,HTTPS 相比 HTTP 无论是响应时间还是耗电量都有大幅度上升。
    • HTTPS 的安全是有范围的,在黑客攻击、服务器劫持等情况下几乎起不到作用。
    • 在现有的证书机制下,中间人攻击依然有可能发生。
    • HTTPS 需要更多的服务器资源,也会导致成本的升高。

    另外,关于 SSL/TLS 握手的详细过程和相关重要概念,作者将在HTTPS 详解二:SSL / TLS 工作原理和详细握手过程中进行详细介绍。好了,以上就是本篇文章的全部内容了,如有错误,欢迎指正。

    最后贴几篇参考文章:

    • 维基百科(https://en.wikipedia.org/wiki/HTTPS)
    • HTTP 与 HTTPS 的区别(https://www.runoob.com/w3cnote/http-vs-https.html)
    • SSL / TLS原理详解(https://segmentfault.com/a/1190000002554673)
    • 深入理解http1.x、http 2和https(https://segmentfault.com/a/1190000015316332)
    • 阮一峰的网络日志:RSA算法原理(一)(http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html)
    • 阮一峰的网络日志:RSA算法原理(二)(http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html)
    • 网络安全之“攻守道”--https协议详解(https://www.bilibili.com/video/av53593472?p=1)
  • 相关阅读:
    SpringMVC截图版
    MySQL
    Mybatis-Spring
    Spring
    get
    log
    SpringBoot
    Mybatis和spingboot整合
    学习笔记-英语
    PartialView+$.reload()局部刷新
  • 原文地址:https://www.cnblogs.com/awkflf11/p/12942660.html
Copyright © 2011-2022 走看看