我了解到在 tcp 连接设置期间会发生 tls 握手,其中涉及公钥和 tls 证书的交换。
我的问题是像
curl
这样的程序、我们的浏览器和移动应用程序从哪里获取这些密钥,因为如果我没有在计算机或手机上创建它们,并且.ssh
目录中没有任何内容,那么它们在哪里?如果我运行 curl https://whatever
或在浏览器或移动应用程序中打开 https 链接,它们是自己生成还是由操作系统提供?如果是的话,它们放在哪里?
如果我对此的理解存在一些差距,我很抱歉,我对这些东西很陌生。如果有需要请指正。
对于 TLS 1.3 之前的 TLS 版本,密钥由 HTTP 客户端当场生成,作为 TLS 握手的一部分。服务器的公钥由主机存储并在交换开始时发送到客户端,客户端生成对称密钥并将其发送回来,并使用公钥加密。连接完成后,对称密钥不需要保留,因此通常存储在系统内存中,而不是磁盘上。
更直接地回答,涉及到两个密钥:服务器的公钥和通信的对称密钥。服务器的公钥存储在服务器上,而不是由您的设备生成,因此客户端不会将其保存在任何地方。对称密钥由客户端在 TLS 握手期间生成并发送到服务器,但交换完成后就不再需要它,因此它也不存储在 RAM 之外。
有关密钥交换过程的更多信息,请查看