证书中的密钥是公开密钥

典型X.509公钥证书包含待签名信息、签名算法和签名值。待签名信息记录序列号、签发者、有效期、主体、公钥及扩展;签名把这些字段绑定在一起,使验证者能够发现相关内容遭到修改。

证书中的SubjectPublicKeyInfo携带公钥与算法信息,不是用来保存持有者私钥的保险箱。证书可通过公开目录或不可信网络传送,接收者再验证其签名和条件;拿到一份公开证书不等于获得对应私钥。

参考:[1]

签名可信,还要核对连接的名称

在TLS服务身份验证中,客户端先根据要访问的地址或其他可信输入形成参考标识,再与证书所呈现的标识匹配。RFC 9525要求这一参考集合独立于服务器提供的标识建立,避免服务器自己决定客户端本来想访问谁。

DNS名称和IP地址有不同匹配规则:IP标识须与subjectAltName中的地址逐字节匹配,DNS通配符也受完整最左标签等限制。新规范不再接受旧式commonName回退;签名正确或连接已加密,都不能代替目标名称检查。

参考:[2]

有效期和用途限制也是验证内容

notBefore和notAfter界定证书声明的有效期间;验证还要处理认证路径、适用撤销信息和用途条件。keyUsage与extendedKeyUsage在同时存在时都要满足,不能把可验证邮件签名的证书直接当成任何服务都可用的通行证。

验证成功说明的是在选定信任和协议条件下接受某种名称与公钥的绑定。它不证明网页内容真实、交易合算或经营者永远可靠;同样,拥有证书的文件与在握手中证明能使用对应私钥,是不同环节。

参考:[1] [2]