美文网首页
细说HTTPS

细说HTTPS

作者: 10xjzheng | 来源:发表于2018-09-25 16:33 被阅读16次

    1. https涉及了多种加密方式

    1)对称加密:加密和解密共用一把密钥,多用AES,DES算法;

    2)非对称加密:一个公钥和一个私钥,密钥要对,本质上公钥和私钥指定的是一对反函数的,常用就是RSA公钥加密算法;y = f(x) , x = g(y) x = g(f(x)) 相当于你用私钥(f(x)函数)加密了x之后,用公钥(g(y)函数)再解密,就可以把x还原。

    3)散列/hash算法加密:这种是不可逆算法,为什么?简单来说,hash本质上是利用因式分解。

    RSA加密利用了单向函数正向求解很简单,反向求解很复杂的特性。

    具体是利用了了一个数论事实:将两个大的质数相乘很容易得到乘积,但要把乘积进行因式分解却非常困难

    不过现在很多人用数据字典(彩虹表)进行爆破,所以我们会给密码加点盐,md5,sha1;

    2 . ssl/tls 安全协议

    client ====> server

    http 没有加密,只是传输协议

    https = http + ssl/tls

    “Secure Sockets Layer”的缩写,中文叫做“安全套接层”

    TLS(是“Transport Layer Security”的缩写),中文叫做“传输层安全协议”

    两者是并列关系

    3. 两个重要部分

    1. 身份验证

    2. 对称加密的密钥的生成过程

    3.1 身份验证:

    数字证书有三个作用

    1、身份授权。确保浏览器访问的网站是经过CA验证的可信任的网站。

    2、分发公钥。每个数字证书都包含了注册者生成的公钥(验证确保是合法的,非伪造的公钥)。在SSL握手时会通过certificate消息传输给客户端。

    3、验证证书合法性。客户端接收到数字证书后,会对证书合法性进行验证。只有验证通过后的证书,才能够进行后续通信过程。

    数字签名是证书的防伪标签,目前使用最广泛的SHA-RSA(SHA用于哈希算法,RSA用于非对称加密算法)

    SSL利用基于MD5或SHA的MAC算法来保证消息的完整性

    证书包括的内容:签发者,证书用途,公钥,加密算法,用的HASH算法,证书的到期时间等

    把以上内容做一次HASH,得到一个固定长度(比如128位的HASH),然后再用CA的私钥加密,就得到了数字签名,附在以上证书的末尾,一起传输给sever。

    设想一下,如果不加密那个HASH,任何人都可以先篡改证书,然后再计算HASH,附在证书的后面,传给server时,server无法发现是否有人篡改过。

    而用CA私钥加密后,就生成了类似人体指纹的签名,任何篡改证书的尝试,都会被数字签名发现。

    3.2 对称加密的密钥的生成过程

    1. https 数据的加密用的对称加密,但是对称加密的预密钥(pre-master secret)用的非对称加密;

    为什么呢????1.因为对称计算量小,加密解密速度快,而非对称加密计算量大,90%,2. RSA对加密数据长度有限制

    TLS握手 tls和ssl都是加密协议

    1. client hello

    client ===> server 客户端支持的加密协议和加密算法的版本,还有一个随机数,这个随机用于后面生成对称密钥

    1. server hello

    server ==> client 一个证书,一个随机数

    3)client 验证身份通过,生成一个pre-master secret,用公钥加密后传给服务器

    4)client和sever按约定的算法计算对称密钥(AES)

    image

    (图片网上找的,侵删)

    4. 完整流程

    第一步:三次握手成功后,浏览器与sever建立TCP连接,

    第二步:ssl握手的client hello 阶段,客户端发送一个随机数和告知server客户端支持的ssl协议版本号,支持的加密方法;

    第三步:服务器会弹出一个页面提醒安装数字证书,确定安装之后服务器发来了自己的数字证书,除此之外还有一个server random;

    第四步:浏览器接到数字证书,从系统获取CA公钥值(网上说ca机构的公钥是维护在系统内部的),可以解密数字证书末尾的数字签名(CA私钥加密,可以用CA公钥解密,此为非对称加密),得到原始的HASHs

    然后自己也按照证书的HASH算法,自己也计算一个HASHc,如果HASHc== HASHs,则认证通过,否则认证失败。假设认证成功,否则故事无法编下去了…

    第五步:双方会运行 Diffie Hellman 算法,简称 DH算法。通俗地说:双方会协商一个master-key,这个master-key 不会在网络上传输、交换,它们独立计算出来的,其值是相同的,只有它们自己双方知道,任何第三方不会知道,俗称的天不知,地不知,你知,我知。

    然后以master-key推导出 session-key,用于双方SSL数据流的加密/解密,采用对称加密,保证数据不被偷窥,加密算法一般用AES。

    以master-key推导出 hash-key,用于数据完整性检查(Integrity Check Verification)的加密密钥,HASH算法一般有:MD5、SHA,通俗滴说,保证数据不被篡改。

    第六步:然后就可以正常发数据了,用HASH key 生成一个MAC( Message Authentication Code),附在HTTP报文的后面,然后用session key 加密所有数据(HTTP + MAC),然后发送出去

    第七步:服务器先用session key 解密数据,得到HTTP + MAC,然后自己用相同的算法计算自己的MAC,如果两个MAC相等,则数据没有被篡改。

    相关文章

      网友评论

          本文标题:细说HTTPS

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