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更安全

     

    展开全文
  • nginx实现https访问

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

    HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS 在HTTP 的基础下加入SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面 。
    下面先简要概述三种可以实现https访问方式,后面详细说本人实战经验。
    有问题可以联系本人:1016401546,备注来意,否则不加

    方式1:使用rewrite指令

    server {
        listen 80;
        server_name domain.com;
        rewrite ^(.*) https://$server_name$1 permanent;
    }
    server {
        listen 443 ssl;
        server_name domain.com;
        ssl on;
        ssl_certificate     /etc/nginx/ssl/domain.com.crt;
        ssl_certificate_key /etc/nginx/ssl/domain.com.crt;
        # other
    }
    

    如果此时nginx作为Tomcat的前端反向代理的话,需要将相应配置放在配置ssl的server块中。

    方式2:使用return指令

    server {
        listen 80;
        server_name domain.com;
        return 301 https://$server_name$request_uri;
    }
    server {
        listen 443 ssl;
        server_name domain.com;
        ssl on;
        ssl_certificate     /etc/nginx/ssl/domain.com.crt;
        ssl_certificate_key /etc/nginx/ssl/domain.com.crt;
        # other
    }
    

    如果此时nginx作为Tomcat的前端反向代理的话,需要将相应配置放在配置ssl的server块中。

    方式三:使用error_page指令
    只允许HTTP来访问时,用HTTP访问会让Nginx报497错误,然后利用error_page将链接重定向至HTTPS上。

    server {
        listen 80;
        listen 443 ssl;
        server_name domain.com;
        ssl on;
        ssl_certificate     /etc/nginx/ssl/domain.com.crt; 
        ssl_certificate_key /etc/nginx/ssl/domain.com.crt;
        # other
        error_page 497 https://$server_name$request_uri;
    }
    

    使用error_page指令时,将http和https的监听配置写在同一个server块中,对应的其他配置也需要在该server配置块中完成。
    需要注意的是,此时需要将error_page指令语句写在最后,否则不能生效。

    实战经验

    以上方法可以实现将某个端口的所有链接跳到443端口上面,但是需要注意的是字体加粗的地方
    拿方式1来说,需要将相应配置放在配置ssl的server块中的意思是说:包括反向代理,动静分离那些相关的配置都要写在443端口的sever里面。否则不能生效。
    如果存在多个端口:如8080,8088这些,那么上述方法只能应用到其中1个端口。也就是说只能80跳到443或者8080跳到443。
    而我们的客户要求是,可以通过以下形式访问:
    对于8080端口: 可以通过下面方式访问

    https://域名:8080
    http://域名:8080

    对于80端口:

    https://域名
    http://域名

    也就是说一个端口需要同时支持http和https两种协议。

    公司的架构访问方式是:

    用户===》防火墙====》F5负载均衡====》nginx动静分离方向代理===》内网Tomcat

    需求分析:
    用户和nginx之间使用https,nginx和Tomcat之间的通信是用http。那么这样配置的话则不需要修改Tomcat的配置文件。比较方便,这样只需要修改nginx的配置文件即可。上面客户的要求即是我们需求,使8080端口和80端口同时支持http和https访问。
    步骤1: server模块添加证书

    		listen       8080 ssl;
            server_name  aop.gd10010.cn;
            #注释下面配置,同时支持https和http访问
            #ssl on;
            ssl_certificate      /data/nginx/sbin/aop_gd10010_cn_combin.cer;
            ssl_certificate_key  /data/nginx/sbin/aop.gd10010.cn.key.unsecure;
    
            ssl_session_cache    shared:SSL:1m;
            ssl_session_timeout  5m;
    
            ssl_ciphers  HIGH:!aNULL:!MD5;
            ssl_prefer_server_ciphers  on;
    

    步骤2: server 模块最后添加下面代码(注意后面的端口号)

        #使用497状态重写到http上面
        error_page 497 = @497;
        location @497 {
                rewrite / $uri last;
        }
    	#如果想只允许使用https访问,则打开server的ssl on;注释掉上面4行,打开下面一行。8080为对应的端口
        #error_page 497 https://$server_name:8080$request_uri;#注意变量后面的端口号
    }
    

    步骤3: 其他配置参照普通配置即可(如反向代理,日志配置等)

    我的大部分配置
    有些配置可能对你们是多余的,正常配置不用变,就添加证书和几条配置信息就可以了。

    user  nobody nobody;
    worker_processes  auto; 
    error_log  logs/error.log       notice;
    pid        logs/nginx.pid;
    worker_rlimit_nofile    655350;
    events {
        use epoll;
        worker_connections  65535;
    }
    http {
        include       mime.types;
        add_header X-Frame-Options "SAMEORIGIN";
        default_type  application/octet-stream;
        server_tokens       off;
        sendfile       on;
        tcp_nopush     on;
        tcp_nodelay    on;
            client_max_body_size 8m;
        keepalive_timeout  60;
        gzip  on;
        include             proxy.conf;
        include             ban_ip.conf;
        upstream    backend {
            #ip_hash;
            server 10.111.100.77:8080 max_fails=3 fail_timeout=10s;
            server 10.111.100.78:8080 max_fails=3 fail_timeout=10s;
            keepalive 60;
        }
        server {
            listen       80;#把80端口的链接跳转到443
            listen       443 ssl;
            server_name  xxx.xxx.cn;#证书的域名
        	 #注释下面一行,使同时支持https和http访问
     #ssl on
            ssl_certificate      /data/nginx/sbin/xxxxx.cer;#证书的路径
            ssl_certificate_key  /data/nginx/sbin/xxxxx.unsecure;
            ssl_session_cache    shared:SSL:1m;
            ssl_session_timeout  5m;
            ssl_ciphers  HIGH:!aNULL:!MD5;
            ssl_prefer_server_ciphers  on;
            access_log  off;
            location ~ /gd.*\.(gif|jpg|png|htm|html|css|js|flv|ico|swf)(.*) {
                 proxy_pass http://backend;
     			 #此处省略部分配置(具体配置看按照公司原本http配置即可)。。。。
            }
            location ~ gd {
                proxy_pass http://backend;
     			 #此处省略部分配置(具体配置看按照公司原本http配置即可)。。。。
            }
            error_page   500 502 503 504  /busy.html;
            location = /busy.html {
                root   html;
            }
     		#使用497状态重写到http上面
            error_page 497 = @497;
            location @497 {
                    rewrite / $uri last;
            }
    
        }
       
        upstream    backend_daily {
            #ip_hash;
            server 10.111.100.73:8080 max_fails=6 fail_timeout=20s;
            server 10.111.100.74:8080 max_fails=7 fail_timeout=20s;
            keepalive 60;
        }
    
        server {
            listen       8080 ssl;
            server_name  xxx.xxx.cn;
            #注释下面配置,同时支持https和http访问
            #ssl on;
            ssl_certificate      /data/nginx/sbin/xxx.cer;
            ssl_certificate_key  /data/nginx/sbin/xxx.unsecure;
    
            ssl_session_cache    shared:SSL:1m;
            ssl_session_timeout  5m;
    
            ssl_ciphers  HIGH:!aNULL:!MD5;
            ssl_prefer_server_ciphers  on;
            access_log  off;
     			 #此处省略部分配置(具体配置看按照公司原本http配置即可)。。。。
            location ~ /gd.*\.(gif|jpg|png|htm|html|css|js|flv|ico|swf)(.*) {
                 proxy_pass http://backend_daily;
    			 #此处省略部分配置。。。。
            }
    
            location ~ gd {
                proxy_pass http://backend_daily;
     			 #此处省略部分配置。。。。
            }
            location = /robots.txt {
            return 400;
            }
            error_page  404 500 502 503 504 403 405 = /busy.html;
            location = /busy.html {
                root   html;
            }
            #使用497状态重写到http上面
            error_page 497 = @497;
            location @497 {
                    rewrite / $uri last;
            }
    		#如果想只允许使用https访问,则打开server的ssl on;注释掉上面4行,打开下面一行。8080为对应的端口
            #error_page 497 https://$server_name:8080$request_uri;#注意变量后面的端口号
        }
    }
    

    配置完成后先用

    ./nginx -t 检查配置文件是否通过,若果通过则可以直接重载。
    重载后验证业务即可。切记,修改配置文件前记得先备份!

    然后发现可以用下面两种方式访问:
    80端口:

    http://域名
    https://域名

    8080端口:

    http://域名:8080
    https://域名:8080

    这样就可以实现http和https协议同时并存了。

    展开全文
  • 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的区别

    万次阅读 多人点赞 2020-03-22 00:00:29
    面试官问HTTP与HTTPS的区别,我这样回答让他竖起大拇指!
  • 写一篇最好懂的HTTPS讲解

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

    万次阅读 2018-11-26 10:06:06
    配置站点使用 https,并且将 http 重定向至 https。 1. nginx 的 ssl 模块安装 查看 nginx 是否安装 http_ssl_module 模块。 $ /usr/local/nginx/sbin/nginx -V ![在这里插入图片描述]...
  • 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...
  • 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证书也是...
  • IIS配置HTTPS

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

    万次阅读 多人点赞 2016-05-05 09:09:34
    Spring Boot中启动HTTPS如果你使用Spring Boot,并且想在内嵌tomcat中添加HTTPS,需要如下步骤 要有一个证书,买的或者自己生成的 在Spring Boot中启动HTTPS 将HTTP重定向到HTTPS(可选) 获取SSL证书有两种方式* ...
  • 最近发现360浏览器访问某个https://网站直接跳转 se://error/ 具体如下 用其他浏览器,例如chrome就可以正常访问那个https网站。所以问题出在浏览器这块了。经过查询资料和测试发现,这个问题的正确解决...
  • 免费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...
  • Tomcat配置SSL证书:开启https访问和强制跳转https  第一次来CSDN,最近在研究内网穿透,了解到了SSL证书与HTTP/HTTPS,今天就给大家分享一下用法心得: 1.开启tomcat的https访问 (修改端口:8080->80, ...
  • 昨天在使用docker 时,将 image 文件从仓库抓取到本地一直报错,经过尝试,终于得以解决。 错误信息如下: [root@archlinux ~]# docker image pull library... Error response from daemon: Get https://registr...
  • Nginx代理https强制http跳转https

    万次阅读 2019-01-10 20:02:02
    所以要将http变成https访问,如果用户用http访问先跳转到https,然后经过Nginx代理后以http的形式访问原来的程序,这样就不需要更改任何的代码了 ; 在配置过程遇到几个小问题,经过多方查询,借鉴很多大佬的宝贵...
  • 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 ...
  • 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 在右上角”产品与服务”->”证书服务” 在证书列表,点击右上角”购买证书”->选择免费证书 返回证书列表, 选择刚刚申请的证书, 点击右边的”补全” 补全资料 等待...
  • curl访问https,下载https文件

    千次阅读 2020-06-10 16:22:16
    curl -k --tlsv1 "https://xxx.com/1.png"

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,909,010
精华内容 1,963,604
关键字:

https