2.4. HTTPS 证书的特殊要求

概述

HTTPS 规格要求 HTTPS 客户端必须能够验证服务器的身份。这可能会影响您如何生成 X.509 证书。验证服务器身份的机制取决于客户端的类型。有些客户端可能会只接受由特定可信 CA 签名的服务器证书来验证服务器身份。另外,客户端也可以检查服务器证书的内容,并只接受满足特定约束的证书。

如果没有特定于应用的机制,HTTPS 规范定义了通用机制,称为 HTTPS URL 完整性检查,用于验证服务器身份。这是 Web 浏览器使用的标准机制。

HTTPS URL 完整性检查

URL 完整性检查的基本概念是服务器证书的身份必须与服务器主机名匹配。此完整性检查对 HTTPS 生成 X.509 证书有重要影响: 证书身份(通常是证书主题 DN 的通用名称)必须与在其上部署 HTTPS 服务器的主机名匹配

URL 完整性检查旨在 防止中间人攻击

参考

HTTPS URL 完整性检查由 RFC 2818 指定,由互联网工程任务组(IETF)发布,地址为 http://www.ietf.org/rfc/rfc2818.txt

如何指定证书身份

URL 完整性检查中使用的证书身份可使用以下方法之一指定:

使用 commonName

指定证书身份(用于 URL 完整性检查的目的)的常见方法是通过证书的主题 DN 中的通用名称(CN)。

例如,如果服务器通过以下 URL 支持安全 TLS 连接:

https://www.redhat.com/secure

对应的服务器证书具有以下主题 DN:

C=IE,ST=Co. Dublin,L=Dublin,O=RedHat,
OU=System,CN=www.redhat.com

其中 CN 已设置为主机名 www.redhat.com

有关如何在新证书中设置主题 DN 的详情,请参考 第 2.5 节 “创建您自己的证书”

使用 subjectAltName (多主主机)

将主题 DN 的通用名称用于证书身份有一个缺点,一次只能指定一个主机名。但是,如果您在多主目录主机上部署证书,您可能会发现证书可以和 任何 多主目录主机名一起使用。在这种情况下,必须使用多个替代身份定义证书,这只能通过 subjectAltName 证书扩展来实现。

例如,如果您有一个支持连接到以下主机名之一的多主目录主机:

www.redhat.com
www.jboss.org

然后,您可以定义一个 subjectAltName 来显式列出这两个 DNS 主机名。如果您使用 openssl 工具生成证书,请编辑 openssl.cnf 配置文件的相关行来指定 subjectAltName 扩展的值,如下所示:

subjectAltName=DNS:www.redhat.com,DNS:www.jboss.org

其中 HTTPS 协议将服务器主机名与 subjectAltName 中列出的 DNS 主机名匹配( subjectAltName 优先于 Common Name)。

HTTPS 协议在主机名中还支持通配符字符 \*。例如,您可以定义 subjectAltName,如下所示:

subjectAltName=DNS:*.jboss.org

此证书身份与域 jboss.org 中的任何三组件主机名匹配。

警告

切勿在域名中 使用通配符字符(您必须注意不要通过忘记键入句点 . . (在域名前面键入句点 . )而意外这样做。例如,如果您指定了 *jboss.org,则您的证书可以在字母 jboss 结尾的 %any* 域中使用。