Https加密及攻防

欢迎进入我的博客:blog.scarlettbai.com查看更多文章

    最近公司用到了Https,出于好奇,研究了下Https加密过程,现在记录下。

    众所周知,Http协议传输数据都是未加密的,因此非常不安全。于是网景公司设计了SSL协议用于对Http传输的内容进行加密,以达到更安全的信息交互效果,首先我们看一张图:

Https加密及攻防_第1张图片

由图中可以看到,TLS/SSL是工作在TCP协议之上的,应用层不再直接发送数据给TCP(Http协议直接发给TCP),而是将数据发给TLS/SSL加密后再发送给TCP,以达到对信息的加密。

接下来我们看看使用Https时的握手动作:
Https加密及攻防_第2张图片

1. 客户端发起HTTPS请求

   客户端发起Https请求连接到服务端的443端口(Http连接80端口)。

2. 服务器发送证书给客户端

   服务器将自己申请或生成的证书(即一组公钥和私钥)中的公钥返回给客户端,公钥中包含证书颁发机构、过期时间、证书绑定的域名等。

3. 客户端解析证书并返回随机值(私钥)给服务器

   这部分工作是由客户端的TLS/SSL来完成的,首先会验证公钥是否有效,如颁发机构,过期时间以及绑定域名是否与访问域名不一致,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题或用户选择继续浏览,那么就生成一个随即值,然后用证书对该随机值进行加密,之后发送给服务器。

4. 服务端解密信息并返回数据

   服务器根据证书的私钥解密客户端发送的消息,得到客户端发送的私钥,之后将要返回的内容根据私钥进行对称加密返回给客户端,客户端需要根据私钥解密才能获取到消息内容。所以如果获取不到私钥的话,几乎是破解不了消息的,以此来达到信息传递的安全性。

tips:

1)对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等;

2)非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。

看完了Https传输过程,下面介绍下我们常见的一些针对Https的攻击方式以及防范方法:

一:SSL劫持攻击

    SSL劫持攻击也就是TLS/SSL证书欺骗攻击,攻击者需要先将自己接入到浏览器与目标网站之间,在传输工程中,用自己的证书替换掉服务端发给浏览器的证书,这样的话攻击者对于浏览器返回的数据就能根据自己的证书的私钥进行解密以获取明文的数据,不过这种方式有个很明显的漏洞,就是替换掉证书后,浏览器方对于证书验证会不通过,会提示用户,此时只要用户选择不继续浏览攻击者就不能成功获取到用户数据了。

tips:浏览器校验证书失败的原因,浏览器会校验:1.SSL证书不是由受信任的CA机构颁发的2.证书过期3.访问的网站域名与证书绑定的域名不一致。 在上列中劫持者的伪造证书即便满足了1和2,也绝不可能满足3,故这种方式肯定会证书校验失败。

二:SSLStrip攻击

    SSLStrip攻击中攻击者会劫持服务器的消息,并将其域名由Https换为Http协议,如服务器返回https://blog.scarlettbai.com,劫持者会将其替换为:Http://blog.scarlettbai.com,于是用户就会跳转到一个Http的地址,在这个地址上发送消息时劫持者就可以劫持到用户的明文数据了。这个最好的解决方案就是服务端对于请求做Https强转,即可解决


欢迎关注个人微信公众号:读书健身编程

Https加密及攻防_第3张图片

你可能感兴趣的:(加密,ssl,http协议,安全)