客户端证书与服务器证书各自有其价值。客户端证书用于向服务器验证客户端身份,服务器证书则用于向客户端验证服务器身份。为保护数据免受恶意活动侵害,二者都被广泛使用。本文介绍这两种证书是什么,并对比客户端证书与服务器证书的差异。在深入讨论之前,需要先了解几个术语:X.509、服务器认证、客户端认证、代码签名,以及 anyExtendedKeyUsage。

X.509 证书

X.509 证书是有效的 PKI 标准,用于标识证书所有者以及所映射特定计算机或服务器的公钥。它涵盖 SSL 证书、TLS 证书、S/MIME 邮件证书与代码签名证书。

服务器证书与认证

服务器证书是极小的数据文件,以数字方式将密码学密钥与公司详情绑定。当 SSL 安装到 Web 服务器后,会启用安全机制与 https 协议(通过 443 端口),建立从服务器到浏览器的加密安全连接。在 SSL 握手过程中,客户端请求安全连接,服务器出示其公钥证书供客户端接受;客户端本地 truststore(信任库)中已存有可信证书列表,若证书匹配则建立加密连接,否则连接失败并报错。服务器认证的 OID(对象标识符)在证书「Enhanced Key Usage(增强密钥用法)」下为 1.3.6.1.5.5.7.3.1。服务器证书用于标识服务器,通常颁发给主机名(如 Microsoft 或某台机器名),并作为内容加解密的基础。

SSL 客户端证书与认证

客户端证书是数字证书的一种变体,客户端广泛用它来认证系统,使可信请求能抵达远程服务器。顾名思义,它用于向服务器标识客户端身份。在 SSL 握手中,服务器身份确认后会要求客户端证明身份,客户端随即发送公钥证书给服务器;服务器将收到的证书与 KeyStore 中存储的公钥证书比对,验证通过后继续加密流程。客户端认证的 OID 为 1.3.6.1.5.5.7.3.2。

代码签名

代码签名证书用于为软件/应用程序代码签名,向最终用户保证代码未被篡改。它带有时间戳,即使证书过期,代码仍保持合法。代码签名的 OID 为 1.3.6.1.5.5.7.3.3。

扩展密钥用法(EKU)

EKU 是一组预定义的公钥使用参数,作为证书扩展列出公钥可应用的用途:服务器认证(1.3.6.1.5.5.7.3.1)、客户端认证(1.3.6.1.5.5.7.3.2)、anyExtendedKeyUsage(2.5.29.37.0)、代码签名(1.3.6.1.5.5.7.3.3)、OCSP 戳记(1.3.6.1.5.5.7.3.9)。你可双击「查看证书」、在「详细信息」选项卡选择「仅扩展」自行查看。

客户端证书与服务器证书的差异

二者各有重要性,无法互相替代。除「证书」一词及都拥有公钥/私钥外,二者几乎没有相似之处。对比如下:

含义:服务器证书用于向客户端验证服务器身份;客户端证书是用于向服务器验证客户端身份的数字文件。
数据加密:服务器证书将传输中的明文转为密文;客户端证书本身不做明文到密文的转换。
EKU OID:服务器认证为 1.3.6.1.5.5.7.3.1;客户端认证为 1.3.6.1.5.5.7.3.2。
证书信息:两者均含「颁发给」与「颁发者」字段。
示例:服务器证书即 SSL 证书;客户端证书如邮件客户端证书。

实际中证书流程如何运作

网站所有者从受信任的证书服务商处获取证书及签名请求(CSR),证书包含联系信息、邮箱、网站名等必要内容,CA 生成公钥证书并签名为请求背书,该公钥证书随后提供给连接网站的浏览器或服务器。这一步确保浏览器相信证书确由网站所有者或公司持有;颁发前,服务商还会核验来自公共域名注册机构的联系信息与邮箱。整个流程旨在维护域名与证书的信任与可信度。客户端与服务器证书是信任与安全交易的重要标志,能保护我们免受在线威胁。