前几天被面试官问这个问题,在如何校验服务端数字证书是否有效这个地方回答的比较混乱,回头看了看自己整理的资料写的就比较乱,所以又重新整理了一下。
https验证过程
-
客户端向一个需要https访问的网站发起请求。
-
服务器将证书发送给客户端进行校验。证书里面包含了其公钥。这里要特别说一下客户端到底 如何来校验对方发过来的数字证书是否有效。
- 首先在本地电脑寻找是否有这个服务器证书上的ca机构的证书。如果有继续下一步,如果没有弹出警告。(这里面试官多问了一句,根证书是否需要联网获取,应该是不需要的)
- 使用ca机构证书的公钥对服务器的数字证书的数字签名解密得到消息摘要1。
- 对服务器端的消息原文进行hash提取出消息摘要2。
- 将计算出的消息摘要2与解密出的消息摘要1进行比对,一致则通过验证。
-
校验成功之后,客户端会生成一个随机串然后使用服务器证书的公钥进行加密之后发送给服务器。
-
服务器通过使用自己的私钥解密得到这个随机值。
-
服务器从此开始使用这个随机值进行对称加密开始和客户端进行通信。
-
客户端用对称加密方式,使用随机值进行解密。
数字签名流程:
一段文本 ----hash函数----》 消息摘要 ----ca私钥加密----》 数字签名
参考
还有更多细节,上文应该还是有不少错误的。