美文网首页
浅析HTTPS

浅析HTTPS

作者: Sherlock丶Aza | 来源:发表于2021-04-07 10:23 被阅读0次

      日常开发中几乎所有的程序猿(媛)们都知道HTTPS是用来客户端和服务器进行的一种安全连接,可以有效的保证内容信息安全,防止被抓包,那怎么保证信息安全的呢?很多人又会说加密,不得不承认说的没错,是利用加密方式进行的非明文传输,但是最后的问题来了,这怎么进行加密解密的呢?真正了解原理的人就少了很多,下面的内容就是为了丰(用)(来)(装)(比)知识面准备的!

    什么是HTTPS

      HTTPS可以理解为HTTPS = HTTP+SSL/TLS,HTTPS的核心基础就是SSL,只要弄懂了SSL就知道HTTPS怎么工作的了。

    加密算法

      下面请允许我嘚(装)(比)一下公元前400年,古希腊人就发明了置换密码;在第二次世界大战期间,德国军方启用了“恩尼格玛”密码机,所以密码学在社会发展中有着广泛的用途。嘚(装)瑟(比)结束。
      加密算法基本上可以分为两种类型:

    对称加密

      什么是对称加密呢?简单的理解就是双方都共同拥有一个密钥,然后通过这个密钥进行加密和解密,这种加密方式优点就是速度快,但是安全性不高,不能说不高,只是没有非对称加密高。
    举个栗子:

    我们大家都看过谍战片吧,尤其是抗日战争时期的谍战片简直就是霸屏了,什么手撕鬼子,手榴弹炸飞机啊什么的各种洗脑!其中有些情节一定很熟悉,那就是情报!地下情报员和情报处之间进行情报交流的时候,往往都不是通过非明文传输信息,他们有一个共同的密钥就是一本书,什么三国演义啊,论语啊,葵花宝典啊,通过这本书(前提是这本书是一样的,盗版就废了)双方就能获得相同的信息,如果过程中被别人窃取了情报,如果不知道葵花宝典这本密钥的话,他是不会得到真正的信息。
    这就是所谓的对称加密和解密,但是安全性不是很高,你想想,如果葵花宝典这本书泄漏给了小鬼子,小鬼子拿到咱们的情报,是不是后果不堪设想了!

    非对称加密

      非对称加密有两个重要的角色,公钥私钥,一般遵循这样一个原则,公钥加密私钥解密
    举个栗子:
    A和B两家公司,需要交流重要信息(比如交易金额发起和交易结果通知)。A需要保证自己的发起金额准确,必须进行信息加密,B公司是实际金额的操作者(帮A公司代收代付),A使用B给的公钥加密数据,B使用自己的私钥解密执行金额交易。这样只有和B公司合作的并持有B公司发放的公钥才能发起交易。反之,A公司也只识别给了公钥的B公司加密的数据。这样就是最基本的非对称加密的用法。但是有一个新的问题是,假如同样持有B公司公钥的C公司模拟或从中修改了A公司发起数据并加密传给了B,B不知道是C伪造的执行了操作就会给A带来经济损失。所以新的问题出现了:身份认证和信息完整性必须验证!

    CA证书

      为了解决上边说到防止被劫持问题,必须进行必要的身份认证和信息完整性认证,这就说到了CA证书,CA证书其实就是数字证书,是有权威机构颁发的,浏览器和Android手机都内置了几百个公认的证书,有些项目需要自己申请自签名的证书,用于项目使用,但是不管什么证书,都需要CA权威机构颁发的,里边包括以下内容:

    1. 证书的发布机构
    2. 证书的有效期
    3. 证书的所有者
    4. 证书的数字签名和签名的Hash算法
    5. 证书的公钥
    6. ......

    先说下客户端校验CA证书的方法

    校验方法

    1. 首先客户端读取证书中的证书所有者、有效期等信息进行一一校验
    2. 客户端开始查找操作系统中已内置的受信任的证书发布机构CA,与服务器发来的证书中的颁发者CA比对,用于校验证书是否为合法机构颁发
    3. 如果找不到,客户端就会报错,说明服务器发来的证书是不可信任的。
    4. 如果找到,那么客户端就会从操作系统中取出 颁发者CA 的公钥,然后对服务器发来的证书里面的签名进行解密得到hash-a
    5. 客户端使用相同的hash算法计算出服务器发来的证书的hash值hash-b,将这个计算的hash值与证书中签名做对比。
    6. 对比结果一致,则证明服务器发来的证书合法,没有被冒充

    知道以上内容,我们就来详细的看一下解决身份认证和信息完整性验证的具体过程,也称为HTTPS的中SSL握手建立过程,如下图所示:


    image
    1. 比如我们用浏览器打开一个网页 https://www.baidu.com ,这时,浏览器就是客户端 A ,百度的服务器就是服务器 B 了。这时候客户端 A 会生成一个随机数(1),把随机数(1) 、自己支持的 SSL 版本号以及加密算法等这些信息告诉服务器 B 。
    2. 服务器 B 知道这些信息后,然后确认一下双方的加密算法,然后服务端也生成一个随机数(2) ,并将随机数(2)CA颁发给自己的证书一同返回给客户端 A 。
    3. 客户端 A 得到 CA 证书后,会去校验该 CA 证书的有效性,校验方法在上边说过了。校验通过后,客户端生成一个随机数(3) ,然后用证书中的公钥加密随机数(3) 并传输给服务端 B 。
    4. 服务端 B 得到加密后的随机数3,然后利用私钥进行解密,得到真正的随机数(3).
    5. 最后,客户端 A 和服务端 B 都有随机数(1)、随机数(2)、随机数(3),然后双方利用相同规则把这三个随机数生成一个对话密钥。之后传输内容就是利用对话密钥来进行加解密了。这时就是利用了对称加密,一般用的都是 AES 算法。
    6. 服务端 B 把内容通过该对话密钥进行对称加密,将信息和密钥通过某种算法混合在一起,这样除非知道密钥,不然无法获取内容,而正好客户端和服务端都知道这个密钥,所以只要加密算法够彪悍,密钥够复杂,数据就够安全。
    7. 传输加密后的信息 这部分信息就是服务端 B 用密钥加密后的信息,可以在客户端 A 用随机值解密还原。
    8. 客户端解密信息 客户端A用之前生产的密钥解密服务端传过来的信息,于是获取了解密后的内容。整个过程第三方即使监听到了数据,也束手无策。

    到此,SSL 握手过程就讲完了。可能上面的流程太过于复杂,我们简单地来讲:

    1. 客户端和服务端建立 SSL 握手,客户端通过 CA 证书来确认服务端的身份;
    2. 互相传递三个随机数,之后通过这随机数来生成一个密钥;
    3. 互相确认密钥,然后握手结束;
    4. 数据通讯开始,都使用同一个对话密钥来加解密;

    结束语

      综上所述,相比 HTTP 协议,HTTPS 协议增加了很多握手加密解密等流程,虽然过程很复杂,但其可以保证数据传输的安全。所以在这个互联网膨胀的时代,其中隐藏着各种看不见的危机,为了保证数据的安全,维护网络稳定,建议大家多多推广HTTPS。

    本人菜鸟,结合先人创作以上有什么不对的地方欢迎指出!

    相关文章

      网友评论

          本文标题:浅析HTTPS

          本文链接:https://www.haomeiwen.com/subject/fuwskltx.html