1、证书准备阶段
服务端证书生成与发布:服务端生成一对公钥和私钥,将包含公钥及相关信息(如域名、组织机构等)的证书签发请求(CSR)发送给证书颁发机构(CA),CA 验证服务端身份后,对 CSR 进行数字签名,生成服务端公钥证书,并将其发布到公开渠道或直接分发给客户端。
客户端证书生成与获取:客户端同样生成公私钥对,并创建证书签发请求(CSR)发送给CA,CA 验证客户端身份信息后,对 CSR 进行数字签名,生成客户端公钥证书,并将证书颁发给客户端。
2、连接建立与证书交换阶段
客户端发起连接请求:客户端向服务端发起建立连接请求,同时将自己的公钥证书(client.crt)发送给服务端。
服务端响应并发送证书:服务端收到客户端的连接请求和证书后,将本机的公钥证书(server.crt)发送给客户端。
3、证书验证阶段
客户端验证服务端证书:客户端使用系统内置的CA根证书或已信任的CA证书列表来验证服务端证书的有效性,验证内容包括证书是否在有效期内、证书是否由受信任的CA颁发、证书的域名是否与服务端域名匹配等,若验证通过,则继续后续流程;否则,终止连接。
服务端验证客户端证书:服务端使用相同的验证方式对客户端证书进行验证,确保客户端身份的合法性。
4、密钥协商与加密通信阶段
密钥协商:双方验证证书无误后,使用对方的公钥和自己的私钥进行密钥协商,生成会话密钥,常见的密钥协商算法有RSA、DH等。
加密通信:双方使用协商好的会话密钥对通信数据进行加密和解密,确保数据传输的机密性和完整性。
1、问:为什么需要服务器双向认证?
答:服务器双向认证能够确保通信双方的身份真实性和合法性,防止中间人攻击、伪造身份等安全威胁,增强数据传输的安全性和可信度。
2、问:如果一方的证书验证失败,会发生什么情况?
答:如果一方的证书验证失败,说明无法确认对方身份的真实性和合法性,为了保障通信安全,双方应终止连接,避免潜在的安全风险。