在单向认证时候,服务端发给客户端证书,客户端校验证书然后用证书里面的公钥加密了一个 random ,服务端收到 random 后用私钥解密,为双方的第三个 random
那么在双向认证时候,客户端发给服务端证书,服务端到底用客户端证书干了什么???查了一些博客,现在有几种说法
1.只验证 2.验证+服务端用客户端公钥加密了加密套件,客户端用私钥解密加密套件 3.验证+服务端用客户端公钥加密 random-S
在第二种说法中,加密套件不是 client hello 时候客户端发过去的么?在 server hello 后服务端会选择一个加密方案,双向认证时候,加密套件在客户端验证完服务端证书后发送??
|  |      1Belmode      2024-03-15 10:22:41 +08:00  18 别客气。 不是很清楚~ | 
|  |      3Hf1G1sGBYS8QSLN8      2024-03-15 10:27:30 +08:00  20 | 
|      4ThirdFlame      2024-03-15 10:29:38 +08:00 客户端将发送的信息  算哈希。 将哈希用客户端自己的私钥加密。发送给服务端。  服务端用客户的公钥解密,得到哈希。 并那这个哈希和客户端发送来的信息哈希比较,如果一致就说明这个信息时客户端发来的,并且没有被篡改。 | 
|      5busier      2024-03-15 10:33:57 +08:00 via iPhone 服务端会获取客户端证书的信息 诸如 CN 等等。 你可以拿 phpinfo()测试一下,好像是在 SERVER[ ]里面 利用这个特性可以实现证书登陆验证 | 
|  |      6ethusdt      2024-03-15 10:37:22 +08:00  1 | 
|  |      7tool2d      2024-03-15 10:39:17 +08:00 没你想那么复杂。 做微信支付的时候,官方 API 要求 SSL 请求必须带客户端证书,好知道你是谁。客户端证书就仅仅是校验用户身份的作用,和你用证书来登录远程 SSH 一样,没啥区别。 内容加密还是走老一套 TLS 。 | 
|  |      8gps949      2024-03-15 10:44:22 +08:00  1 | 
|      9Od37v61n5s89gXx8      2024-03-15 10:48:21 +08:00 孩子你可以抓包看交互的过程 | 
|  |      10tool2d      2024-03-15 10:55:46 +08:00 "在 server hello 后服务端会选择一个加密方案,双向认证时候,加密套件在客户端验证完服务端证书后发送??" 不是,是一起发送的。你可以看 6 楼的文章里的 curl 输出,第一行是客户端证书,第二行是加密套件里的 key(也就是双方随机数计算的 pre-master secret),第三行是用客户端密钥计算的 hash 校验,防中间人篡改,三个包是连续一起发送的。 如果客户端证书没问题,那么服务器直接就 SSL 握手完成了,不会再次请求加密 KEY 。 * TLSv1.2 (OUT), TLS handshake, Certificate (11): * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): * TLSv1.2 (OUT), TLS handshake, CERT verify (15): | 
|      11wyh19970626      2024-03-15 11:09:54 +08:00 只做验证,服务端自签的 ca 签发客户端证书,用户携带客户端证书访问系统,服务端 Ca 校验客户端证书有效性。 | 
|  |      12siweipancc      2024-03-15 11:36:33 +08:00 via iPhone ……这个不是有规范文档吗,还是我看的那份是假的? | 
|  |      13bruce0      2024-03-15 11:49:11 +08:00 我理解的, 单向的 https 中, 只有客户端,校验服务端是否是正确的(一般来说,会校验域名和证书是否一致) 在双向认证的 https 中, 不光客户端校验服务端, 服务端也会校验客户端是否靠谱(使用服务端保存的客户端根证书来校验客户端发来的公钥) | 
|      14ShinichiYao      2024-03-15 11:54:22 +08:00 就像你确认服务器是你要访问的服务器一样,可以确认访问服务器的是你 | 
|  |      15yuepu      2024-03-15 12:37:43 +08:00 可以看看 SSL 的握手: | 
|  |      16yuepu      2024-03-15 12:38:12 +08:00 | 
|  |      17awalkingman      2024-03-15 12:46:58 +08:00  2 评论区很和谐有爱 | 
|  |      18yulgang      2024-03-15 12:58:30 +08:00  1 | 
|  |      19luzemin      2024-03-15 13:10:09 +08:00  21 这就是提问的艺术!你看评论区有冷嘲热讽的吗?没有。 | 
|  |      20Dynesshely      2024-03-15 13:19:41 +08:00 via Android @luzemin 确实很聪明,op 有意思 | 
|      21ydpro      2024-03-15 13:42:16 +08:00 双向 SSL 就是服务器和客户端相互验证以增强安全性 。,客户端和服务器交换证书以验证彼此的身份。客户端证书由服务器信任的证书颁发机构( CA )创建,而服务器证书由客户端信任的 CA 创建。这种相互验证确保了更强大的安全设置,双方在建立安全连接之前验证彼此的证书。双向 SSL 在组织希望将其平台的访问限制在特定用户的场景中特别有用,降低了在线交易中欺诈的风险 https://cheapsslsecurity.com/p/what-is-2-way-ssl-and-how-does-it-work/ | 
|  |      22zbowen66      2024-03-15 13:44:24 +08:00  19 | 
|  |      23sleepyfevniv      2024-03-15 13:47:51 +08:00 学到了,下次如果我也遇到一些问题,学 op 问爹找解决方案,回复友好还更多 | 
|      24ydpro      2024-03-15 13:51:10 +08:00 @ydpro 浏览器向服务器:嗨,老哥,这是我支持的加密方式和兼容的 SSL/TLS 版本,我们可以这样安全地聊天吗?(客户端发送“客户端问候”消息,包含支持的密码套件和兼容的 SSL/TLS 版本信息) 服务器回复浏览器:嘿,听起来不错,这是我的名片(公钥证书),我也想知道你的信息,我们才能更好地交流。(服务器回应“服务器问候”消息,提供自己的公证书,并请求客户端的证书) 浏览器查看服务器的名片,确认这是个值得信赖的老哥,然后回应:好的,我查了一下,你的名片(证书)没问题,现在轮到我了,这是我的名片(客户端证书)。(浏览器验证服务器证书后,发送自己的 SSL 证书给服务器) 服务器仔细检查浏览器的名片,确认无误后说:很好,你的名片(证书)我也认可了,现在我们可以安心地交流了。(服务器验证客户端证书后,建立安全连接) | 
|  |      25huangqihong      2024-03-15 14:01:12 +08:00  3 这是我最近一年看过回复最友好,最积极的帖子了 | 
|      26yujianwjj      2024-03-15 14:04:47 +08:00 我要向楼主学习提问的技巧 | 
|  |      27magicZ      2024-03-15 14:07:11 +08:00 学会了,提问的艺术 | 
|  |      28oneKnow      2024-03-15 14:07:33 +08:00  3 建议 op 出本书,就叫《提问的艺术》 | 
|  |      30shawndev      2024-03-15 14:15:56 +08:00 两个独立的问题。 1. 你描述中的第一句,只在部分条件下适用。TLS 1.2 之前是支持 PSK 方式的预共享密钥。TLS 1.2 及之后只支持密钥协商。 2. 双向校验的核心是,HTTPS 的安全是建立在对于 CA 机构证书链的信任。双向校验的核心是,服务端只信任预置证书的客户端,客户端只信任指定的 CA 证书。 | 
|  |      32mosliu      2024-03-15 16:21:24 +08:00 《提问的艺术》 rev. 2.0 | 
|  |      33somebody1      2024-03-15 16:29:43 +08:00  1 你这么提问,评论区很难不开心啊 | 
|  |      34main1234 OP | 
|  |      35dzdh      2024-03-15 16:47:31 +08:00  1 | 
|  |      37j6711      2024-03-15 17:01:18 +08:00 学会了,提问的艺术 | 
|  |      38tool2d      2024-03-15 17:01:18 +08:00 @main1234 似乎你的纠结点在于服务器用了客户端证书,具体干嘛。 1. 客户端角度看,证书分公钥和私钥两部分。公钥是发给服务器作为验证的,私钥确实是本地加密数据后发给服务器,但不是加密 random 随机数,也不是 masterkey ,就仅仅是加密了 hash (因为正式加密通讯之前,任何数据都有可能被篡改,需要数字签名) 2. 图上有一个 change cipher spec ,名字很容易误导,你以为可能是二次协商密钥。其实包里啥也没干,就是一个加密开始的 confirm 。 | 
|      39holulu      2024-03-15 17:08:21 +08:00 传客户端证书就相当于传登录密码一样。 | 
|      40wang4012055      2024-03-15 17:19:55 +08:00 本质就是利用非对称加密,获取其他人(中间人攻击)无法获取的密钥进行对称加密交流. 叶文洁想要联系三体人,但是怕被罗辑知道并篡改内容,由于三体人在太阳老哥这注册过,叶文洁就问太阳老哥要到了三体人的公钥,把信息用公钥加密发给了三体人,三体人收到用三体人私钥解密后,确认是叶文洁发来的,就用在太阳老哥注册的叶文洁公钥加密信息发回去,这样双方都有了双方才知道信息,从而生成密钥进行对称加密交流.而罗辑只能干瞪眼.🤣 | 
|  |      41nxuu      2024-03-15 18:09:07 +08:00 我看到了人间大爱. | 
|      42eairjhioaegnh      2024-03-15 18:21:04 +08:00 via iPhone 下次我也这么提问哈哈哈 | 
|  |      44zbowen66      2024-03-16 00:22:09 +08:00 @zbowen66 #22 这个是我之前在极客时间的课程里保存的图,课程在这: https://time.geekbang.org/column/article/9492 | 
|      45iceheart      2024-03-16 06:07:33 +08:00 via Android 1. Server 端 证书: | 
|      46iceheart      2024-03-16 06:09:46 +08:00 via Android 1. Server 端证书: 防止 Server 被假冒。 1. Client 端证书: 防止 Client 被假冒。 | 
|      47cndenis      2024-03-16 10:04:32 +08:00 不同的 TLS 版本具体流程会有点区别的, 比如 TLS1.3 和 TLS1.2 相比变动就挺大的, 但很多地方并没有说明是哪个版本, op 可以注意一下 | 
|      48julyclyde      2024-03-16 12:36:25 +08:00 我理解应该是仅验证吧 TLS 的加密协商似乎并没有用到客户端证书的内容 | 
|      49luckyc      2024-03-16 18:02:58 +08:00 那么问题来了,  app 里面使用双向认证可以防止 http 通讯数据被截获吗? client 端不还是要提供证书? 别人逆向你的 app 依旧可以搞到方法和服务器通讯撒. 意义在哪? |