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 完整性检查的目的)的常见方式是通过证书的 subject 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
证书扩展名。
例如,如果您有一个支持连接到以下主机名之一的多home主机:
www.redhat.com www.jboss.org
然后您可以定义一个可明确列出这些 DNS 主机名的 subjectAltName
。如果您使用 openssl
程序生成证书,请编辑 openssl.cnf
配置文件的相关行来指定 subjectAltName
扩展的值,如下所示:
subjectAltName=DNS:www.redhat.com,DNS:www.jboss.org
其中 HTTPS 协议与在 subjectAltName
中列出的 DNS 主机名之一( subjectAltName
的优先级高于通用名称)匹配服务器主机名。
HTTPS 协议也支持主机名中的通配符字符 \*
。例如,您可以定义 subjectAltName
,如下所示:
subjectAltName=DNS:*.jboss.org
此证书身份与域 jboss.org 中的任意三组件主机名匹配。
您不得 在域名中 使用通配符字符(并且您必须小心小心,不要通过忘记在域名前面键入点来意外这样做 。。
、分隔符)。例如,如果您指定了 *jboss.org
,您的证书可用于*任何*域,该域以字母 jboss
结束。