https_httpservletrequest - CSDN
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协议。 如果我们想深入了解这两种互联网上最常用的协议的话,就从这门课程开始吧。 本课程从互联网上最常用的HTTP协议开始,讲解了HTTP协议的报文结构以及报文的...
  • 大家早上好,有段时间没更新文章了。 其实疫情期间在家呆了一个多月的时间不能出门,时间倒是挺多的,我也利用这...随着苹果、Google等各大互联网领头企业纷纷在自己的操作系统、浏览器等主流产品中强制要求使用https

    本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每个工作日都有文章更新。

    大家早上好,有段时间没更新文章了。

    其实疫情期间在家呆了一个多月的时间不能出门,时间倒是挺多的,我也利用这段时间写了几篇新文章。但由于新写的这些文章大都是配合着新书中的内容的,受疫情的影响我写的新书迟迟不能出版,导致这些文章也无法发布,等得我好是焦急。希望疫情早日结束,大家都能快点恢复到正常的生活当中。

    那么今天先发布一篇和Android无关的技术文章。

    https这项技术现在已经应用得非常广泛了。随着苹果、Google等各大互联网领头企业纷纷在自己的操作系统、浏览器等主流产品中强制要求使用https,http的淘汰也正式进入了倒计时。

    其实https对于客户端开发人员来说并没有什么需要特别注意的地方,因为代码和写http请求时并没有什么两样。但也正是因为这个原因,导致许多客户端开发人员对https并不了解,只知道它是安全的加密网络传输,对其具体的工作原理却一无所知。

    那么客户端开发人员到底需不需要了解https呢?我认为还是有一定必要的,掌握了https的工作原理可以帮助你更加有效地理解并解决一些工作当中遇到的问题。另外,有很多公司也喜欢在面试的时候问一些https相关的问题,如果你完全不了解的话,在这里就很容易会被刷掉。

    我自己当初在学习https的时候查阅了很多网上的资料,但是绝大多数的文章写得都不是那么易懂,让不少人对https产生了一些畏惧。我认为要想理解https的工作原理,并不一定非得要知道它方方面面的细节(网上许多文章就是因为写得太细,导致很难懂),其实只要掌握它的整体工作流程,以及搞清楚为什么它能够保证网络通信的安全就可以了。因此,今天我就给大家带来一篇最好懂的https讲解。

    在正式开始讲解https之前我们还得先搞清楚两个概念:什么是对称加密,以及什么是非对称加密?这两个概念都是属于加密学中的基础知识,其实非常好懂。

    对称加密比较简单,就是客户端和服务器共用同一个密钥,该密钥可以用于加密一段内容,同时也可以用于解密这段内容。对称加密的优点是加解密效率高,但是在安全性方面可能存在一些问题,因为密钥存放在客户端有被窃取的风险。对称加密的代表算法有:AES、DES等。

    而非对称加密则要复杂一点,它将密钥分成了两种:公钥和私钥。公钥通常存放在客户端,私钥通常存放在服务器。使用公钥加密的数据只有用私钥才能解密,反过来使用私钥加密的数据也只有用公钥才能解密。非对称加密的优点是安全性更高,因为客户端发送给服务器的加密信息只有用服务器的私钥才能解密,因此不用担心被别人破解,但缺点是加解密的效率相比于对称加密要差很多。非对称加密的代表算法有:RSA、ElGamal等。

    掌握了这两个概念之后,我们就可以开始学习https了。这里先提前抛出一个问题,同时也是面试时可能经常会问到的一个问题:https为了保证数据传输的安全,使用的是对称加密还是非对称加密呢?

    学完本篇文章之后你就能知道答案了。

    首先我们来看一下,传统的http方式在网络传输时存在哪些问题。

    由于我们在传输数据时信息都是明文的,因此很容易出现数据被监听和窃取的情况。示意图如下:

    另外,传输的数据还有可能被一些别有用心的人篡改,导致浏览器与网站收发的内容不一致。示意图如下:

    也就是说,使用http传输数据至少存在着数据被监听以及数据被篡改这两大风险,因此http是一种不安全的传输协议。

    那么解决方案大家肯定都知道是使用https,但是我们先尝试着自己思考一下该如何保证http传输的安全性,进而也就能一步步地理解https的工作原理了。

    既然数据以明文的形式在网络上传输是不安全的,那么我们显然要对数据进行加密才行。刚才提到了,加密方式主要有两种,对称加密和非对称加密。对称加密的优点是加解密效率高,而我们在网络上传输数据是非常讲究效率的,因此这里很明显应该使用对称加密。示意图如下:

    可以看到,由于我们在网络上传输的数据都是密文,所以不怕被监听者获取到,因为他们无法得知原文是什么。而浏览器收到密文之后,只需要使用和网站相同的密钥来对数据进行解密就可以了。

    这种工作机制看上去好像确实保证了数据传输的安全性,但是却存在一个巨大的漏洞:浏览器和网站怎样商定使用什么密钥呢?

    这绝对是一个计算机界的难题,浏览器和网站要使用相同的密钥才能正常对数据进行加解密,但是如何让这个密钥只让它们俩知晓,而不被任何监听者知晓呢?你会发现不管怎么商定,浏览器和网站的首次通信过程必定是明文的。这就意味着,按照上述的工作流程,我们始终无法创建一个安全的对称加密密钥。

    所以,只使用对称加密看来是永远无法解决这个问题了,这个时候我们需要将非对称加密引入进来,协助解决无法安全创建对称加密密钥的问题。

    那么为什么非对称加密就可以解决这个问题呢?我们还是通过示意图的方式来理解一下:

    可以看到,如果我们想要安全地创建一个对称加密的密钥,可以让浏览器这边来随机生成,但是生成出来的密钥不能直接在网络上传输,而是要用网站提供的公钥对其进行非对称加密。由于公钥加密后的数据只能使用私钥来解密,因此这段数据在网络上传输是绝对安全的。而网站在收到消息之后,只需要使用私钥对其解密,就获取到浏览器生成的密钥了。

    另外,使用这种方式,只有在浏览器和网站首次商定密钥的时候需要使用非对称加密,一旦网站收到了浏览器随机生成的密钥之后,双方就可以都使用对称加密来进行通信了,因此工作效率是非常高的。

    那么,上述的工作机制你认为已经非常完善了吗?其实并没有,因为我们还是差了非常关键的一步,浏览器该怎样才能获取到网站的公钥呢?虽然公钥是属于公开的数据,在网络上传输不怕被别人监听,但是如果公钥被别人篡改了怎么办?示意图如下:

    也就是说,只要我们从网络上去获取任何网站的公钥,就必然存在着公钥被篡改的风险。而一旦你使用了假的公钥来对数据进行加密,那么就可以被别人以假的私钥进行解密,后果不堪设想。

    方案设计到这里好像已经进入了死胡同,因为无论如何我们都无法安全地获取到一个网站的公钥,而我们显然也不可能将世界上所有网站的公钥都预置在操作系统当中。

    这个时候,就必须引入一个新的概念来打破僵局了:CA机构。

    CA机构专门用于给各个网站签发数字证书,从而保证浏览器可以安全地获得各个网站的公钥。那么CA机构是如何完成这个艰巨的任务的呢?下面开始一步步解析。

    首先,我们作为一个网站的管理员需要向CA机构进行申请,将自己的公钥提交给CA机构。CA机构则会使用我们提交的公钥,再加上一系列其他的信息,如网站域名、有效时长等,来制作证书。

    证书制作完成后,CA机构会使用自己的私钥对其加密,并将加密后的数据返回给我们,我们只需要将获得的加密数据配置到网站服务器上即可。

    然后,每当有浏览器请求我们的网站时,首先会将这段加密数据返回给浏览器,此时浏览器会用CA机构的公钥来对这段数据解密。

    如果能解密成功,就可以得到CA机构给我们网站颁发的证书了,其中当然也包括了我们网站的公钥。你可以在浏览器的地址栏上,点击网址左侧的小锁图标来查看证书的详细信息,如下图所示。

    得到了公钥之后,接下来的流程就和刚才示意图中所描述的一样了。

    而如果无法解密成功,则说明此段加密数据并不是由一个合法的CA机构使用私钥加密而来的,有可能是被篡改了,于是会在浏览器上显示一个著名的异常界面,如下图所示。

    那么你可能会问了,有了CA机构之后就真的安全了吗?我们在浏览器端要使用CA机构的公钥来解密数据,那么又该如何安全地获取到CA机构的公钥呢?

    这个问题就很好解决了,因为世界上的网站是无限多的,而CA机构总共就那么几家。任何正版操作系统都会将所有主流CA机构的公钥内置到操作系统当中,所以我们不用额外获取,解密时只需遍历系统中所有内置的CA机构的公钥,只要有任何一个公钥能够正常解密出数据,就说明它是合法的。

    Windows系统的内置证书如下:

    但是即使使用CA机构的公钥能够正常解密出数据,目前的流程也还是存在问题的。因为每一家CA机构都会给成千上万的网站制作证书,假如攻击者知道abc.com使用的是某家CA机构的证书,那么他也可以同样去这家CA机构申请一个合法的证书,然后在浏览器请求abc.com时对返回的加密证书数据进行替换。示意图如下:

    可以看到,由于攻击者申请的证书也是由正规CA机构制作的,因此这段加密数据当然可以成功被解密。

    也正是因为这个原因,所有CA机构在制作的证书时除了网站的公钥外,还要包含许多其他数据,用来辅助进行校验,比如说网站的域名就是其中一项重要的数据。

    同样是刚才的例子,如果证书中加入了网站的域名,那么攻击者就只能无功而返了。因为,即使加密数据可以被成功解密,但是最终解密出来的证书中包含的域名和浏览器正在请求的域名对不上,那么此时浏览器仍然会显示异常界面。示意图如下:

    好了,方案设计到这里,其实我们的网络传输就已经做到足够的安全了。当然,这其实也就是https的工作原理。

    那么回到一开始的问题:https使用的是对称加密还是非对称加密呢?答案也很明显了,https使用的是对称加密与非对称加密相结合的方式。

    当然,如果你想继续深入研究,https中还有许许多多的细节值得去挖掘。但是继续写下去的话,这篇文章可能就不再是最好懂的https讲解了,所以我觉得写到这里刚刚好。

    假如你和我一样,主要从事的是客户端方向的开发,那么了解这么多https的知识已经足够应对常见的面试以及工作中遇到的问题了。


    关注我的技术公众号,每天都有优质技术文章推送。

    微信扫一扫下方二维码即可关注:

    展开全文
  • HTTPS详细介绍

    2019-07-12 15:07:18
    一、为什么要HTTPS HTTP协议因为其轻、小、快、简单,所以在全世界普及开来,各种应用都离不开它。但是随着业务复杂度的提高,HTTP的这些优点逐渐成为了短板。所以就开始各种打补丁,比如因为HTTP是无状态的协议,...

    一、为什么要HTTPS

    HTTP协议因为其轻、小、快、简单,所以在全世界普及开来,各种应用都离不开它。但是随着业务复杂度的提高,HTTP的这些优点逐渐成为了短板。所以就开始各种打补丁,比如因为HTTP是无状态的协议,所以为了管理状态而诞生的Cookie。这篇文章要说的是其中一个为了安全而诞生的超级补丁SSL(HTTPS)。

    1. HTTP在安全方面哪儿不行

    1. 窃听
      HTTP使用明文进行传输,因此传输内容可能会被窃听。以太网工作方式是将要发送的数据包发往连接在一起的所有主机。在包头中包括有应该接收数据包的主机的正确地址,因为只有与数据包中目标地址一致的那台主机才能接收到信息包,但是当主机工作在监听模式下的话不管数据包中的目标物理地址是什么,主机都将可以接收到。
    2. 伪装
      HTTP协议中不管是请求还是响应都不会对客户端和服务器的身份进行确认。在HTTP协议通信时,任何人都可以发起请求,服务器只要接收到请求,不管对方是谁都会返回一个响应(当然,可以在服务端对IP或者端口进行限制)。因此,可能服务器或者客户端并不是我们想象中的对方。而且,对于无意义的请求服务器也会照单全收,可能会遭遇DoS攻击。
    3. 篡改
      对于信息的准确性我们可以用一个专业术语—报文完整性来说明,由于HTTP无法验证通信报文的完整性,因此,在请求或者响应发送之后到接收这段时间内,传输的内容可能已经被篡改(中间人攻击)。

    2. HTTPS呢

    1. 防止被窃听—加密
      加密分为两种,首先是对通信的加密,HTTP协议中没有加密机制,但是可以通过外挂的方式对通信进行加密,通过和SSL或TLS的组合使用,可以加密HTTP的通信内容。其次是对内容的加密,在这种情况下,客户端和服务器需要对发送的内容进行加密解密操作。另外,由于该方法不像SSL和TLS一样对整个通信线路进行加密,虽然内容不会被窃听,但是可能会被篡改。此外,加密分为对称加密和非对称加密。HTTPS当然是使用最复杂的混合加密机制(对称加密和非对称加密一起使用)(SSL、TLS、对称和非对称加密稍后会介绍)。
    2. 防止遭遇伪装—证书
      借助刚刚提到的SSL,它不仅提供加密处理,还提供了用于确认通信双方身份的东西—证书。证书是由大家都信任的第三方机构颁发的,用来证明服务器或者客户端是实际存在的。
    3. 防止被篡改—摘要
      借助与SSL提供的认证、加密和摘要功能,这些功能组合起来可以有效检测传输内容的完整性。当然,HTTP本身就带有MD5和SHA-1等散列值校验的方法,但是并不可靠。

    因此,可以说HTTPS就是穿着SSL马甲的HTTP

    二、SSL,TLS,对称加密,非对称加密,证书都是什么鬼

    SSL和TLS

    TLS是以SSL为原型开发的协议,有时会统一称为SSL协议。
    HTTPS并不是应用层的一种新协议,只是普通HTTP协议在接口部分使用SSL(Secure Socket Layer,安全套接层)和TLS(Transport Layer Security,安全传输层)协议而已。
    通常,HTTP直接与tcp协议进行通信,当使用SSL时,则HTTP先和SSL通信,再由SSL和TCP进行通信,SSL是独立于HTTP的协议,所以除了HTTP以外,其他应用层协议也可以和SSL配合使用(如SMTP和Telnet)。

    对称和非对称加密

    这里的对称描述的是加解密的密钥,如果加密和解密密钥相同,则是对称加密,反之则是非对称加密。下面说一下两种加密方式的优缺点(只是针对用在HTTPS协议方面的优缺点),具体的加密算法有很多,感兴趣的推荐看一下《现代密码学趣味之旅》,一本科普一样的密码书,不像其他密码书那样全是数学晦涩难懂。

    1. 对称加密和非对称加密优缺点
      对称加密因为加解密使用的是同一密钥,相对非对称加解密使用不同密钥,对称加密对CPU资源的消耗会更少,速度会更快,更适合大量数据的加密。但是对称加密需要将密钥发送给通信的另一方,如果密钥在传输过程中被截获,那就白忙活了。所以这时候就需要非对称加密发挥优势了,非对称加密可以用来传输对称加密的密钥!
    2. HTTPS混合加密机制
      HTTPS当然使用复杂的混合加密机制(对称加密和非对称加密一起使用)。其实对称加密已经够用,只是有一个问题,对称加密的密钥如何发送给通信的另一方。我们把信息装进一个带锁的箱子了,并把箱子发送给另一方,对方如何打开箱子才是问题的关键。这一过程也叫做密钥交换。混合加密机制就是在密钥交换阶段使用非对称加密方式,之后使用对称加密方式进行传输。

    证书

    即使使用上述的非对称加密方式进行加密,还是有一个问题,那就是无法确认公开的密钥就是货真价实的通信对方的公开密钥。有可能公钥在传输过程中已经被攻击者替换掉了。
    为了解决这个问题,证书应运而生。证书也叫公开密钥证书,是由数字证书认证机构(CA,Certificate Authority)和其相关机构颁发的。以下是数字证书认证机构的业务流程:

    1. 服务器的运营人员向数字证书认证机构提出公钥申请。
    2. 认证机构在判明申请者的身份之后,对已申请的公钥做数字签名(非对称加密使用私钥进行加密叫数字签名)。
    3. 认证机构分配这个已签名的公钥,并将该公钥放入公钥证书后绑定在一起。
    4. 服务器将证书发送给客户端,客户端使用认证机构的公钥解开证书,进行验证。

    这里有一个比较棘手的问题,认证机构的公钥如何发送给客户端?一般现在主流浏览器都是在内部植入了认证机构的公钥。
    还有一点就是客户端也有证明身份的客户端证书,比如银行的网银网盾。

    三、整个过程走一遍

    一般面试的时候面试官都喜欢问HTTPS的整个通信步骤。

    1. 请求由客户端发起。客户端发送Client Hello报文开始SSL通信。报文中包含了SSL的版本,加密组件等信息。
    2. 服务器收到请求会以Server Hello报文作为应答,报文内容和请求时差不多(经过筛选的)。
    3. 紧接着服务器再发送一条Certificate报文,报文中包含了证书。
    4. 服务器活还没干完,还需要发送Server Hello Done报文给客户端,表示SSL握手结束。
    5. 然后该客户端了,客户端会回应一个Client Key Exchange报文,报文包含用步骤3中公钥加密后的随机密码串。
    6. 接着客户端继续发送Cipher Spec报文,提示服务器,用步骤5的随机密码串作为密钥加密之后的通信。
    7. 然后客户端发送Finished报文,表示这次协商结束,是否成功还得看服务器能不能解密该报文。
    8. 服务器没问题,发送Change Cipher Spec报文。
    9. 服务器发送Finished。
    10. SSL连接完成,接下来使用HTTP进行通信。
    11. 最后由客户端断开连接。发送close_notify报文。
    展开全文
  • 为什么需要但是为什么要讲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-仿微信消息列表
    面试必备操作系统

    展开全文
  • HTTP和HTTPS详解。

    2018-10-30 17:35:29
    一,HTTP和HTTPS基本概念 深入学习某个东西时,我们先来从维基百科上看看它俩的概念。  HTTP:超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用...

    福利:看本文之前,推荐给大家一个阿里云双11活动,真的非常非常非常推荐,对于新人福利,阿里云这次真的是下血本了,建议阿里云新人一定一定一定不要错过。如果觉得这单纯是广告的话(阿里云肯找我做广告就好了,嘿嘿),你可以直接跳过看正文。
    阿里云双11最新活动(仅限阿里云新用户购买,老用户拉新用户可以获得返现红包,后续有机会平分百万红包),优惠力度非常非常非常大,另外加入拼团,后续还有机会平分100w红包!目前我的战队已经有40多位新人了,现在是折上5折了也就是1折购买,已经达到了最低折扣!!!!!!。 划重点了: 1核2G云服务器1年仅需99.5元!!!1核2G云服务器3年仅需298.50元!!!一个月仅需8.2元 该折扣仅限新人!这是我的拼团团队地址:https://m.aliyun.com/act/team1111/#/share?params=N.FF7yxCciiM.hf47liqn

    ###一,HTTP和HTTPS基本概念
      深入学习某个东西时,我们先来从维基百科上看看它俩的概念。
      HTTP:超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议[1]。HTTP是万维网的数据通信的基础。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。
      HTTPS:超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为HTTP over TLS,HTTP over SSL或HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。这个协议由网景公司(Netscape)在1994年首次提出,随后扩展到互联网上。历史上,HTTPS连接经常用于万维网上的交易支付和企业信息系统中敏感信息的传输。在2000年代晚期和2010年代早期,HTTPS开始广泛使用于保护所有类型网站上的网页真实性,保护账户和保持用户通信,身份和网络浏览的私密性。
    ###二,HTTP和HTTPS的差异
      1,从上面概念也可以看出来HTTP是不安全的,且攻击者通过监听和中间人攻击等手段,可以获取网站帐户和敏感信息等。HTTPS被设计为可防止前述攻击,并在正确配置时被认为是安全的。
      2,HTTP的URL由“http://”起始且默认使用端口80,而HTTPS的URL由“https://”起始且默认使用端口443。
      3,HTTP协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。
      1)对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等;
      2)非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。
      TLS/SSL
    ###三,HTTPS工作原理
    ####下面看一下网站访问过程:
      大家很明显发现目前大部分网站使用的还是http协议,下面我们通过一个图片很容易的了解一下网站访问的一个过程。
    网站访问过程
    ####了解完网站访问后我们来看一下使用HTTPS的工作原理
    这里写图片描述

    (1)客户使用HTTPS的URL访问Web服务器,要求与Web服务器建立SSL连接。
      (2)Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
      (3)客户端的浏览器与Web服务器开始协商SSL/TLS连接的安全等级,也就是信息加密的等级。
      (4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
      (5)Web服务器利用自己的私钥解密出会话密钥。
      (6)Web服务器利用会话密钥加密与客户端之间的通信。
    ####从上面可以总结出HTTPS的优点:
      (1)客户端产生的密钥只有客户端和服务器端能得到;
      (2)加密的数据只有客户端和服务器端才能得到明文;
      (3)客户端到服务端的通信是安全的。
      另外谷歌曾在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”。
    ###四,HTTPS的局限/缺点
      我们说了这么多HTTPS的优点,难道它就没有缺点或者说是局限吗?当然有,毕竟万物不可完美!
      1,HTTPS比HTTP耗费更多服务器资源(https其实就是建构在SSL/TLS之上的 http协议,所以要比较https比http多用多少服务器资源,主要看SSL/TLS本身消耗多少服务器资源。)
    这里写图片描述
      2,耗费的资源多,过程也复杂,想当然访问不如HTTP高效。大流量网站非必要也不会采用,流量成本太高。
      3,HTTPS并不能防止站点被网络蜘蛛抓取。在某些情形中,被加密资源的URL可仅通过截获请求和响应的大小推得,这就可使攻击者同时知道明文(公开的静态内容)和密文(被加密过的明文),从而使选择密文攻击成为可能。
      4,SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。
      5,SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。

    展开全文
  • 吐槽一下,看微信支付小微商户的开发文档头都大了,什么是平台证书、什么是商户证书...... 一、获取商户证书 二、获取平台证书
  • 请求URL: https://api.mch.weixin.qq.com/v3/payscore/user-service-state?service_id={service_id}&appid={appid}&openid={openid} 请求方式:get 请求示例: ...
  • 目标 能够说出WebAPIs阶段与JavaScript语法阶段的关联性 能够说出什么是API 能够说出什么是Web API 1. Web APIs 和 JS 基础关联性 1.1 JS 的组成 1.2 JS 基础阶段以及 Web APIs 阶段 ...2. API 和 Web API ...
  • 支付宝接入程序

    2019-04-23 10:05:33
    登录蚂蚁金服 开放平台:https://open.alipay.com/platform/home.htm 创建应用,类型是:网页&移动应用 设置应用的RSA 等各项参数,界面如下: 配置应用网关,授权回调地址(授权地址为url,部署机需做内网穿透) ...
  • HTTP与HTTPS介绍 HTTPS和HTTP的主要区别 客户端在使用HTTPS方式与Web服务器通信时的步骤 CA证书的申请及其使用过程 HTTPS的缺点 SSL与TLS的区别? SSL/TLS历史 SSL/TLS协议的基本过程 HTTPS涉及的计算环节 ...
  • http协议与https协议

    2018-07-15 16:10:09
    它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,RFC 1945定义了HTTP/1.0版本。其中最著名的就是RFC ...
  • HTTPS基础知识:HTTPS (Secure Hypertext Transfer Protocol)安全超文本传输协议,是一个安全通信通道,它基于HTTP开发用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说它是...
  • https到底对http干了什么?
  • 为什么要用HTTPS   网站没有使用HTTPS的时候,浏览器一般会报不安全,而且在别人访问这个网站的时候,很有可能会被运营商劫持,然后在网站里显示一些莫名其妙的广告。   有HTTPS的时候,通俗地讲所有的数据...
  • 当您尝试访问Https打头的网页时,出现错误。 原因: 计算机中的一些设置阻碍了浏览器打开Https网页。 解决方案: 请您尝试打开: [Internet选项],在“高级”选项卡中的列表中选择上[使用SSL2.0]和[使用SSL...
  • 网站使用https协议
  • 近几年,互联网发生着翻天覆地的变化,尤其是我们一直习以为常的HTTP协议,在逐渐的被HTTPS协议所取代,在浏览器、搜索引擎、CA机构、大型互联网企业的共同促进下,互联网迎来了“HTTPS加密时代”,HTTPS将在未来的...
  • 很多文章对客户端https的使用都是很模糊的,不但如此,有些开发者直接从网上拷贝一些使用https的“漏洞”代码,无形之中让客户端处在一种高风险的情况下。今天我们就对有关https使用的问题进行深入的探讨,希望能...
  • 之前写了一篇https的介绍,这里,文中从软件学公理一步步推导出https的实现原理,但是貌似在后面一部分出现了某种概念断层,就是在“服务器如何认证浏览器”这一点上没有安全的保证。后来仔细研究了一下,原来并不是...
  • 本文大部分内容摘自:...----------------------------------专栏导航----------------------------------HTTPS协议详解(一):HTTPS基础知识 HTTPS协议详解(二):TLS/SSL工作原理HTTPS协议...
1 2 3 4 5 ... 20
收藏数 12,427,976
精华内容 4,971,190
关键字:

https