HTTPS简介

转载请注明出处:https://blog.csdn.net/binbinqq86/article/details/80939838

前言

说到HTTPS,就得首先了解几个相关概念:HTTP、SSL/TLS、CA、对称加密和非对称加密。

HTTP就是超文本传输协议,全称“HyperText Transfer Protocol”。这个从我们第一天上网就知道,浏览任何网站几乎都是以这个开头输入到浏览器里,然后就可以看我们想看的东西了,这里面包含了图片,脚本,各种样式等等。HTTP 的底层协议使用的是TCP协议,只不过一个是应用层,一个是传输层。还有很多应用层协议比如“FTP、SMTP、POP、IMAP”等都是使用的TCP协议。

SSL是英文“Secure Sockets Layer”的缩写,也就是安全套接层,由网景公司1995年发布,后改名为TLS,英文为“Transfer Layer Secure”,两者其实就是一个东西的不同版本。目前常用的版本TLS1.2

CA就是“Certificate Authority”的缩写,也就是证书授权中心。它是负责管理和签发证书的第三方机构

对称加密可以理解为某种可以互逆的数学运算,加密和解密用到的是同一个密钥,它可以把明文变密文,密文变明文,所以这个密钥是至关重要的。而非对称加密就是一对密钥,加密和解密用到的是不同的钥匙,比如用这对密钥里的公钥加密,则只有里面的私钥才能解密,反之亦然,而且是几乎不可能被暴力破解的,可以说非常安全,但同时需要涉及到复杂的数学问题,性能上通常要差很多(相对于对称加密而言)

HTTPS就是我们今天的主角,用到了上面所提到的所有的知识点。设计HTTPS就是为了解决HTTP在传输过程中的信息不安全的问题,HTTPS就是HTTP+SSL/TLS,保证在传输过程中信息不被篡改,窃取。下面我们就来分析一下HTTPS的传输过程。

第一步:
服务端首先去CA机构申请一个证书,里面包含了一对基于非对称加密算法的密钥:privateKey、publicKey,然后部署这两个文件在服务器。
第二步:
客户端向服务器发出请求,服务端把publicKey发送到客户端
第三步:
客户端随机生成一对对称加密密钥key,然后用服务器发送过来的publicKey去加密该密钥,得到key’,然后把key’发送给服务器,
第四步:
服务器收到key’,用自己的privateKey去解密,得到其中的key,这样服务器和客户端都拥有了进行私密通信的密钥key,而这个密钥不被任何第三方所知,两者就可以安全地进行接下来的数据传输了。

整个过程中,客户端需要对服务器发送过来的CA证书进行合法性验证,如果缺少这一步,就会产生中间人攻击(MITM),比如中间人在第二步的时候截获服务器发送给客户端的publicKey,然后自己伪装成服务器,随机生成一对非对称加密密钥,把自己的公钥发送给客户端,这个时候客户端如果不进行CA证书的校验,就会直接用中间人发送过来的公钥来加密自己的密钥,然后在发送给服务器的过程中,再被中间人截获,中间人用自己的私钥解密这个客户端的密钥,然后中间人再伪装成客户端,用真正的服务器公钥加密自己截获的密钥,发送给服务器,这样就神不知鬼不觉的完成了一次偷梁换柱,由此可见CA证书的合法性验证是多么的重要。

验证CA证书分为两种方式,一种是单向验证,一种是双向验证。

单向验证:服务器部署证书,客户端内置服务器的证书,然后在交换密钥的过程中进行证书的比对,如果不同则断开连接,那么此时再遭遇中间人攻击的时候,由于黑客没有相应的证书,就会造成连接失败,避免攻击。(即使黑客破解app,拿到证书,由于没有匹配的公钥和私钥,仍然无法实现中间人攻击)


双向验证:这种就更加安全了,用到的情况不多,一般都是金融行业等对安全性要求很高的企业才会使用。其实就是客户端校验服务器证书,同时服务器也需要校验客户端的证书,服务器和客户端分别放置两个不同的证书去等待对方验证,两者都通过验证后才会进行后续的通信。

虽然HTTPS在传输过程中确保了数据的加密和传输的加密,但是使用charles,fiddler等抓包工具仍然可以看到原始数据信息,如果要做到更进一步的安全,还需要对数据本身进行一个混淆加密,比如登陆密码之类的。

好了,今天的讲解就结束了,还有不明白的小伙伴可以在下方留言~

参考文章:

1.https://blog.csdn.net/qq_20521573/article/details/79233793
2.https://blog.csdn.net/PTkin/article/details/50563831
3.https://www.jianshu.com/p/e4fd0ba780a5
4.https://segmentfault.com/a/1190000012466003

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值