• MJ
    2019-01-27
    分享TLS加密过程,自己的总结:

    HTTPS采用混合加密算法,即共享秘钥加密(对称加密)和公开秘钥加密(非对称加密)。
    通信前准备工作:
    A、数字证书认证机构的公开秘钥(CA公钥)已事先植入到浏览器里;
    B、数字证书认证机构用自己的私有密钥对服务器的公开秘钥做数字签名,生成公钥证书,并颁发给服务器。

    1、client hello
    握手第一步是客户端向服务端发送 Client Hello 消息,这个消息里包含了一个客户端生成的随机数 Random1、客户端支持的加密套件(Support Ciphers)和 SSL Version 等信息。

    2、server hello
    服务端向客户端发送 Server Hello 消息,这个消息会从 Client Hello 传过来的 Support Ciphers 里确定一份加密套件,这个套件决定了后续加密和生成摘要时具体使用哪些算法,另外还会生成一份随机数 Random2。注意,至此客户端和服务端都拥有了两个随机数(Random1+ Random2),这两个随机数会在后续生成对称秘钥时用到。

    3、Certificate
    这一步是服务端将自己的公钥证书下发给客户端。

    4、Server Hello Done
    Server Hello Done 通知客户端 Server Hello 过程结束。

    5、Certificate Verify
    客户端收到服务端传来的公钥证书后,先从 CA 验证该证书的合法性(CA公钥去解密公钥证书),验证通过后取出证书中的服务端公钥,再生成一个随机数 Random3,再用服务端公钥非对称加密 Random3生成 PreMaster Key。

    6、Client Key Exchange
    上面客户端根据服务器传来的公钥生成了 PreMaster Key,Client Key Exchange 就是将这个 key 传给服务端,服务端再用自己的私钥解出这个 PreMaster Key 得到客户端生成的 Random3。至此,客户端和服务端都拥有 Random1 + Random2 + Random3,两边再根据同样的算法就可以生成一份秘钥,握手结束后的应用层数据都是使用这个秘钥进行对称加密。为什么要使用三个随机数呢?这是因为 SSL/TLS 握手过程的数据都是明文传输的,并且多个随机数种子来生成秘钥不容易被破解出来。
    展开
     1
     14
  • iron_man
    2018-11-07
    视频里第一个图表,怎么看出来握手是影响性能的指标的?

    作者回复: 要做个推理,前提:1、0,1,10K的线,随着文件增大,RPS没多少下降。100K和1M时下降才明显;2、文件增大,一定会导致对称加密算法的耗时增加,对称加密主要是异或操作;3、SSL耗时主要由握手和对称加密构成。 推论:0到1K到10K,每次AES应该有10倍耗时增加的,但RPS没什么下降。所以,文件小的时候,耗时主要在握手上。

    
     10
  • Dante.Fung
    2018-11-06
    打卡

    作者回复: (+﹏+)

    
     2
  • 拯救不开心
    2019-11-20
    老师您好,请教问题,
    1,您说,nginx在向浏览器发送证书时,会发送2个证书(先发送主证书,再发送二级证书),因为根证书是操作系统或浏览器内置的。浏览器会自动认证二级证书的签发机构,和根证书是否有效。

    又在评论里看到,客户端收到服务端传来的公钥证书后,先用CA公钥去解密公钥证书,“取出证书中的服务端公钥,去验证其证书链,颁发机构是否可信。”

    证书验证这里好懵哇。。。
    可以稍微解释一下,浏览器拿到服务端的公钥后,是如何验证证书链的,
    是浏览器自己从根证书中查找验证证书链吗,如果是,那这个服务器的公钥有啥用。。

    2,在评论区看到,您说:第6步生成的密钥仅用来作本次对称加密使用,后续任何数据都需要用它来加解密后再传输。

    这个“本次”和“后续任何数据都”如何理解?
    是指后续的所有应用层数据都使用这个密钥进行加解密传输吗?

    展开

    作者回复: 1、有些浏览器使用操作系统内置的根证书,有些浏览器则自己内置根证书。当收到Nginx发来的证书链后,用根证书的公钥验证身份证的合法性。
    你可以看下《Web协议详解与抓包实战》第76课。
    2、是的。本次、后续都是指在这个TLS会话内。

    
     1
  • 华子91
    2019-08-19
    第六步中,server 用client的公钥和自己的私钥生成的密钥与client 用server 的公钥和自己的私钥生成的密钥是一样的?两者都使用非对称加密算法

    作者回复: 完全一样。DH详细过程请参考我的《Web协议详解与抓包实战》第77课,ECDH椭圆曲线交换请参考78、79课。

    
     1
  • 酒桶
    2019-04-29
    老师,您好,这几个图的横坐标表示的是什么能具体讲一下吗?

    作者回复: 你是想问RSA/AES speed test*cores是什么意思吧?你看下“上邪忘川”的问题,那里我做了回答

    
    
  • 无菇朋友
    2019-04-07
    老师您好,接上条回复,那么客户端用dhce算法和公共参数如何生成公私钥呢,能简单讲一下吗

    作者回复: 椭圆曲线涉及大量数学知识,请参考:https://zh.wikipedia.org/wiki/%E6%A4%AD%E5%9C%86%E6%9B%B2%E7%BA%BF%E5%AF%86%E7%A0%81%E5%AD%A6。
    我建议你先弄清楚RSA的过程,再对比椭圆曲线可以省掉大量阅读数学公式的时间:-)

    
    
  • 无菇朋友
    2019-04-07
    老师您好,tls握手的步骤中,客户端用dhce算法结合服务器发送的公共参数生成一对公私钥是么,如果是这样,那中间人是不是也可以伪造一对公私钥来欺骗服务器呢

    作者回复: 不可以,因为中间人无法欺骗客户端,它无法伪造出私钥证书,进而不能通过签名等方式告诉持有公钥的客户端 相信它的身份。

    
    
  • Hana
    2019-03-16
    通讯中非对称加密和对称加密算法同时存在么? 大文件考虑对称加密算法的性能、小文件考虑非对称加密性能?

    作者回复: 对

    
    
  • 奔跑的兔子
    2019-02-06
    老师,第六步中服务器重新生成的秘钥与第七步客户端生成的秘钥,是用来做之后消息传递的对称加解密的吗?还是有其它作用?

    作者回复: 第六步生成的密钥仅用来作本次对称加密使用,后续任何数据都需要用它来加解密后再传输,没有其他作用。

    
    
  • BarbieYT
    2019-01-31
    rsa不是椭圆曲线吧,没看到文中提到ecc,dh,rsa,dsa,ecc中好似能对明文加密然后解密的只有rsa,dh一般只做密钥协商,ecc和dsa虽然也叫非对称加密,但是只能验证签名是否篡改,无法解密出原文。

    作者回复: RSA不是,ECDHE是的,也是当下主流的算法。第96课中通过$ssl_curves能取到当下用的是哪条椭圆曲线。

    
    
  • 10000小时定律
    2019-01-26
    讲的真好 配合书看 之前不懂的地方 现在也越来清楚 唯一的缺憾就是没有实际项目来锻炼自己所学
    
    
  • 刘义方
    2019-01-19
    老师,客户端验证身份如何验证?我能理解是服务器端返回数字证书,我根据CA提供公钥进行解密得到公钥,拿到公钥如何去验证

    作者回复: 验证公钥的证书链、颁发机构是否可信

    
    
  • 上邪忘川
    2019-01-14
    老师,您好!请问下这节课图中的RSA/AES speed test*cores,主要是指什么?或者说它的单位是什么?是指算法的强度么,还是说加密所消耗的时间。

    作者回复: 指1、2、4、8等不同CPU核心下每秒执行AES等算法的速度(每秒处理请求数或者流量)。它是指算法执行所消耗的时间。

    
    
  • qstudy
    2018-12-12
    老师,这个tls加密过程是,先是利用非对称算法,然后其实正式通信的时候,是通过对称加密的是吧?
    但是在生成这个对称加密秘钥的时候,我看了一些文章,他们是这样讲的,就是在客户端验证了数字签名证书之后,浏览器生成随机数R,并通过网站给的公钥进行加密,然后传给服务器,服务器用自己的私钥解密得到R,然后他们之间就以R为这个对称秘钥进行加密进行传输,这儿是算法不一样么,还是理解的有问题?

    作者回复: 这是早期的安全套件,目前新版本的浏览器以及服务器间不采用这种通讯方式,安全级别不高,包括一旦服务器私钥被攻破,前期抓到的包都可以破解,可以参考思诺登事件。

    
    
  • 一步
    2018-12-02
    非对称加密技术保证:双方生成的新密钥是一致的

    这个结论是怎么得出来的呢? 能验证下吗?

    作者回复: 你可以看下椭圆曲线加密的数学证明过程,或者看下RSA的原理验证,网上有很多,不过理解前者需要非常好的数学基础,后者比较简单,可以用来入门。

    
    
  • 风竹
    2018-11-20
    加密这块听得有点懵;需要多看几遍

    作者回复: 这块确实比较复杂,不过底层知识很容易迁移学习的。

    
    
  • hufu
    2018-11-19
    老师统计QPS的图表用的是什么工具

    作者回复: 呃,这个图表不是我做的

    
    
  • mxmkeep
    2018-11-19
    老师的tls流程是最复杂的吧,一般客户端不需要自己的证书密钥,除非银行客户端之类
    一般网站类,浏览器只是拿服务端公钥加密随机数发给服务端这样吧~

    作者回复: 不是的,我这里的例子是当前最主流的TLS安全套件交互流程,你用firefox、chrome等访问大多数ssl站点,交互流程都是这样的。这些复杂性,其实都被浏览器、nginx悄悄地完成了,所以我们感知不到:-)

    
    
  • honnkyou
    2018-11-18
    老师,tls一直没有捋特别清楚。视频中tls通信过程第五部不是很明白?客户端也生成秘钥对,再把公钥发给服务器端吗?那客户端的私钥的作用是什么呢?印象中非对称阶段是服务器端的秘钥对起作用。

    作者回复: 非对称加密在TLS中有两个用途,1、CA颁发的公私钥,用于身份验证及客户端对服务器的单向消息加密。2、由客户端和服务器各自生成公私钥,并把自己的公钥发给对方,结合对方的公钥和自己的私钥生成新的密钥。非对称加密技术保证:双方生成的新密钥是一致的。

    
    
我们在线,来聊聊吧