作者回复: 非常好的同学,大力表扬!
作者回复: 说的很好。
作者回复: good。
作者回复: 这是因为申请证书的时候一般都是绑定在域名上,证书证明的是域名而不是ip,所以无法验证网址的合法性。
如果申请证书时就绑定ip,那么就没问题了,但几乎没有人会这么做,因为ip地址会变,而域名通常是稳定的。
作者回复: 服务器客户端不会直接发送public key,如果你指的是密钥交换的过程,它实际上是ECDHE算法锁要求的参数,交换这些参数就可以在两边分别算出pre-master,而外部的黑客是无法计算得到的。
发送证书是为了配合私钥签名验证客户端或服务器是身份,只要签名对,就说明对方是证书所标记的实体。
作者回复: 由密钥交换算法保证,比如rsa、ecdhe。
作者回复: 总结的非常好。
作者回复:
1.对于tls通信的双方来说,tls只是加密了通信链路,在通信的两个端点必然是要解密的,也就是明文,不然就无法操作了。
设置系统和wireshark就是告诉浏览器,把密钥导出来,然后wireshark用这个密钥来解密,但传输的数据仍然是加密的,如果没有这个密钥wireshark也是看不出明文的。
密文解密的前提是有密钥,如果没有密钥通信就是安全的。
2.看后面一讲,介绍了tls1.3,这里就不重复了。
3.是的。椭圆曲线的密钥用于ecdhe交换会话密钥,证书的私钥用来身份验证,对消息签名。
但椭圆曲线的密钥是临时生成的,每次握手都不固定,见答疑篇。
作者回复:
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,之前有发送证书,验证书就有非对称加密。
可以看一下双方商定的密码套件,看看里面的算法都用在了哪个环节。
作者回复: 不用,只要设置了环境变量SSLKEYLOGFILE,wireshark就可以从日志里读取握手过程中的信息,相当于浏览器告诉了wireshark pre-master,所以就可以解密。
不需要任何私钥。
作者回复: 两端同时计算,根据算法,会得到相同的结果,可以参考一下示意图。
作者回复: 这个是rfc的规定,只允许ecdhe使用false start。
背后的真正原因是什么我也不太清楚,可能还是因为rsa不支持前向安全吧。