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