https 订阅
HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 [1]  。HTTPS 在HTTP 的基础下加入SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面 [2]  。 展开全文
HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 [1]  。HTTPS 在HTTP 的基础下加入SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面 [2]  。
信息
外文名
HTTPS
目    标
安全的HTTP通道
中文名
超文本传输安全协议
应    用
安全数据传输
httpsHTTP协议的缺点
HTTP 协议虽然使用极为广泛, 但是却存在不小的安全缺陷, 主要是其数据的明文传送和消息完整性检测的缺乏, 而这两点恰好是网络支付, 网络交易等新兴应用中安全方面最需要关注的 [3]  。关于 HTTP协议的明文数据传输, 攻击者最常用的攻击手法就是网络嗅探, 试图从传输过程当中分析出敏感的数据, 例如管理员对 Web 程序后台的登录过程等等, 从而获取网站管理权限, 进而渗透到整个服务器的权限。即使无法获取到后台登录信息, 攻击者也可以从网络中获取普通用户的隐秘信息, 包括手机号码, 身份证号码, 信用卡号等重要资料, 导致严重的安全事故。进行网络嗅探攻击非常简单, 对攻击者的要求很低。使用网络发布的任意一款抓包工具, 一个新手就有可能获取到大型网站的用户信息 [3]  。另外,HTTP协议在传输客户端请求和服务端响应时, 唯一的数据完整性检验就是在报文头部包含了本次传输数据的长度, 而对内容是否被篡改不作确认。 因此攻击者可以轻易的发动中间人攻击, 修改客户端和服务端传输的数据, 甚至在传输数据中插入恶意代码, 导致客户端被引导至恶意网站被植入木马 [3]  。
收起全文
精华内容
参与话题
问答
  • HTTP和HTTPS协议,看一篇就够了

    万次阅读 多人点赞 2019-08-03 11:22:16
    为什么需要但是为什么要讲HTTP和HTTPS呢? 二、HTTP和HTTPS发展历史 当我们打开谷歌浏览器输入www.12306.cn,回车很快在浏览器上就看到页面,其中的浏览器就是客户端,负责接受浏览器的是服务器,两者的通信是...

    一、前言:

    这里写图片描述
    这里写图片描述
    先来观察这两张图,第一张访问域名http://www.12306.cn,谷歌浏览器提示不安全链接,第二张是https://kyfw.12306.cn/otn/regist/init,浏览器显示安全,为什么会这样子呢?2017年1月发布的Chrome 56浏览器开始把收集密码或信用卡数据的HTTP页面标记为“不安全”,若用户使用2017年10月推出的Chrome 62,带有输入数据的HTTP页面和所有以无痕模式浏览的HTTP页面都会被标记为“不安全”,此外,苹果公司强制所有iOS App在2017年1月1日前使用HTTPS加密。

    二、HTTP和HTTPS发展历史

    什么是HTTP?

    超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。

    发展历史:

    版本 产生时间 内容 发展现状
    HTTP/0.9 1991年 不涉及数据包传输,规定客户端和服务器之间通信格式,只能GET请求 没有作为正式的标准
    HTTP/1.0 1996年 传输内容格式不限制,增加PUT、PATCH、HEAD、 OPTIONS、DELETE命令 正式作为标准
    HTTP/1.1 1997年 持久连接(长连接)、节约带宽、HOST域、管道机制、分块传输编码 2015年前使用最广泛
    HTTP/2 2015年 多路复用、服务器推送、头信息压缩、二进制协议等 逐渐覆盖市场

    这里写图片描述
    这个Akamai公司建立的一个官方的演示,使用HTTP/1.1和HTTP/2同时请求379张图片,观察请求的时间,明显看出HTTP/2性能占优势。
    这里写图片描述
    多路复用:通过单一的HTTP/2连接请求发起多重的请求-响应消息,多个请求stream共享一个TCP连接,实现多留并行而不是依赖建立多个TCP连接。

    HTTP报文格式

    在这里插入图片描述

    什么是HTTPS?

    《图解HTTP》这本书中曾提过HTTPS是身披SSL外壳的HTTP。HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。

    PS:TLS是传输层加密协议,前身是SSL协议,由网景公司1995年发布,有时候两者不区分。

    参考连接:

    1.https://kamranahmed.info/blog/2016/08/13/http-in-depth/

    2.https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol

    3.https://tools.ietf.org/html/rfc1945

    4.https://http2.github.io/http2-spec/

    5.https://www.zhihu.com/question/34074946

    三、HTTP VS HTTPS

    HTTP特点:
    1. 无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作
    2. 无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量。
    3. 基于请求和响应:基本的特性,由客户端发起请求,服务端响应
    4. 简单快速、灵活
    5. 通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性

    下面通过一个简单的抓包实验观察使用HTTP请求传输的数据:
    这里写图片描述

    这里写图片描述

    结果分析:HTTP协议传输数据以明文形式显示
    针对无状态的一些解决策略:
    场景:逛电商商场用户需要使用的时间比较长,需要对用户一段时间的HTTP通信状态进行保存,比如执行一次登陆操作,在30分钟内所有的请求都不需要再次登陆。
    1. 通过Cookie/Session技术
    2. HTTP/1.1持久连接(HTTP keep-alive)方法,只要任意一端没有明确提出断开连接,则保持TCP连接状态,在请求首部字段中的Connection: keep-alive即为表明使用了持久连接

    HTTPS特点:

    基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护

    这里写图片描述
    通过抓包可以看到数据不是明文传输,而且HTTPS有如下特点:

    1. 内容加密:采用混合加密技术,中间者无法直接查看明文内容
    2. 验证身份:通过证书认证客户端访问的是自己的服务器
    3. 保护数据完整性:防止传输的内容被中间人冒充或者篡改

    **混合加密:**结合非对称加密和对称加密技术。客户端使用对称加密生成密钥对传输数据进行加密,然后使用非对称加密的公钥再对秘钥进行加密,所以网络上传输的数据是被秘钥加密的密文和用公钥加密后的秘密秘钥,因此即使被黑客截取,由于没有私钥,无法获取到加密明文的秘钥,便无法获取到明文数据。


    **数字摘要:**通过单向hash函数对原文进行哈希,将需加密的明文“摘要”成一串固定长度(如128bit)的密文,不同的明文摘要成的密文其结果总是不相同,同样的明文其摘要必定一致,并且即使知道了摘要也不能反推出明文。


    **数字签名技术:**数字签名建立在公钥加密体制基础上,是公钥加密技术的另一类应用。它把公钥加密技术和数字摘要结合起来,形成了实用的数字签名技术。

    • 收方能够证实发送方的真实身份;
    • 发送方事后不能否认所发送过的报文;
    • 收方或非法者不能伪造、篡改报文。

    内容加密和数据完整性保护

    非对称加密过程需要用到公钥进行加密,那么公钥从何而来?其实公钥就被包含在数字证书中,数字证书通常来说是由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,证书中包含了一个密钥对(公钥和私钥)和所有者识别信息。数字证书被放到服务端,具有服务器身份验证和数据传输加密功能。

    四、HTTP通信传输

    这里写图片描述

    客户端输入URL回车,DNS解析域名得到服务器的IP地址,服务器在80端口监听客户端请求,端口通过TCP/IP协议(可以通过Socket实现)建立连接。HTTP属于TCP/IP模型中的运用层协议,所以通信的过程其实是对应数据的入栈和出栈。
    这里写图片描述
    报文从运用层传送到运输层,运输层通过TCP三次握手和服务器建立连接,四次挥手释放连接。

    这里写图片描述

    为什么需要三次握手呢?为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

    比如:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段,但是server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求,于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了,由于client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据,但server却以为新的运输连接已经建立,并一直等待client发来数据。所以没有采用“三次握手”,这种情况下server的很多资源就白白浪费掉了。

    这里写图片描述

    为什么需要四次挥手呢?TCP是全双工模式,当client发出FIN报文段时,只是表示client已经没有数据要发送了,client告诉server,它的数据已经全部发送完毕了;但是,这个时候client还是可以接受来server的数据;当server返回ACK报文段时,表示它已经知道client没有数据发送了,但是server还是可以发送数据到client的;当server也发送了FIN报文段时,这个时候就表示server也没有数据要发送了,就会告诉client,我也没有数据要发送了,如果收到client确认报文段,之后彼此就会愉快的中断这次TCP连接。

    五、HTTPS实现原理

    SSL建立连接过程
    在这里插入图片描述

    1. client向server发送请求https://baidu.com,然后连接到server的443端口,发送的信息主要是随机值1和客户端支持的加密算法。
    2. server接收到信息之后给予client响应握手信息,包括随机值2和匹配好的协商加密算法,这个加密算法一定是client发送给server加密算法的子集。
    3. 随即server给client发送第二个响应报文是数字证书。服务端必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面,这套证书其实就是一对公钥和私钥。传送证书,这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间、服务端的公钥,第三方证书认证机构(CA)的签名,服务端的域名信息等内容。
    4. 客户端解析证书,这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随即值(预主秘钥)。
    5. 客户端认证证书通过之后,接下来是通过随机值1、随机值2和预主秘钥组装会话秘钥。然后通过证书的公钥加密会话秘钥。
    6. 传送加密信息,这部分传送的是用证书加密后的会话秘钥,目的就是让服务端使用秘钥解密得到随机值1、随机值2和预主秘钥。
    7. 服务端解密得到随机值1、随机值2和预主秘钥,然后组装会话秘钥,跟客户端会话秘钥相同。
    8. 客户端通过会话秘钥加密一条消息发送给服务端,主要验证服务端是否正常接受客户端加密的消息。
    9. 同样服务端也会通过会话秘钥加密一条消息回传给客户端,如果客户端能够正常接受的话表明SSL层连接建立完成了。

    问题:
    1.怎么保证保证服务器给客户端下发的公钥是真正的公钥,而不是中间人伪造的公钥呢?

    这里写图片描述
    2.证书如何安全传输,被掉包了怎么办?
    身份认证

    数字证书内容
    包括了加密后服务器的公钥、权威机构的信息、服务器域名,还有经过CA私钥签名之后的证书内容(经过先通过Hash函数计算得到证书数字摘要,然后用权威机构私钥加密数字摘要得到数字签名),签名计算方法以及证书对应的域名。

    验证证书安全性过程

    1. 当客户端收到这个证书之后,使用本地配置的权威机构的公钥对证书进行解密得到服务端的公钥和证书的数字签名,数字签名经过CA公钥解密得到证书信息摘要。
    2. 然后证书签名的方法计算一下当前证书的信息摘要,与收到的信息摘要作对比,如果一样,表示证书一定是服务器下发的,没有被中间人篡改过。因为中间人虽然有权威机构的公钥,能够解析证书内容并篡改,但是篡改完成之后中间人需要将证书重新加密,但是中间人没有权威机构的私钥,无法加密,强行加密只会导致客户端无法解密,如果中间人强行乱修改证书,就会导致证书内容和证书签名不匹配。

    那第三方攻击者能否让自己的证书显示出来的信息也是服务端呢?(伪装服务端一样的配置)显然这个是不行的,因为当第三方攻击者去CA那边寻求认证的时候CA会要求其提供例如域名的whois信息、域名管理邮箱等证明你是服务端域名的拥有者,而第三方攻击者是无法提供这些信息所以他就是无法骗CA他拥有属于服务端的域名。

    六、运用与总结

    安全性考虑:
    1. HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用
    2. SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行

    中间人攻击(MITM攻击)是指,黑客拦截并篡改网络中的通信数据。又分为被动MITM和主动MITM,被动MITM只窃取通信数据而不修改,而主动MITM不但能窃取数据,还会篡改通信数据。最常见的中间人攻击常常发生在公共wifi或者公共路由上。

    成本考虑:
    1. SSL证书需要购买申请,功能越强大的证书费用越高
    2. SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗(SSL有扩展可以部分解决这个问题,但是比较麻烦,而且要求浏览器、操作系统支持,Windows XP就不支持这个扩展,考虑到XP的装机量,这个特性几乎没用)。
    3. 根据ACM CoNEXT数据显示,使用HTTPS协议会使页面的加载时间延长近50%,增加10%到20%的耗电。
    4. HTTPS连接缓存不如HTTP高效,流量成本高。
    5. HTTPS连接服务器端资源占用高很多,支持访客多的网站需要投入更大的成本。
    6. HTTPS协议握手阶段比较费时,对网站的响应速度有影响,影响用户体验。比较好的方式是采用分而治之,类似12306网站的主页使用HTTP协议,有关于用户信息等方面使用HTTPS。

    最后插播下广告,对IOS感兴趣的或者校招同学可以看这两篇文章-:
    看一篇就够入门Objective-C
    手把手教学IOS自定义cell-仿微信消息列表
    面试必备操作系统

    展开全文
  • 为什么HTTPS比HTTP更安全?

    万次阅读 多人点赞 2019-08-09 14:39:34
    近几年,互联网发生着翻天覆地的变化,尤其是我们一直习以为常的HTTP协议,在逐渐的被HTTPS协议所取代,在浏览器、搜索引擎、CA机构、大型互联网企业的共同促进下,互联网迎来了“HTTPS加密时代”,HTTPS将在未来的...

    前言

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

    读完本文,希望你能明白:

    • HTTP通信存在什么问题

    • HTTPS如何改进HTTP存在那些问题

    • HTTPS工作原理是什么

    想阅读更多优质文章请猛戳https://github.com/ljianshu/Blog,一年五十篇优质文章等着你!

    一、什么是HTTPS

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

    HTTPS主要作用是:

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

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

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

    640?wx_fmt=png

    二、为什么需要HTTPS

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

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

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

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

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

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

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

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

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

    反观HTTPS协议,它比HTTP协议相比多了以下优势(下文会详细介绍):

    • 数据隐私性:内容经过对称加密,每个连接生成一个唯一的加密密钥

    • 数据完整性:内容传输经过完整性校验

    • 身份认证:第三方无法伪造服务端(客户端)身份

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

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

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

    640?wx_fmt=png

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

    640?wx_fmt=png

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

    640?wx_fmt=png

    1.解决内容可能被窃听的问题——加密

    方法1.对称加密

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

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

    方法2.非对称加密

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

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

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

    这种方式有以下缺点:

    • 公钥是公开的,所以针对私钥加密的信息,黑客截获后可以使用公钥进行解密,获取其中的内容;

    • 公钥并不包含服务器的信息,使用非对称加密算法无法确保服务器身份的合法性,存在中间人攻击的风险,服务器发送给客户端的公钥可能在传送过程中被中间人截获并篡改;

    • 使用非对称加密在数据加密解密过程需要消耗一定时间,降低了数据传输效率;

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

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

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

    2.解决报文可能遭篡改问题——数字签名

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

    数字签名有两种功效

    • 能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名。

    • 数字签名能确定消息的完整性,证明数据是否未被篡改过。

    数字签名如何生成:

    640?wx_fmt=png

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

    校验数字签名流程

    640?wx_fmt=png

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

    假设消息传递在Kobe,James两人之间发生。James将消息连同数字签名一起发送给Kobe,Kobe接收到消息后,通过校验数字签名,就可以验证接收到的消息就是James发送的。当然,这个过程的前提是Kobe知道James的公钥。问题的关键的是,和消息本身一样,公钥不能在不安全的网络中直接发送给Kobe,或者说拿到的公钥如何证明是James的。

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

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

    数字证书认证机构处于客户端与服务器双方都可信赖的第三方机构的立场上。

    640?wx_fmt=png

    我们来介绍一下数字证书认证机构的业务流程:

    • 服务器的运营人员向第三方机构CA提交公钥、组织信息、个人信息(域名)等信息并申请认证;

    • CA通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等;

    • 如信息审核通过,CA会向申请者签发认证文件-证书。证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA的信息、有效时间、证书序列号等信息的明文,同时包含一个签名。其中签名的产生算法:首先,使用散列函数计算公开的明文信息的信息摘要,然后,采用 CA的私钥对信息摘要进行加密,密文即签名;

    • 客户端 Client 向服务器 Server 发出请求时,Server 返回证书文件;

    • 客户端 Client 读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,然后,利用对应 CA的公钥解密签名数据,对比证书的信息摘要,如果一致,则可以确认证书的合法性,即服务器的公开密钥是值得信赖的。

    • 客户端还会验证证书相关的域名信息、有效时间等信息; 客户端会内置信任CA的证书信息(包含公钥),如果CA不被信任,则找不到对应 CA的证书,证书也会被判定非法。

    四、 HTTPS工作流程

    640?wx_fmt=png

    1.Client发起一个HTTPS(比如 https://juejin.im/user)的请求,根据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 协议安全。

    640?wx_fmt=png关于安全性,用最简单的比喻形容两者的关系就是卡车运货,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部署趋势是由社会、企业、政府共同去推动的。

    欢迎关注公众号:前端工匠,你的成长我们一起见证!

     

    参考文章与书籍

    • 图解HTTP

    • 珠峰架构课(推荐)

    • 数字签名是什么?(推荐)

    • HTTPS工作原理

    • HTTPS 原理详解

    • 详解HTTPS是如何确保安全性的?

    • [信息安全] 3.HTTPS工作流程

    • 为什么HTTPS比HTTP更安全

     

    展开全文
  • HTTP 和 HTTPS 的区别(面试常考题)

    万次阅读 多人点赞 2018-07-09 14:23:35
    无论是在校学习还是找工作的时候,老师和面试官都问过同学http和https的区别。平时上网的时候也没有关注这个问题,只是知道计算机网络里Http的概念,所以最近才查资料好好补补这一块。其实这一块的知识延伸很广,...

    前言

    无论是在校学习还是找工作的时候,老师和面试官都问过同学 HTTP 和 HTTPS 的区别。平时上网的时候也没有关注这个问题,只是知道计算机网络里 HTTP 的概念,所以最近才查资料好好补补这一块。其实这一块的知识延伸很广,如果之前不太了解加密算法和 SSL 协议,可以在学习了这个问题的基础上再做研究。

    TLS/SSL 工作原理及握手过程详解:https://tyler-zx.blog.csdn.net/article/details/107591115

     

    一、HTTP 和 HTTPS 的基本概念

    HTTP超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。它可以使浏览器更加高效。HTTP 协议以明文方式发送信息的,如果黑客截取了 Web 浏览器和服务器之间的传输报文,就可以直接获得其中的信息

    HTTP 原理:

    ①  客户端的浏览器首先要通过网络与服务器建立连接,该连接是通过 TCP 来完成的,一般 TCP 连接的端口号是80。 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是 MIME 信息包括请求修饰符、客户机信息和许可内容。

    ②  服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是 MIME 信息包括服务器信息、实体信息和可能的内容。

     

    HTTPS是以安全为目标的 HTTP 通道,是 HTTP 的安全版。HTTPS 的安全基础是 SSL。SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。SSL 协议可分为两层:SSL 记录协议(SSL Record Protocol)它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL 握手协议(SSL Handshake Protocol),它建立在 SSL 记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

                                                           

     

    HTTPS 设计目标

    (1) 数据保密性:保证数据内容在传输的过程中不会被第三方查看。就像快递员传递包裹一样,都进行了封装,别人无法获知里面装了什么  。

    (2) 数据完整性:及时发现被第三方篡改的传输内容。就像快递员虽然不知道包裹里装了什么东西,但他有可能中途掉包,数据完整性就是指如果被掉包,我们能轻松发现并拒收 。

    (3) 身份校验安全性:保证数据到达用户期望的目的地。就像我们邮寄包裹时,虽然是一个封装好的未掉包的包裹,但必须确定这个包裹不会送错地方,通过身份校验来确保送对了地方  。

     

    二、HTTP 与 HTTPS  的区别

    1、HTTPS  协议需要到 CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。(以前的网易官网是http,而网易邮箱是 https 。)

    2、HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。

    3、HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

    4、HTTP 的连接很简单,是无状态的。HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)

     

    三、HTTPS 相对于 HTTP 的改进

    双向的身份认证

    客户端服务端在传输数据之前,会通过基于X.509证书对双方进行身份认证 。具体过程如下

    客户端发起 SSL 握手消息给服务端要求连接。

    服务端将证书发送给客户端。

    客户端检查服务端证书,确认是否由自己信任的证书签发机构签发(客户端内置了所有受信任 CA 的证书)。 如果不是,将是否继续通讯的决定权交给用户选择 ( 注意,这里将是一个安全缺陷 )。如果检查无误或者用户选择继续,则客户端认可服务端的身份。

    服务端要求客户端发送证书,并检查是否通过验证。失败则关闭连接,认证成功则从客户端证书中获得客户端的公钥,一般为 1024 位或者 2048 位。到此,服务器客户端双方的身份认证结束,双方确保身份都是真实可靠的。

    注意:

    (1) 采用 HTTPS 协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问。这套证书其实就是一对公钥和私钥。

    (2) 互联网有太多的服务需要使用证书来验证身份,以至于客户端(操作系统或浏览器等)无法内置所有证书,需要通过服务端将证书发送给客户端。

    (3) 客户端内置的是 CA 的根证书(Root Certificate),HTTPS 协议中服务器会发送证书链(Certificate Chain)给客户端。

     

    数据传输的机密性

    客户端和服务端在开始传输数据之前,会协商传输过程需要使用的加密算法。 客户端发送协商请求给服务端, 其中包含自己支持的非对成加密的密钥交换算法 ( 一般是RSA),数据签名摘要算法 ( 一般是SHA或者MD5) ,加密传输数据的对称加密算法 ( 一般是DES),以及加密密钥的长度。 服务端接收到消息之后,选中安全性最高的算法,并将选中的算法发送给客户端,完成协商。客户端生成随机的字符串,通过协商好的非对称加密算法,使用服务端的公钥对该字符串进行加密,发送给服务端。 服务端接收到之后,使用自己的私钥解密得到该字符串。在随后的数据传输当中,使用这个字符串作为密钥进行对称加密。

     

    防止重放攻击

    SSL 使用序列号来保护通讯方免受报文重放攻击。这个序列号被加密后作为数据包的负载。在整个 SSL 握手中,都有一个唯一的随机数来标记 SSL 握手。 这样防止了攻击者嗅探整个登录过程,获取到加密的登录数据之后,不对数据进行解密,而直接重传登录数据包的攻击手法。

    可以看到,鉴于电子商务等安全上的需求,HTTPS 对比 HTTP 协议,在安全方面已经取得了极大的增强。总结来说,HTTPS 的改进点在于创造性的使用了非对称加密算法,在不安全的网路上,安全的传输了用来进行非对称加密的密钥,综合利用了非对称加密的安全性和对称加密的快速性。

     

    四、HTTPS 的优点

    1、使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器

    2、HTTPS 协议是由SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 HTTP 协议安全,可防止数据在传输过程中不被窃取、修改,确保数据的完整性。

    3、HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。

     

    五、HTTPS 的缺点(对比优点)

    1、HTTPS 协议握手阶段比较费时,会使页面的加载时间延长近

    2、HTTPS 连接缓存不如 HTTP 高效,会增加数据开销,甚至已有的安全措施也会因此而受到影响。

    3、HTTPS 协议的安全是有范围的,在黑客攻击、拒绝服务攻击和服务器劫持等方面几乎起不到什么作用。

    4、SSL 证书通常需要绑定 IP,不能在同一 IP 上绑定多个域名,IPv4 资源不可能支撑这个消耗。

    5、成本增加。部署 HTTPS 后,因为 HTTPS 协议的工作要增加额外的计算资源消耗,例如 SSL 协议加密算法和 SSL 交互次数将占用一定的计算资源和服务器成本。

    6、HTTPS 协议的加密范围也比较有限。最关键的,SSL 证书的信用链体系并不安全,特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行。

     

    六、HTTPS 的连接过程

    https://blog.csdn.net/kobejayandy/article/details/52433660(图片是我借用这位大佬的,大家可以看看) 

    图片中的过程是按 8 个步骤分的,但是网上有更详细的步骤,所以我把详细的过程和这个图片配在一起。

    ① 客户端的浏览器向服务器发送请求,并传送客户端 SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息。

    ② 服务器向客户端传送 SSL 协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己的证书。

    ③ 客户利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的 CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的 "发行者的数字签名",服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进行第四步。

    ④ 用户端随机产生一个用于通讯的 "对称密码",然后用服务器的公钥(服务器的公钥从步骤②中的服务器的证书中获得)对其加密,然后将加密后的“预主密码”传给服务器。

    ⑤ 如果服务器要求客户的身份认证(在握手过程中为可选),用户可以建立一个随机数然后对其进行数据签名,将这个含有签名的随机数和客户自己的证书以及加密过的密钥一起传给服务器。

    ⑥ 如果服务器要求客户的身份认证,服务器必须检验客户证书和签名随机数的合法性,具体的合法性验证过程包括:客户的证书使用日期是否有效,为客户提供证书的 CA  是否可靠,发行 CA 的公钥能否正确解开客户证书的发行 CA 的数字签名,检查客户的证书是否在证书废止列表(CRL)中。检验如果没有通过,通讯立刻中断;如果验证通过,服务器将用自己的私钥解开加密的私钥,然后执行一系列步骤来产生主通讯密码(客户端也将通过同样的方法产生相同的主通讯密码)。

    ⑦ 服务器和客户端用相同的对称加密密钥,对称密钥用于 SSL 协议的安全数据通讯的加解密通讯。同时在 SSL 通讯过程中还要完成数据通讯的完整性,防止数据通讯中的任何变化。

    ⑧ 客户端服务器端发出信息,指明后面的数据通讯将使用的步骤 ⑦ 中的主密码为对称密钥,同时通知服务器客户端的握手过程结束。

    ⑨ 服务器向客户端发出信息,指明后面的数据通讯将使用的步骤 ⑦ 中的主密码为对称密钥,同时通知客户端服务器端的握手过程结束。

    ⑩ SSL 的握手部分结束,SSL 安全通道的数据通讯开始,客户和服务器开始使用相同的对称密钥进行数据通讯,同时进行通讯完整性的检验。

     

    上述的过程需要弄懂的核心思想

    客户端解析证书

    这部分工作是由客户端的 TLS 来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个对称加密密钥,然后用公钥对该密钥进行非对称加密。

     

    传送加密信息

    这部分传送的是用公钥加密后的对称加密密钥,目的就是让服务端得到这个密钥,以后客户端和服务端的通信就可以通过这个密钥来进行加密解密了。

     

    服务端解密信息

    服务端用非对称加密算法里的私钥解密后,得到了客户端传过来的对称加密算法的私钥,然后把之后传输的内容通过该值进行对称加密。

     

    为什么用非对称加密协商对称加密密钥

    对称加密的特点:对称密码体制中只有一种密钥,并且是非公开的。如果要解密就得让对方知道密钥,所以想要保证其安全性就要保证密钥的安全

    非对称加密的特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了,这样安全性就大了很多。

    非对称加密公钥和私钥的使用方法:(1) 公钥加密私钥解密。(2) 私钥做数字签名,公钥验证。

     

    补充:

    SSL 提供服务

    (1) 认证用户和服务器,确保数据发送到正确的客户机服务器

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

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

     

    SSL 工作流程

    服务器认证阶段:

    (1) 客户端向服务器发送一个开始信息 "Hello" 以便开始一个新的会话连接;

    (2) 服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的 "Hello" 信息时将包含生成主密钥所需的信息;

    (3) 客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;

    (4) 服务器回复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。

     

    用户认证阶段:在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。

     

    SSL 协议提供的安全通道有以下三个特性:

    机密性:SSL 协议使用密钥加密通信数据。

    可靠性:服务器和客户都会被认证,客户的认证是可选的。

    完整性:SSL 协议会对传送的数据进行完整性检查。

     

    服务器证书(server certificates)是 SSL 数字证书的一种形式,意指通过提交数字证书来证明您的身份或表明您有权访问在线服务。再者简单来说,通过使用服务器证书可为不同站点提供身份鉴定并保证该站点拥有高强度加密安全。是组成 Web 服务器的 SSL 安全功能的唯一的数字标识。通过相互信任的第三方组织获得,并为用户提供验证您 Web 站点身份的手段。服务器证书包含详细的身份验证信息,如服务器内容附属的组织、颁发证书的组织以及称为公开密钥的唯一的身份验证文件。

    展开全文
  • HTTP与HTTPS的区别,详细介绍

    万次阅读 多人点赞 2018-09-20 15:46:03
    HTTP与HTTPS介绍 HTTPS和HTTP的主要区别 客户端在使用HTTPS方式与Web服务器通信时的步骤 CA证书的申请及其使用过程 HTTPS的缺点 SSL与TLS的区别? SSL/TLS历史 SSL/TLS协议的基本过程 HTTPS涉及的计算环节 ...

    需要查看更多的计算机网络相关的知识?点击这里

    目录

    HTTP与HTTPS介绍

    HTTPS和HTTP的主要区别

    客户端在使用HTTPS方式与Web服务器通信时的步骤

    CA证书的申请及其使用过程

    HTTPS的缺点

    SSL与TLS的区别?

    SSL/TLS历史

    SSL/TLS协议的基本过程

    HTTPS涉及的计算环节

    如何优化HTTPS的速度


     

    HTTP与HTTPS介绍

            超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。

            为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL/TLS协议,SSL/TLS依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

            HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全

            HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

     

    HTTPS和HTTP的主要区别

            1、https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。

            2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl/tls加密传输协议。

            3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

            4、http的连接很简单,是无状态的;HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

     

     

    客户端在使用HTTPS方式与Web服务器通信时的步骤

     (1)客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。

     (2)Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。

     (3)客户端的浏览器与Web服务器开始协商SSL/TLS连接的安全等级,也就是信息加密的等级。

     (4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。

     (5)Web服务器利用自己的私钥解密出会话密钥。

     (6)Web服务器利用会话密钥加密与客户端之间的通信。

       

            尽管HTTPS并非绝对安全,掌握根证书的机构、掌握加密算法的组织同样可以进行中间人形式的攻击,但HTTPS仍是现行架构下最安全的解决方案,但他大幅增加了中间人攻击的成本

     

     

    CA证书的申请及其使用过程

    上面客户端使用HTTPS与服务器通信中使用到了CA认证,这里可能大家会问为什么不直接使用非对称加密的形式直接进行,首先这里先介绍下非对称加密。

    非对称加密:客户端和服务端均拥有一个公有密匙和一个私有密匙。公有密匙可以对外暴露,而私有密匙只有自己可见。

    使用公有密匙加密的消息,只有对应的私有密匙才能解开。反过来,使用私有密匙加密的消息,只有公有密匙才能解开。这样客户端在发送消息前,先用服务器的公匙对消息进行加密,服务器收到后再用自己的私匙进行解密。

     

    非对称加密的优点:

    • 非对称加密采用公有密匙和私有密匙的方式,解决了http中消息保密性问题,而且使得私有密匙泄露的风险降低。

    • 因为公匙加密的消息只有对应的私匙才能解开,所以较大程度上保证了消息的来源性以及消息的准确性和完整性。

    非对称加密的缺点:

    • 非对称加密时需要使用到接收方的公匙对消息进行加密,但是公匙不是保密的,任何人都可以拿到,中间人也可以。那么中间人可以做两件事,第一件是中间人可以在客户端与服务器交换公匙的时候,将客户端的公匙替换成自己的。这样服务器拿到的公匙将不是客户端的,而是中间人的。服务器也无法判断公匙来源的正确性。第二件是中间人可以不替换公匙,但是他可以截获客户端发来的消息,然后篡改,然后用服务器的公匙加密再发往服务器,服务器将收到错误的消息。

    • 非对称加密的性能相对对称加密来说会慢上几倍甚至几百倍,比较消耗系统资源。正是因为如此,https将两种加密结合了起来。

     

    为了应对上面非对称加密带来的问题,我们就引入了数字证书与数字签名

    故CA认证介入我们的HTTPS连接的过程如下:

    1、服务器拥有自己的私钥与公钥

    2、服务器将公钥交给CA认证机构,请求给予一份数字证书

    3、CA认证机构生成数字证书,并颁发给服务器

    4、服务器将带有公钥信息的数字证书发给客户端

    5、进入客户端生成对称密钥再进行对接的过程......

     

    HTTPS的缺点

      虽然说HTTPS有很大的优势,但其相对来说,还是存在不足之处的:

      (1)HTTPS协议握手阶段比较费时,会使页面的加载时间延长近50%,增加10%到20%的耗电;

      (2)HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;

      (3)SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。

         (4)SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。

      (5)HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。

     

            实践中建议保留http。所以我们在切换的时候可以做http和https的兼容,具体实现方式是,去掉页面链接中的http头部,这样可以自动匹配http头和https头。例如:将http://www.baidu.com改为//www.baidu.com。然后当用户从http的入口进入访问页面时,页面就是http,如果用户是从https的入口进入访问页面,页面即使https的

     

    SSL与TLS的区别?

    SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。

    TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。

     

    SSL/TLS历史

    1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1.0版,但是未发布。
    1995年,NetScape公司发布SSL 2.0版,很快发现有严重漏洞。
    1996年,SSL 3.0版问世,得到大规模应用。
    1999年,互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版TLS 1.0版。
    2006年和2008年,TLS进行了两次升级,分别为TLS 1.1版和TLS 1.2版。最新的变动是2011年TLS 1.2的修订版。
    目前,应用最广泛的是TLS 1.0,接下来是SSL 3.0。但是,主流浏览器都已经实现了TLS 1.2的支持。
    TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。

     

     

    SSL/TLS协议的基本过程


    (1) 客户端向服务器端索要并验证公钥。
    (2) 双方协商生成"对话密钥"。
    (3) 双方采用"对话密钥"进行加密通信。
    上面过程的前两步,又称为"握手阶段"(handshake)

    https://images2015.cnblogs.com/blog/1156565/201705/1156565-20170510103645238-169942462.png

    1 客户端发出请求(ClientHello)

    (1) 支持的协议版本,比如TLS 1.0版。
    (2) 一个客户端生成的随机数,稍后用于生成"对话密钥"。
    (3) 支持的加密方法,比如RSA公钥加密。
    (4) 支持的压缩方法。

    2 服务器回应(SeverHello)

    (1) 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。
    (2) 一个服务器生成的随机数,稍后用于生成"对话密钥"。
    (3) 确认使用的加密方法,比如RSA公钥加密,此时带有公钥信息。
    (4) 服务器证书。

    3 客户端回应

    (1) 一个随机数pre-master key。该随机数用服务器公钥加密,防止被窃听。
    (2)编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
    (3) 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验。

            上面客户端回应中第一项的随机数,是整个握手阶段出现的第三个随机数,又称"pre-master key"。有了它以后,客户端和服务器就同时有了三个随机数,接着双方就用事先商定的加密方法,各自生成本次会话所用的同一把"会话密钥"。

     

    那么为什么一定要用三个随机数,来生成"会话密钥"呢?

            "不管是客户端还是服务器,都需要随机数,这样生成的密钥才不会每次都一样。由于SSL协议中证书是静态的,因此十分有必要引入一种随机因素来保证协商出来的密钥的随机性。

            对于RSA密钥交换算法来说,pre-master-key本身就是一个随机数,再加上hello消息中的随机数,三个随机数通过一个密钥导出器最终导出一个对称密钥。

            pre master的存在在于SSL协议不信任每个主机都能产生完全随机的随机数,如果随机数不随机,那么pre master secret就有可能被猜出来,那么仅适用pre master secret作为密钥就不合适了,因此必须引入新的随机因素,那么客户端和服务器加上pre master secret三个随机数一同生成的密钥就不容易被猜出了,一个伪随机可能完全不随机,可是是三个伪随机就十分接近随机了,每增加一个自由度,随机性增加的可不是一。"

            此外,如果前一步,服务器要求客户端证书,客户端会在这一步发送证书及相关信息。

    4 服务器的最后回应

            服务器收到客户端的第三个随机数pre-master key之后,计算生成本次会话所用的"会话密钥"。(客户端在第三阶段也生成这个“会话秘钥”)。然后,向客户端最后发送下面信息。
    (1)编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
    (2)服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验。

            至此,整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用"会话密钥"加密内容。

     

    TLS的主要目标是使SSL更安全,并使协议的规范更精确和完善。TLS 在SSL v3.0 的基础上,提供了以下增强内容:

      1)更安全的MAC算法

      2)更严密的警报

      3)“灰色区域”规范的更明确的定义

     

    TLS对于安全性的改进点如下:

      1)对于消息认证使用密钥散列法:TLS 使用“消息认证代码的密钥散列法”(HMAC),当记录在开放的网络(如因特网)上传送时,该代码确保记录不会被变更。SSLv3.0还提供键控消息认证,但HMAC比SSLv3.0使用的(消息认证代码)MAC 功能更安全。

     2)增强的伪随机功能(PRF):PRF生成密钥数据。在TLS中,HMAC定义PRF。PRF使用两种散列算法保证其安全性。如果任一算法暴露了,只要第二种算法未暴露,则数据仍然是安全的。

     3)改进的已完成消息验证:TLS和SSLv3.0都对两个端点提供已完成的消息,该消息认证交换的消息没有被变更。然而,TLS将此已完成消息基于PRF和HMAC值之上,这也比SSLv3.0更安全。

     4)一致证书处理:与SSLv3.0不同,TLS试图指定必须在TLS之间实现交换的证书类型。

     5)特定警报消息:TLS提供更多的特定和附加警报,以指示任一会话端点检测到的问题。TLS还对何时应该发送某些警报进行记录。

     

     

    HTTPS很安全,很古老也很成熟,为什么一直到今天我们还有66%的网站不支持HTTPS呢?

            1、,HTTPS未经任何优化的情况下要比HTTP慢几百毫秒以上,特别在移动端可能要慢500毫秒以上,关于HTTPS慢和如何优化已经是一个非常系统和复杂的话题

            2、,特别在计算性能和服务器成本方面。HTTPS为什么会增加服务器的成本?相信大家也都清楚HTTPS要额外计算,要频繁地做加密和解密操作,几乎每一个字节都需要做加解密,这就产生了服务器成本

     

    另外还有:

            1、大量的计算。SSL的每一个字节都涉及到较为复杂的计算。即使是clientHello,也需要在握手完成时做校验。

            2、TLS协议的封装和解析。HTTPS所有数据都是按照TLS record格式进行封装和解析的。

           3、协议的网络交互。从TLS的握手过程可以看出,即使不需要进行任何计算,TLS的握手也需要至少1个RTT(round trip time)以上的网络交互。

    RTT(Round-Trip Time): 往返时延。在计算机网络中它是一个重要的性能指标,表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延。

            4、HTTPS降低用户访问速度(需多次握手)

            5、网站改用 HTTPS 以后,由 HTTP 跳转到 HTTPS 的方式增加了用户访问耗时(多数网站采用 301、302 跳转)

            6、HTTPS 涉及到的安全算法会消耗 CPU 资源,需要增加服务器资源(https 访问过程需要加解密)

     

     

     

    HTTPS涉及的计算环节

            1、非对称密钥交换。比如RSA, Diffie-Hellman, ECDHE.这类算法的主要作用就是根据客户端和服务端不对称的信息,经过高强度的密钥生成算法,生成对称密钥,用于加解密后续应用消息。

             2、对称加解密。服务端使用密钥A对响应内容进行加密,客户端使用相同的密钥A对加密内容进行解密,反之亦然。

            3、消息一致性验证。每一段加密的内容都会附加一个MAC消息,即消息认证码。简单地说就是对内容进行的安全哈希计算,接收方需要校验MAC码。

            4、证书签名校验。这个阶段主要发生在客户端校验服务端证书身份时,需要对证书签名进行校验,确保证书的真实性。

    以上图片文字解释来源:https://www.cnblogs.com/mylanguage/p/5635524.html

    OCSP(Online Certificate Status Protocol,在线证书状态协议)

     

     

    如何优化HTTPS的速度

    1、HSTS重定向技术

    HSTS(HTTP Strict Transport Security)技术,启用HSTS后,将保证浏览器始终连接到网站的 HTTPS 加密版本。

            1. 用户在浏览器里输入 HTTP 协议进行访问时,浏览器会自动将 HTTP 转换为 HTTPS 进行访问,确保用户访问安全;

            2. 省去301跳转的出现,缩短访问时间;

            3. 能阻止基于 SSL Strip 的中间人攻击,万一证书有错误,则显示错误,用户不能回避警告,从而能够更加有效安全的保障用户的访问。

     

    2、TLS握手优化

            在传输应用数据之前,客户端必须与服务端协商密钥、加密算法等信息,服务端还要把自己的证书发给客户端表明其身份,这些环节构成 TLS 握手过程。

            采用 False Start (抢先开始)技术,浏览器在与服务器完成 TLS 握手前,就开始发送请求数据,服务器在收到这些数据后,完成 TLS 握手的同时,开始发送响应数据。

            开启 False Start 功能后,数据传输时间将进一步缩短。

     

    3、Session Identifier(会话标识符)复用

            如果用户的一个业务请求包含了多条的加密流,客户端与服务器将会反复握手,必定会导致更多的时间损耗。或者某些特殊情况导致了对话突然中断,双方就需要重新握手,增加了用户访问时间。

            (1)服务器为每一次的会话都生成并记录一个 ID 号,然后发送给客户端;

            (2)如果客户端发起重新连接,则只要向服务器发送该 ID 号;

            (3)服务器收到客户端发来的 ID 号,然后查找自己的会话记录,匹配 ID 之后,双方就可以重新使用之前的对称加密秘钥进行数据加密传输,而不必重新生成,减少交互时间。

     

    4、开启OSCP Stapling,提高TLS握手效率

            采用OCSP Stapling ,提升 HTTPS 性能。服务端主动获取 OCSP 查询结果并随着证书一起发送给客户端,从而客户端可直接通过 Web Server 验证证书,提高 TLS 握手效率。

            服务器模拟浏览器向 CA 发起请求,并将带有 CA 机构签名的 OCSP 响应保存到本地,然后在与客户端握手阶段,将 OCSP 响应下发给浏览器,省去浏览器的在线验证过程。由于浏览器不需要直接向 CA 站点查询证书状态,这个功能对访问速度的提升非常明显。

     

    5、完全前向加密PFS,保护用户数据,预防私钥泄漏

            非对称加密算法 RSA,包含了公钥、私钥,其中私钥是保密不对外公开的,由于此算法既可以用于加密也可以用于签名,所以用途甚广,但是还是会遇到一些问题:

    (1) 假如我是一名黑客,虽然现在我不知道私钥,但是我可以先把客户端与服务器之前的传输数据(已加密)全部保存下来

    (2)如果某一天,服务器维护人员不小心把私钥泄露了,或者服务器被我攻破获取到了私钥

    (3)那我就可以利用这个私钥,破解掉之前已被我保存的数据,从中获取有用的信息

            所以为了防止上述现象发生,我们必须保护好自己的私钥。

            如果私钥确实被泄漏了,那我们改如何补救呢?那就需要PFS(perfect forward secrecy)完全前向保密功能,此功能用于客户端与服务器交换对称密钥,起到前向保密的作用,也即就算私钥被泄漏,黑客也无法破解先前已加密的数据。维基解释是:长期使用的主密钥泄漏不会导致过去的会话密钥泄漏

            实现此功能需要服务器支持以下算法和签名组合:

    (1)ECDHE 密钥交换、RSA 签名;

    (2)ECDHE 密钥交换、ECDSA 签名;

     

    面试常见问题,HTTPS优化总结易记版:

    1、HSTS重定向技术:将http自动转换为https,减少301重定向

    2、TLS握手优化:在TLS握手完成前客户端就提前向服务器发送数据

    3、会话标识符:服务器记录下与某客户端的会话ID,下次连接客户端发ID过来就可以直接用之前的私钥交流了

    4、OSCP Stapling:服务器将带有 CA 机构签名的 OCSP 响应在握手时发给客户端,省的客户端再去CA查询

    5、完全前向加密PFS:使用更牛逼复杂的秘钥算法

     

     

    部分内容参考:

    https://www.cnblogs.com/wqhwe/p/5407468.html 

    https://www.cnblogs.com/xzwblog/p/6834663.html

    https://segmentfault.com/p/1210000009272802/read

    展开全文
  • HTTP与HTTPS的区别

    万次阅读 多人点赞 2020-03-22 00:00:29
    面试官问HTTP与HTTPS的区别,我这样回答让他竖起大拇指!
  • nginx开通https

    万次阅读 多人点赞 2020-06-12 17:35:36
    nginx开通https 简述 为大家提供一个https的配置流程吧,供大家参考。 1、下载SSL证书 2、两个证书放在cert目录上然后放到nginx 与nginx.conf同目录下 3、去nginx解压目录下执行 ./configure --with-http_ssl_module...
  • 写一篇最好懂的HTTPS讲解

    万次阅读 多人点赞 2020-03-03 07:44:56
    大家早上好,有段时间没更新文章了。 其实疫情期间在家呆了一个多月的时间不能出门,时间倒是挺多的,我也利用这...随着苹果、Google等各大互联网领头企业纷纷在自己的操作系统、浏览器等主流产品中强制要求使用https
  • Tomcat的Https设置及Http自动跳转Https

    万次阅读 2017-06-01 09:13:41
    1.场景还原 近期项目中要对信息传输过程中进行安全加密,那么第一时间浮现笔者脑海的当然是https,接下来笔者将介绍如何在web服务器Tomcat中配置Https及Http自动跳转Https2.Https相关介绍 Https是由NetScape公司设计...
  • Nginx 配置 HTTPS 完整过程

    万次阅读 2018-11-26 10:06:06
    配置站点使用 https,并且将 http 重定向至 https。 1. nginx 的 ssl 模块安装 查看 nginx 是否安装 http_ssl_module 模块。 $ /usr/local/nginx/sbin/nginx -V ![在这里插入图片描述]...
  • nginx实现https访问

    万次阅读 2020-12-29 14:53:45
    HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS 在HTTP 的基础下加入SSL 层,HTTPS 的...
  • http 和 https

    万次阅读 2020-05-17 17:17:37
    通信协议时浏览器和服务器之间沟通的语言,一般是http协议和https协议 http协议是一种使用明文数据传输的网络协议 https协议在数据进行传输之前,对数据进行加密,再发送到服务器 搜索排名时https网站更有优势 https...
  • Fiddler 如何抓取手机app包以及抓取https 响应

    万次阅读 热门讨论 2018-11-19 09:42:11
    普通https抓包设置 打开Fiddler ——> Options .然后打开的对话框中,选择HTTPS tab页,如图: 接下来,选择 Connections tab页,如图: 在进行这两步的过程中,...
  • fiddler 手机 https 抓包

    万次阅读 多人点赞 2016-08-13 22:20:02
    fiddler手机抓包原理fiddler手机抓包的原理与抓pc上的web数据一样,都是把fiddler当作代理,网络请求走fiddler,fiddler从中拦截数据,由于fiddler充当中间人的角色,所以可以解密https下面开始手机抓包设置教程设置...
  • Nginx下配置Https证书详细过程

    万次阅读 热门讨论 2018-04-21 14:08:51
    一、Http与Https的区别 HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输...
  • HTTP和HTTPS协议

    万次阅读 2019-10-15 00:10:52
    今天让我们一起研究一下HTTP和HTTPS这两种常用的协议。 HTTP: 是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以...
  • Nginx配置HTTPS

    万次阅读 2017-10-16 17:49:02
    Nginx配置HTTPS最近配置了现网网站的HTTPS,简单记录一下配置过程。先交代一下我的服务部署环境:Nginx监听80端口,转发到Tomcat的8080端口;服务器使用的是阿里云的ECS,操作系统是Windows Server 2012;CA证书也是...
  • 一、 申请免费证书 Let’s Encrypt上获取证书,生成证书的操作需要在域名解析到的服务器上进行。目前可以在linux的服务器上,进行如下操作获取...git clone https://github.com/letsencrypt/letsencrypt #在执行...
  • http/https与websocket的ws/wss的关系

    万次阅读 多人点赞 2018-08-14 21:06:19
    今天在域名升级到HTTPS的时候遇到websocket的链接问题,之前在http下使用的是new WebSocket('ws://xxx');但是在切换到HTTPS后这个链接部分浏览器报错甚至代码整体抛出异常走不下去了,之前没有注意过websocket在两个...
  • IIS配置HTTPS

    万次阅读 2018-06-27 13:46:36
    1,新建网站,选中类型为https,然后更改SSL证书为你配置的SSL证书,对于SSL证书的配置是这样的点开第二步,然后点击创建自签名证书确定以后点开网站看到有个SSL,双击进去,再选中要求SSL选中此步就是为了防止...
  • Spring Boot中启动HTTPS

    万次阅读 多人点赞 2016-05-05 09:09:34
    Spring Boot中启动HTTPS如果你使用Spring Boot,并且想在内嵌tomcat中添加HTTPS,需要如下步骤 要有一个证书,买的或者自己生成的 在Spring Boot中启动HTTPS 将HTTP重定向到HTTPS(可选) 获取SSL证书有两种方式* ...
  • 免费SSL证书实现https请求

    万次阅读 2019-03-18 00:34:08
    总结前言近期业务需要,进行小程序的开发,但是在小程序里面请求必须要https才能正常请求数据,为了方便测试,在腾讯云SSL证书上申请了一个个人版的SSL证书进行测试;并在此记录整个配置的过程。证书申请申请入口如...
  • nginx配置SSL(使用https访问网页)

    万次阅读 2020-10-18 22:15:09
    许多小伙伴有了自己的域名,但是发现现在的网页都是https协议的,就想使自己的域名也能通过https访问 现在从申请SSL证书开始配置一下https。 由于我的域名是从阿里云上购买的,所以去阿里云购买SSL证书 点击SSL...
  • 昨天在使用docker 时,将 image 文件从仓库抓取到本地一直报错,经过尝试,终于得以解决。 错误信息如下: [root@archlinux ~]# docker image pull library... Error response from daemon: Get https://registr...
  • 最近发现360浏览器访问某个https://网站直接跳转 se://error/ 具体如下 用其他浏览器,例如chrome就可以正常访问那个https网站。所以问题出在浏览器这块了。经过查询资料和测试发现,这个问题的正确解决...
  • Tomcat配置SSL证书:开启https访问和强制跳转https  第一次来CSDN,最近在研究内网穿透,了解到了SSL证书与HTTP/HTTPS,今天就给大家分享一下用法心得: 1.开启tomcat的https访问 (修改端口:8080->80, ...
  • android Webview 打开https链接

    万次阅读 2019-06-11 20:24:08
    参考这篇 解决了 打开 https链接Android:这是一份全面 & 详细的Webview使用攻略 package com.mycompany.myapp2; import android.content.Context; import android.app.*; import android.os.*; import ...
  • Nginx代理https强制http跳转https

    万次阅读 2019-01-10 20:02:02
    所以要将http变成https访问,如果用户用http访问先跳转到https,然后经过Nginx代理后以http的形式访问原来的程序,这样就不需要更改任何的代码了 ; 在配置过程遇到几个小问题,经过多方查询,借鉴很多大佬的宝贵...
  • Fiddler抓HTTPS包配置和抓手机包配置

    万次阅读 2019-03-15 09:46:55
    外包项目接单平台 ...https://www.zbj.com/ 2、解放号 https://www.jfh.com/ 3、云沃客 https://www.clouderwork.com/ 4、码市 https://codemart.com/ 5、程序员客栈 https://www.proginn.com/ ...
  • 服务器https配置

    万次阅读 2017-08-16 17:09:33
    1.登录阿里云后台: https://www.aliyun.com 在右上角”产品与服务”->”证书服务” 在证书列表,点击右上角”购买证书”->选择免费证书 返回证书列表, 选择刚刚申请的证书, 点击右边的”补全” 补全资料 等待...
  • Nginx实现https反向代理配置

    万次阅读 2018-06-05 10:52:51
    一些对安全性要求比较高的站点,可能会使用 HTTPS(一种使用ssl通信标准的安全HTTP协议)。 先了解一些http相关的概念:  HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答...

空空如也

1 2 3 4 5 ... 20
收藏数 4,808,405
精华内容 1,923,362
关键字:

https