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.91991年不涉及数据包传输,规定客户端和服务器之间通信格式,只能GET请求没有作为正式的标准
    HTTP/1.01996年传输内容格式不限制,增加PUT、PATCH、HEAD、 OPTIONS、DELETE命令正式作为标准
    HTTP/1.11997年持久连接(长连接)、节约带宽、HOST域、管道机制、分块传输编码2015年前使用最广泛
    HTTP/22015年多路复用、服务器推送、头信息压缩、二进制协议等逐渐覆盖市场

    这里写图片描述
    这个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-仿微信消息列表
    面试必备操作系统

    展开全文
  • 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的主干层次介绍

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

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

    SSL与TLS

    SSL/TLS历史

    SSL/TLS协议的基本过程

    SSL/TLS 密码套件

    HTTPS涉及的计算环节

    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的主干层次介绍

    这部分内容作为前提点缀,如果你是初次了解HTTPS,看不懂这里不要紧,只要把文章后面看完,再回过头来看这里的内容,就能恍然大悟了。

    第一层:HTTPS本质上是为了实现加密通信,理论上,加密通信就是双方都持有一个对称加密的秘钥,然后就可以安全通信了

        但是,无论这个最初的秘钥是由客户端传给服务端,还是服务端传给客户端,都是明文传输,中间人都可以知道。那就让这个过程变成密文就好了呗,而且还得是中间人解不开的密文。

    第二层使用非对称加密 加密客户端与服务端协商生成对称秘钥之前各种盐值、种子。

        但是,在使用非对称加密秘钥之前,比如由服务端生成非对称秘钥,它需要将生成的公钥给到客户端,这个时候公钥就会在网络中明文传输,任何人都可以更改,会有中间人攻击的问题。因此,只能引入公信机构CA,使我们传输自己的公钥时可以保证不会被篡改!

    第三层:服务端把自己的公钥给 CA,让 CA 用 CA 的私钥加密,然后返回加密结果(可以用CA的公钥解密,如果要篡改结果,必须再次用 CA 的私钥加密,由于中间人没法获取私钥,所以无法篡改)。

    客户端在使用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、进入客户端生成对称密钥再进行对接的过程......

    SSL与TLS

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

    TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。TLS是HTTP与TCP协议之间的一层,通常TLS发生在TCP三次握手之后,此时进行TLS四次握手,然后再进行HTTP通信

    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的修订版,在2018年也发布了TLS1.3版本。

    TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。

    目前应用的最广泛的 TLS 是 1.2,而之前的协议(TLS1.1/1.0、SSLv3/v2)都已经被认为是不安全的了

    SSL/TLS协议的基本过程(TLS1.2)


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

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

     下面是我们本次模拟访问https://www.baidu.com时抓的包,大家可以看到这里面涉及的流程逻辑

    1 客户端发出请求(ClientHello)

    (1) 支持的协议版本,比如TLS 1.2版。
    (2) 一个客户端生成的随机数1,稍后用于生成"对话密钥"。
    (3) 【支持的密码套件】支持的加密方法,比如RSA公钥加密。
    (4) 支持的压缩方法。
    (5) 一个session id,标识是否复用服务器之前的tls连接(需要服务器支持)

    2 服务器回应(SeverHello)

    (1) 确认使用的加密通信协议版本,比如TLS 1.2版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。
    (2) 一个服务器生成的随机数2,稍后用于生成"对话密钥"。
    (3) 【确认密码套件】确认使用的加密方法,比如RSA公钥加密,此时带有公钥信息。
    (4) 一个session id(若同意复用连接)

    3 服务器回应(Server Certificate)

    (1)服务器证书(该证书即包含服务器公钥)。

    4 服务器回应(Server Key Exchange)

    (1)服务器算法变更通知,服务端给客户端一个用于 ECDHE 算法的公钥

    5 服务器回应(Server CertificateRequest)

    (1)请求客户端证书,此案例中没有,一般银行等需要客户端也加密的才有,比如 U 盾。

    6 服务器回应(Server ServerHelloDone)- 标识着 serverHello 这个握手过程结束了。

    7 客户端回应(Client Certificate)- 回应客户端证书,本案例不涉及

    8 客户端回应(ClientKeyExchange)

    (1)客户端给服务端一个用于 ECDHE 算法的公钥

    到这里,服务端与客户端将 生成最终通信的对称加密秘钥:master_secret

    计算过程根据上面得到的三个随机数:

    随机数 1(客户端随机数):在 ClientHello 消息里,由客户端生成的随机数1

    随机数 2(服务端随机数):在 ServerHello 消息里,由服务端生成的随机数2

    随机数 3(pre_master):通过秘钥交换算法 ECDHE 计算出的,我们叫它 pre_master。

    最终的对称加密秘钥 master_secret,就是根据这三个随机数共同计算出来的。

    9 客户端回应(Client CertificateVerif

    (1)验证客户端证书有效性,本次不涉及

    10 客户端回应(Client ChangeCipherSpec)

    (1)秘钥改变通知,此时客户端已经生成了 master_secret,之后的消息将都通过 master secret 来加密。

    11 客户端回应(Client Finish)

    (1) 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验。

    12 服务器回应(Server ChangeCipherSpec)

    (1)秘钥改变通知,此时服务端也已经生成了 master_secret 了,后面的通信都用此值加密。

    13 服务器回应(Server Finish

    (1)同 Client Finish,服务器端发送握手结束通知,同时会带上前面所发内容的hash签名到客户端,保证前面通信数据的正确性。

    上述流程简易版(不包含验证客户端证书):

    1. client --> server ClientHello

    客户端生成随机数,并发送一组密码学套件供服务端选

    2. server--> client ServerHello

    服务端生成随机数,并从上述密码学套件组里选一个

    3. server--> client Certificate

    服务端发给客户端证书

    4. server--> client ServerKeyExchange

    服务端发给客户端秘钥交换算法所需的值

    5. server--> client ServerHelloDone

    服务端 hello 阶段结束

    6. client --> server ClientKeyExchange

    客户端发给服务端秘钥交换算法所需的值

    7. client --> server ChangeCipherSpec

    客户端告诉服务端,我已经知道秘钥了,之后的消息我就都加密发送了。

    8. client --> server Finish

    结束并验证

    7. server --> server ChangeCipherSpec

    服务端告诉客户端,我已经知道秘钥了,之后的消息我就都加密发送了。

    9. server--> client Finish

    结束并验证

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

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

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

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

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

    以上介绍为TLS1.2的版本,其他TLS如1.0版本的流程会稍有不同,但大致逻辑是一样的。

    TLS 1.2 转换流程逻辑也可以参考:26丨信任始于握手:TLS1.2连接过程解析 - 飞鸟与新月 - 博客园

    更新的 TLS 1.3也可以参考:27丨更好更快的握手:TLS1.3特性解析 - 飞鸟与新月 - 博客园

    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还对何时应该发送某些警报进行记录。

    SSL/TLS 密码套件

    浏览器和服务器在使用 TLS 建立连接时需要选择一组恰当的加密算法来实现安全通信,这些算法的组合被称为“密码套件”(cipher suite,也叫加密套件)。上述Client/Server Hello过程中就涉及密码套件的约定流程。

    TLS 的密码套件命名格式为:密钥交换算法 + 签名算法 + 对称加密算法 + 摘要算法

    如对于套件:“ECDHE-RSA-AES256-GCM-SHA384”,其解释为:握手时使用 ECDHE 算法进行密钥交换,用 RSA 签名和身份认证,握手后的通信使用 AES 对称算法,密钥长度 256 位,分组模式是 GCM,摘要算法 SHA384 用于消息认证和产生随机数。

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

    以上图片文字解释来源:HTTP与HTTPS对访问速度(性能)的影响 - 宋可欣 - 博客园

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

    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的

    如何优化HTTPS的速度

    HTTPS连接大致可以划分为两个部分:第一个是建立连接时的非对称加密握手,第二个是握手后的对称加密报文传输

    由于目前流行的 AES、ChaCha20 性能都很好,还有硬件优化,报文传输的性能损耗可以说是非常地小,小到几乎可以忽略不计了。所以,通常所说的“HTTPS 连接慢”指的就是刚开始建立连接的那段时间。

    在 TCP 建连之后,正式数据传输之前,HTTPS 比 HTTP 增加了一个 TLS 握手的步骤,这个步骤最长可以花费两个消息往返,也就是 2-RTT(TLS1.3只需1-RTT)。而且在握手消息的网络耗时之外,还会有其他的一些“隐形”消耗,比如:

           产生用于密钥交换的临时公私钥对(ECDHE);

           验证证书时访问 CA 获取 CRL 或者 OCSP;

           非对称加密解密处理“Pre-Master”。

    1、HSTS重定向技术

    HSTS(HTTP Strict Transport Security,HTTP 严格传输安全)技术,启用HSTS后,将保证浏览器始终连接到网站的 HTTPS 加密版本。这相当于告诉浏览器:我这个网站必须严格使用 HTTPS 协议,在半年之内(182.5 天)都不允许用 HTTP,你以后就自己做转换吧,不要再来麻烦我了。

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

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

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

    2、TLS握手优化

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

            使用 ECDHE 椭圆曲线密码套件,可以节约带宽和计算量,还能实现“False Start”,采用 False Start (抢先开始)技术,浏览器在与服务器完成 TLS 握手前,就开始发送请求数据,服务器在收到这些数据后,完成 TLS 握手的同时,开始发送响应数据。

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

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

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

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

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

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

            但它也有缺点,服务器必须保存每一个客户端的会话数据,对于拥有百万、千万级别用户的网站来说存储量就成了大问题,加重了服务器的负担。于是又出现了第二种“Session Ticket”的方案。

            它有点类似 HTTP 的 Cookie,存储的责任由服务器转移到了客户端,服务器加密会话信息,用“New Session Ticket”消息发给客户端,让客户端保存。重连的时候,客户端使用扩展“session_ticket”发送“Ticket”而不是“Session ID”,服务器解密后验证有效期,就可以恢复会话,开始加密通信。不过“Session Ticket”方案需要使用一个固定的密钥文件(ticket_key)来加密 Ticket,为了防止密钥被破解,保证“前向安全”,密钥文件需要定期轮换,比如设置为一小时或者一天。

    4、开启OSCP Stapling(OSCP装订),提高TLS握手效率

            客户端的证书验证其实是个很复杂的操作,除了要公钥解密验证多个证书签名外,因为证书还有可能会被撤销失效,客户端有时还会再去访问 CA,下载 CRL (Certificate revocation list,证书吊销列表,用于确认证书是否有效,体积较大,现基本不用)或者 OCSP 数据,这又会产生 DNS 查询、建立连接、收发数据等一系列网络通信,增加好几个 RTT。

            采用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 签名;

            ECDHE 算法在每次握手时都会生成一对临时的公钥和私钥,每次通信的密钥对都是不同的,也就是“一次一密”,即使黑客花大力气破解了这一次的会话密钥,也只是这次通信被攻击,之前的历史消息不会受到影响,仍然是安全的。

           使用ECDHE算法的TLS交换过程具有如下优点:运算速度快,安全性高,还支持“False Start”,能够把握手的消息往返由 2-RTT 减少到 1-RTT

           所以现在主流的服务器和浏览器在握手阶段都已经不再使用 RSA,改用 ECDHE,而 TLS1.3 在协议里明确废除 RSA 和 DH 则在标准层面保证了“前向安全”。

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

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

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

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

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

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

    部分内容参考:

    HTTP与HTTPS的区别 - 爱笑的蛙蛙 - 博客园 

    HTTP认证方式与https简介 - 何必等明天 - 博客园

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

    叮咚 | HTTPS 的分支和主干

    今天我抓了个 HTTPS 的包

    展开全文
  • https

    千次阅读 2018-04-02 14:31:27
    计网中HTTPS的实现过程【HTTPS是在http的基础上加上了TLS/SSL的加密传送信息的协议】【https://blog.csdn.net/baiye_xing/article/details/73989189】 客户端发送HTTPS请求 服务端接受请求,并发送证书给...

     

    以下内容为查看其它的博客的总结【已附上原链接地址】,如有问题,请指正,谢谢

    1. 计网中HTTPS的实现过程【HTTPS是在http的基础上加上了TLS/SSL的加密传送信息的协议】【https://blog.csdn.net/baiye_xing/article/details/73989189】

      1. 客户端发送HTTPS请求

      2. 服务端接受请求,并发送证书给客户端【此证书有公钥、有效期、发证机构等信息,无私钥】

      3. 客户端接受到证书,校验证书【发证机构CA的证书默认被信任;自设的证书,客户端会提示用户,是否信任此证书,由用户决定是否使用此证书】

      4. 客户端生成随机数,并使用证书公钥进行加密

      5. 客户端把加密后的随机数发送给服务端

      6. 服务端使用私钥解析出客户端发过来的随机数

      7. 服务端使用随机数加密数据

      8. 服务端发送加密后的数据给客户端

      9. 客户端获取加密后的数据,用随机数解密,获取明文

    2. 服务器从http转成HTTPS【https://www.cnblogs.com/moon521/p/5948058.html】

      1. 生成证书

        1. 向发证机构申请【需要交年费】

        2. 使用jdk工具生成:命令:keytool -genkey -alias 证书名称 -keyalg RSA   -keystore d:\keystore.jks -dname "CN=公开名称, OU=单位名称, O=组织名称, L=SH, ST=SH, C=CN" -keypass key密码 -storepass 存储密码 -validity 有效天数

      2. Tomcat中配置证书

        <Connector SSLEnabled="true" acceptCount="100" clientAuth="false"

            disableUploadTimeout="true" enableLookups="false" maxThreads="25"

            port="8443" keystoreFile="/Users/loiane/.keystore" keystorePass="password"

            protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https"

            secure="true" sslProtocol="TLS" />

      3. 进过1,2部后就可进行HTTPS访问了,但是也能进行http访问,若要屏蔽http,需在web.xml中设置

        <security-constraint>

            <web-resource-collection>

                <web-resource-name>securedapp</web-resource-name>

                <url-pattern>/*</url-pattern>

            </web-resource-collection>

            <user-data-constraint>

                <transport-guarantee>CONFIDENTIAL</transport-guarantee>

            </user-data-constraint>

        </security-constraint>

         

        URL 映射设为 /* ,这样你的整个应用都要求是 HTTPS 访问【若用http访问也会自动转成https】,而 transport-guarantee 标签设置为 CONFIDENTIAL 以便使应用支持 SSL。

        如果你希望关闭 SSL ,只需要将 CONFIDENTIAL 改为 NONE 即可。

    3. Java中访问HTTPS接口的实现【https://blog.csdn.net/shumeng_xiaoyan/article/details/76503601】

      1. http和HTTPS的区别在于,HTTPS多了验证证书的过程【证书正常情况下被jdk/jre/security/cacerts所管理

      2. 验证证书的过程

        1. 发证机构的证书默认是不需要验证的【直接用http的方式访问就行】

        2. 自设证书【jdk生成的证书】

          1. jre中导入证书

            1. 从该网站下载或者从网站开发者出获取证书cacert.crt

            2. 运行命令将证书导入java运行环境:keytool -import -keystore %JAVA_HOME%\jre\lib\security\cacerts -file cacert.crt -alias xxx

            3. 完成。java代码中发送https的请求和http一样,同第一种情况。

          2. 忽略证书的验证,继承X509TrustManager ,不实现任何方法

          3. 验证证书,继承X509TrustManager ,修改构造器

             

    展开全文
  • 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。 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URI)、协议版本号,后边是 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 站点身份的手段。服务器证书包含详细的身份验证信息,如服务器内容附属的组织、颁发证书的组织以及称为公开密钥的唯一的身份验证文件。

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

    万次阅读 多人点赞 2019-08-09 14:39:34
    近几年,互联网发生着翻天覆地的变化,尤其是我们一直习以为常的HTTP协议,在逐渐的被HTTPS协议所取代,在浏览器、搜索引擎、CA机构、大型互联网企业的共同促进下,互联网迎来了“HTTPS加密时代”,HTTPS将在未来的...
  • git clone 遇到问题:fatal: unable to access 'https://github.comxxxxxxxxxxx': Failed to connect to xxxxxxxxxxxxx 将命令行里的http改为git重新执行。
  • 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-03-22 00:00:29
    面试官问HTTP与HTTPS的区别,我这样回答让他竖起大拇指!
  • 突破https——https抓包

    万次阅读 2017-12-10 20:48:57
    加密阶段学习了https原理,现在开始尝试破解,工具主要是burp suite, fiddler/charles与之类似。 一些概念性的东西 中间人攻击 在中间人攻击中,攻击主机通常截断客户端和服务器的加密通信。攻击机以自己...
  • Nginx 配置 HTTPS 完整过程

    万次阅读 多人点赞 2018-11-26 10:06:06
    配置站点使用 https,并且将 http 重定向至 https。 1. nginx 的 ssl 模块安装 查看 nginx 是否安装 http_ssl_module 模块。 $ /usr/local/nginx/sbin/nginx -V ![在这里插入图片描述]...
  • JS错误:Mixed Content: The page at ‘https://XXX’ was loaded over HTTPS, but requested an insecure 1、环境 Tomcat Nginx 【走https 通道】 框架形式是以 iframe 作为支撑的 2、问题 主体框架可以正常加载, ...
  • Tomcat配置 https SSL证书

    万次阅读 热门讨论 2017-08-13 16:28:11
    公司网站链接要由原来的http超文本传输协议访问改为https SSl加密传输协议访问。 HTTP与HTTPS的区别:HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私...
  • 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...
  • Tomcat的Https设置及Http自动跳转Https

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

    万次阅读 2020-05-17 17:17:37
    通信协议时浏览器和服务器之间沟通的语言,一般是http协议和https协议 http协议是一种使用明文数据传输的网络协议 https协议在数据进行传输之前,对数据进行加密,再发送到服务器 搜索排名时https网站更有优势 https...
  • Nginx下配置Https证书详细过程

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

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

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

    万次阅读 2019-07-02 17:44:42
    注意:Unity官网地址变更为 https://unity.cn/
  • fiddler 手机 https 抓包

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

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

    2015-11-12 00:11:14
    一个关于android端使用https访问后台接口的demo,提供给初学者使用,可以了解到如何使用https来访问相关的数据
  • Fiddler 如何抓取手机app包以及抓取https 响应

    万次阅读 热门讨论 2018-11-19 09:42:11
    普通https抓包设置 打开Fiddler ——&amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; Options .然后打开的对话框中,选择HTTPS tab页,如图: 接下来,选择 Connections tab页,如图: 在进行这两步的过程中,...
  • HTTPS协议详解(一):HTTPS基础知识

    万次阅读 多人点赞 2016-09-08 12:22:55
    HTTPS基础知识:HTTPS (Secure Hypertext Transfer Protocol)安全超文本传输协议,是一个安全通信通道,它基于HTTP开发用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说它是...
  • 域名 https 五分钟搞定 HTTPS 配置

    千次阅读 2019-06-14 15:55:33
    转载:https://www.cnblogs.com/qing-gee/p/10838023.html
  • AndroidStudio报错:Could not install Gradle distribution from 'https://services.gradle.org/distributions/gradle 出现这个问题,不要紧张,很简单的解决哈,如果你是在我们网站(www.tkres.cn)获取的...
  • nginx使用ssl模块配置支持HTTPS访问

    万次阅读 多人点赞 2018-02-23 20:34:15
    背景: 项目开发中用到了微信小程序,但是服务器配置URL必须是HTTPS,所以需要通过配置nginx的SSL模块来支持HTTPS访问,也就是说,要做一个网站域名为 dmsdbj.com 要求通过HTTPS://dmsdbj.com进行访问. SSL英文名为...
  • https 证书验证 okhttp https设置

    万次阅读 2016-12-12 18:09:05
    自制https证书 需要验证. okhttp不验证直接通过通过所有的https连接 代码如下 public void getONetWorkString() { OkHttpClient build = new OkHttpClient.Builder() .sslSocketFactory...
  • Tomcat配置HTTPS访问

    万次阅读 2019-05-17 11:00:31
    在tomcat中存在两种证书验证情况 (1)单向验证 (2)双向验证 1.tomcat单向认证 服务器端会提供一个公开的公钥,每一个访问此服务器...找到端口号为433的配置段,433是访问HTTPS的端口号添加如下内容 <Connector po...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,007,682
精华内容 5,603,073
关键字:

https