作者回复: 非常好的同学,大力表扬!
作者回复: 说的很好。
作者回复: 这是因为申请证书的时候一般都是绑定在域名上,证书证明的是域名而不是ip,所以无法验证网址的合法性。
如果申请证书时就绑定ip,那么就没问题了,但几乎没有人会这么做,因为ip地址会变,而域名通常是稳定的。
作者回复: 服务器客户端不会直接发送public key,如果你指的是密钥交换的过程,它实际上是ECDHE算法锁要求的参数,交换这些参数就可以在两边分别算出pre-master,而外部的黑客是无法计算得到的。
发送证书是为了配合私钥签名验证客户端或服务器是身份,只要签名对,就说明对方是证书所标记的实体。
作者回复: good。
作者回复:
1.服务器会发出一个Certificate Request消息,要求客户端提供证书,这样在ServerHelloDone消息后,客户端就会发送Client Certificate提供客户端证书。
2.双向认证的流程就在ServerHelloDone消息后多了个客户端证书,比较简单,看后面有时间再补充一篇答疑吧。
作者回复: 是的,但false start是有条件的(ecdhe),如果用rsa就是2-rtt。
而tls1.3是无条件,一定是1-rtt,而且它还有0-rtt。
作者回复: 没事,现在学会了也不晚,更好的机会在等着你。
作者回复: wireshark启动后的初始界面,“使用这个过滤器”,在文本框里输入。
作者回复: pre-master的交换方式是由密钥交换算法决定的,如果是rsa就直接公钥加密,如果是ecdhe就要用算法参数。
这些都要按照tls协议来,Client Key Exchange已经由密钥交换算法保证了安全,所以不需要再加密或者签名。
如果是双向认证,那么客户端会发送客户端的证书,也要做签名认证,让服务器验证身份。
作者回复: 这个只能说是fasle start协议的规定,其实rsa也可以抢先发出报文,但没有人这么用。
作者回复: 这是由DH算法决定的,DH算法是专门用作密钥交换的,它本身能够保证交换安全,具体的细节一下子说不清楚,你可以搜一下相关的资料。
作者回复: 可以把自己理解的过程写出来,这样才能说明真正弄懂了。
作者回复: 有啊,在握手里用ecdhe交换pre-master,之前有发送证书,验证书就有非对称加密。
可以看一下双方商定的密码套件,看看里面的算法都用在了哪个环节。
作者回复: 由密钥交换算法保证,比如rsa、ecdhe。
作者回复: 不用,只要设置了环境变量SSLKEYLOGFILE,wireshark就可以从日志里读取握手过程中的信息,相当于浏览器告诉了wireshark pre-master,所以就可以解密。
不需要任何私钥。
作者回复:
1.服务器会发出一个Certificate Request消息,要求客户端提供证书,这样在ServerHelloDone消息后,客户端就会发送Client Certificate提供客户端证书。如果没有Certificate Request客户端就不必提供证书。
2.tls握手分双向认证和单向认证两种,我们通常都用的是单向认证,即客户端认证服务器,服务器不认证客户端。
因为毕竟私钥签名比较费时间,而且给成千上万的客户端都颁发证书不太现实。单向认证通过后,可以再用用户名+口令的方式来验证客户端的身份。
3.少数场合,比如网银,为了加强安全,就会使用双向认证,确保通信双方的身份不被伪造。
作者回复: 签名用来验证之前发送的握手数据,保证不会被窜改。
作者回复: 可参考前两讲,证书是使用ca的证书来验证是否合法的,走证书链,链的源头的自证明的根证书。
第三方也就是ca的公钥私钥是自己生成,自己签名的。著名的ca的证书都会被内置到操作系统或者浏览器里。
当然服务器也可以直接在证书链里发送根证书,但这样比较浪费带宽,一般不这样做。
作者回复:
1.可参见答疑篇,详细介绍了ECDHE算法。
2.master key顾名思义,只是主密钥,还会再派生出多个用途各不相同的密钥,例如客户端发送数据用client_write_key,这点课程里简单提了一下。
3.理解的有点小偏差,对称密钥,也就是会话密钥是由master key生成的,而master key是由之前密钥交换过程中的三个随机数生成的。前两个随机数公开,而第三个随机数Pre-Master是由ecdhe算法保证了交换安全。