背景:我正在使用 curl 库通过 TLS 将文件上传到具有 DigiCert 证书的服务器。
现象:握手阶段,服务端发送Hello消息,并返回证书链信息,经过解析发现,返回的证书链中包含三个证书:一个是用户证书,一个中间证书由DigiCert签名,一个根证书由VeriSign签名。
问:当设备使用 DigiCert 验证服务器证书时,调试消息显示验证成功且文件已上传,但我想知道 VeriSign 颁发的证书是否是证书链验证的一部分。
答案1
VeriSign 签名的证书无疑是证书验证的一部分。
该证书是您信任的根证书,因为您已将其安装在系统中。这些受信任的证书由您的操作系统分销商预先安装在您的计算机中。
根证书是必需的,因为它们在证书链中提供信任源。也就是说,您信任用户证书,因为它已由 DigiCert 签名,您信任 DigiCert,因为它的证书已由 VeriSign 签名,您信任 VeriSign,因为您信任 VeriSign。
没有什么特别的关于 VeriSign。他们是一家值得信赖的企业。他们向人们和企业颁发证书,证明他们的身份是他们所说的,我们都相信他们能很好地完成工作(即他们只会以 DigiCert 的名义向实际的DigiCert,其他任何人均无法获得)。
根证书在 TLS 验证中必不可少,可避免 MITM 攻击。如果没有根证书,当网站向您提供其域名的证书时,您将无法知道是实际网站签署了证书,还是其他人冒充了该网站(中间人)。VeriSign 会为您处理身份验证(或者更确切地说,他们将证书交给 DigiCert 自行处理)。
如果您不信任根证书,或者网站提供的证书是自签名的、已过期、尚未生效或以任何其他方式不可信任,curl 将拒绝 TLS 握手并抛出错误。