http协议属于明文传输协议,交互过程以及数据传输都没有进行加密,通讯双方也没有进行任何认证,通讯过程很是容易遭遇劫持、监听、篡改,严重状况下,会形成恶意的流量劫持等问题,甚至形成我的隐私泄露(好比银行卡卡号和密码泄露)等严重的安全问题。html
能够把http通讯比喻成寄送信件同样,A给B寄信,信件在寄送过程当中,会通过不少的邮递员之手,他们能够拆开信读取里面的内容(由于http是明文传输的)。A的信件里面的任何内容(包括各种帐号和密码)都会被轻易窃取。除此以外,邮递员们还能够伪造或者修改信件的内容,致使B接收到的信件内容是假的。git
好比常见的,在http通讯过程当中,“中间人”将广告连接嵌入到服务器发给用户的http报文里,致使用户界面出现不少不良连接; 或者是修改用户的请求头URL,致使用户的请求被劫持到另一个网站,用户的请求永远到不了真正的服务器。这些都会致使用户得不到正确的服务,甚至是损失惨重。算法
要解决http带来的问题,就要引入加密以及身份验证机制。浏览器
若是Server(之后简称服务器)给Client(之后简称 客户端)的消息是密文的,只有服务器和客户端才能读懂,就能够保证数据的保密性。同时,在交换数据以前,验证一下对方的合法身份,就能够保证通讯双方的安全。那么,问题来了,服务器把数据加密后,客户端如何读懂这些数据呢?这时服务器必需要把加密的密钥(对称密钥,后面会详细说明)告诉客户端,客户端才能利用对称密钥解开密文的内容。可是,服务器若是将这个对称密钥以明文的方式给客户端,仍是会被中间人截获,中间人也会知道对称密钥,依然没法保证通讯的保密性。可是,若是服务器以密文的方式将对称密钥发给客户端,客户端又如何解开这个密文,获得其中的对称密钥呢?缓存
说到这里,你们是否是有点儿糊涂了?一下子密钥,一下子对称密钥,都有点儿被搞晕的节奏。在这里,提早给你们普及一下,这里的密钥,指的是非对称加解密的密钥,是用于TLS握手阶段的; 对称密钥,指的是对称加解密的密钥,是用于后续传输数据加解密的。下面将详细说明。安全
这时,咱们引入了非对称加解密的概念。在非对称加解密算法里,公钥加密的数据,有且只有惟一的私钥才可以解密,因此服务器只要把公钥发给客户端,客户端就能够用这个公钥来加密进行数据传输的对称密钥。客户端利用公钥将对称密钥发给服务器时,即便中间人截取了信息,也没法解密,由于私钥只部署在服务器,其余任何人都没有私钥,所以,只有服务器才可以解密。服务器拿到客户端的信息并用私钥解密以后,就能够拿到加解密数据用的对称密钥,经过这个对称密钥来进行后续通讯的数据加解密。除此以外,非对称加密能够很好的管理对称密钥,保证每次数据加密的对称密钥都是不相同的,这样子的话,即便客户端病毒拉取到通讯缓存信息,也没法窃取正常通讯内容。服务器
可是这样彷佛还不够,若是通讯过程当中,在三次握手或者客户端发起HTTP请求过程当中,客户端的请求被中间人劫持,那么中间人就能够假装成“假冒客户端”和服务器通讯;中间人又能够假装成“假冒服务器”和客户端通讯。接下来,咱们详细阐述中间人获取对称密钥的过程:网络
中间人在收到服务器发送给客户端的公钥(这里是“正确的公钥”)后,并无发给客户端,而是中间人将本身的公钥(这里中间人也会有一对公钥和私钥,这里称呼为“伪造公钥”)发给客户端。以后,客户端把对称密钥用这个“伪造公钥”加密后,发送过程当中通过了中间人,中间人就能够用本身的私钥解密数据并拿到对称密钥,此时中间人再把对称密钥用“正确的公钥”加密发回给服务器。此时,客户端、中间人、服务器都拥有了同样的对称密钥,后续客户端和服务器的全部加密数据,中间人均可以经过对称密钥解密出来。并发
为了解决此问题,咱们引入了数字证书的概念。服务器首先生成公私钥,将公钥提供给相关机构(CA),CA将公钥放入数字证书并将数字证书颁布给服务器,此时服务器就不是简单的把公钥给客户端,而是给客户端一个数字证书,数字证书中加入了一些数字签名的机制,保证了数字证书必定是服务器给客户端的。中间人发送的伪造证书,不可以得到CA的认证,此时,客户端和服务器就知道通讯被劫持了。函数
流加密是将消息做为字节流对待,而且使用数学函数分别做用在每个字节位上。使用流加密时,每加密一次,相同的明文位会转换成不一样的密文位。流加密使用了密钥流生成器,它生成的字节流与明文字节流进行异或,从而生成密文。
分组加密是将消息划分为若干个分组,这些分组随后会经过数学函数进行处理,每次一个分组。假设使用64位的分组密码,此时若是消息长度为640位,就会被划分红10个64位的分组(若是最后一个分组长度不到64,则用0补齐以后加到64位),每一个分组都用一系列数学公式进行处理,最后获得10个加密文本分组。而后,将这条密文消息发送给对端。对端必须拥有相同的分组密码,以相反的顺序对10个密文分组使用前面的算法解密,最终获得明文消息。比较经常使用的分组加密算法有DES、3DES、AES。其中DES是比较老的加密算法,如今已经被证实不安全。而3DES是一个过渡的加密算法,至关于在DES基础上进行三重运算来提升安全性,但其本质上仍是和DES算法一致。而AES是DES算法的替代算法,是如今最安全的对称加密算法之一。
优势:计算量小、加密速度快、加密效率高。
缺点:
在非对称密钥交换算法出现之前,对称加密的最主要缺陷就是不知道如何在通讯双方之间传输对称密钥,而又不让中间人窃取。非对称密钥交换算法诞生以后,专门针对对称密钥传输作加解密,使得对称密钥的交互传输变得很是安全了。
非对称密钥交换算法自己很是复杂,密钥交换过程涉及到随机数生成,模指数运算,空白补齐,加密,签名等等一系列极其复杂的过程,。常见的密钥交换算法有RSA,ECDHE,DH,DHE等算法。涉及到比较复杂的数学问题。其中,最经典也是最经常使用的是RSA算法。
RSA:诞生于1977年,通过了长时间的破解测试,算法安全性很高,最重要的是,算法实现很是简单。缺点就是须要比较大的质数(目前经常使用的是2048位)来保证安全强度,极其消耗CPU运算资源。RSA是目前惟一一个既能用于密钥交换又能用于证书签名的算法,RSA 是最经典,同时也是最经常使用的是非对称加解密算法。
(1)CPU计算资源消耗很是大。一次彻底TLS握手,密钥交换时的非对称解密计算量占整个握手过程的90%以上。而对称加密的计算量只至关于非对称加密的0.1%。若是后续的应用层数据传输过程也使用非对称加解密,那么CPU性能开销太庞大,服务器是根本没法承受的。赛门特克给出的实验数据显示,加解密同等数量的文件,非对称算法消耗的CPU资源是对称算法的1000倍以上。
(2)非对称加密算法对加密内容的长度有限制,不能超过公钥长度。好比如今经常使用的公钥长度是2048位,意味着待加密内容不能超过256个字节。
因此非对称加解密(极端消耗CPU资源)目前只能用来做对称密钥交换或者CA签名,不适合用来作应用层内容传输的加解密。
一、客户端的浏览器向服务器传送客户端SSL 协议的版本号,加密算法的种类,产生的随机数,以及其余服务器和客户端之间通信所须要的各类信息。
二、服务器向客户端传送SSL 协议的版本号,加密算法的种类,随机数以及其余相关信息,同时服务器还将向客户端传送本身的证书。
三、客户利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过时,发行服务器证书的CA 是否可靠,发行者证书的公钥可否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。若是合法性验证没有经过,通信将断开;若是合法性验证经过,将继续进行第四步。
四、用户端随机产生一个用于后面通信的“对称密码”,而后用服务器的公钥(服务器的公钥从步骤②中的服务器的证书中得到)对其加密,而后将加密后的“预主密码”传给服务器。
五、服务器和客户端用相同的主密码即“通话密码”,一个对称密钥用于SSL 协议的安全数据通信的加解密通信。同时在SSL 通信过程当中还要完成数据通信的完整性,防止数据通信中的任何变化。
六、服务器向客户端发出信息,指明后面的数据通信将使用的步骤5中的主密码为对称密钥,同时通知客户端服务器端的握手过程结束。
七、SSL 的握手部分结束,SSL 安全通道的数据通信开始,客户和服务器开始使用相同的对称密钥进行数据通信,同时进行通信完整性的检验。
客户端向服务器发起HTTPS请求
Charles拦截客户端的请求,假装成客户端向服务器进行请求
服务器向“客户端”(其实是Charles)返回服务器的CA证书
Charles拦截服务器的响应,获取服务器证书公钥,而后本身制做一张证书,将服务器证书替换后发送给客户端。(这一步,Charles拿到了服务器证书的公钥)
客户端接收到“服务器”(其实是Charles)的证书后,生成一个对称密钥,用Charles的公钥加密,发送给“服务器”(Charles)
Charles拦截客户端的响应,用本身的私钥解密对称密钥,而后用服务器证书公钥加密,发送给服务器。(这一步,Charles拿到了对称密钥)
服务器用本身的私钥解密对称密钥,向“客户端”(Charles)发送响应
Charles拦截服务器的响应,替换成本身的证书后发送给客户端
至此,链接创建,Charles拿到了 服务器证书的公钥 和 客户端与服务器协商的对称密钥,以后就能够解密或者修改加密的报文了。
HTTPS抓包的原理仍是挺简单的,简单来讲,就是Charles做为“中间人代理”,拿到了 服务器证书公钥 和 HTTPS链接的对称密钥,前提是客户端选择信任并安装Charles的CA证书,不然客户端就会“报警”并停止链接。这样看来,HTTPS仍是很安全的。
一、安装抓包工具charles
二、在电脑安装证书
三、查看IP地址和端口
四、手机wifi配置电脑代理地址和端口(注意:电脑的IP地址与手机WIFI所链接的须要在同一局域网,否则会链接不上)
五、手机浏览器输入网址http://chls.pro/ssl网址下载charles证书
六、就能够开始抓包了
七、若是还不能抓包,把电脑防火墙关闭试一下看看,若是还不行,根据问题百度