关于 HTTPS 我有一个疑问

2020-12-30 21:26:41 +08:00
 zhao1014

最近在看《图解 HTTP 》看到了 HTTPS 这一章

前言:

SSL 使用混合加密机制,使用公开秘钥加密共享秘钥,在确保交换的共享秘钥是安全的情况下,使用共享秘钥进行通信

疑问:

1.每次发送报文时,发送端都会将共享秘钥与被加密的报文一起发送,公开钥保证第一次共享秘钥的交换是安全的,那后续呢?难道每次交换秘钥都要用公开称秘钥加密吗?

2.共享秘钥由客户端生成还是由服务器端生成?

3.我对共享秘钥的理解是不是有问题?我理解的是共享秘钥只有一个,每次发送报文时都要随报文一起发送。如果共享秘钥是相同的两个秘钥,由服务器生成,在第一次会话时服务器将其中一个交给客户端,那这样就能解释问题 1 和问题 2 了

2277 次点击
所在节点    HTTP
6 条回复
opengps
2020-12-30 21:33:35 +08:00
公钥的出发点是公开,所以叫公钥。私钥同理。
早在 ssl 证书申请的时候,公钥私钥就已经生成好了,你拿到的是一对固定的密钥。
eason1874
2020-12-30 22:09:42 +08:00
共享密钥是算出来的,不是谁发给谁的。据我了解是这样:

客户端:hello,这是我能使用的版本、密码组合和这次加密用的客户端盐(随机字符串 A )
服务器:hello,这是我的证书、密码组合和这次加密用的服务器盐(随机字符串 B )

客户端:收到。这是我用你的证书公钥加密过的密钥盐(随机字符串 C )
客户端:我决定用算法 1
客户端:这是我用盐 A 、B 、C 算出来的共享密钥加密的结束信号。

服务器:收到。这是我用盐 A 、B 、C 算出来的共享密钥加密的结束信号。

客户端&服务器:共享密钥一致,安全连接已建立。
Biwood
2020-12-30 22:09:45 +08:00
正好最近复习了,共享秘钥准确的说法叫“会话秘钥”,是由客户端和服务端的主密钥 + 同一个随机数各自生成的,一次会话只有一个会话秘钥。

SSL 握手完成之后,所有的加密和解密都是用这一个会话秘钥,也就是所谓的对称加密,而且这个秘钥是不需要每次都传送的,因为在客户端和服务器都已经算出这个秘钥了。

其实最关键得是 SSL 最后一步,从预主密钥( pre-master key )到主密钥( master key )这一步,用的是迪菲-赫尔曼密钥交换算法( D-H 算法)。客户端和服务端能够算出一个相同的主密钥,之后的会话秘钥都依赖主密钥而生成。
fiveelementgid
2020-12-30 22:14:16 +08:00
你可以试试用 curl -v https 网站
fiveelementgid
2020-12-30 22:18:11 +08:00
这书看过,你需要注意的是,只有一开始采用非对称加密密钥进行通信,这个主要是用于安全传输临时生成的对称密钥(session key),然后后续通信都是用 session key 加密进行通信(对称加密),主要还是为了节省算力
webshe11
2020-12-31 05:42:57 +08:00
这都是现代密码学的东西,论坛也不是讲课的地方,回复里也说不清,不如直接推荐一本书,也姓图解,叫《图解密码技术》,全看完就全明白了
防止思而不学则殆,还是看书好使,加油

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/740429

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX