创建 TLS 证书或证书请求

 

适用于: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2007

上一次修改主题: 2011-11-04

本主题说明如何通过在 Exchange 命令行管理程序中使用 ExchangeCertificate cmdlet 来创建 X.509 传输层安全 (TLS) 证书或证书请求。

important要点:
在阅读本主题之前,确保您熟悉 Microsoft Exchange Server 2007 中的常规证书使用。请参阅 证书在 Exchange 2007 Server 中的使用

在加密术语中,由 New-ExchangeCertificate cmdlet 生成的证书和相关私钥是 TLS 密钥。New-ExchangeCertificate cmdlet 允许指定有关证书的元数据,以便不同服务可以使用相同的证书和私钥。在为使用 TLS 的 Exchange 服务创建证书或证书请求之前,应当了解被证书用于 SSL 和 TLS 服务的元数据。此元数据在生成的证书中称为“字段”。

若要查看给定计算机上的计算机证书的字段,可以在 Exchange 命令行管理程序中使用 Get-ExchangeCertificate cmdlet。另外,可以在 Microsoft 管理控制台 (MMC) 中使用证书管理器管理单元。有关如何使用证书管理器管理单元的详细信息,请参阅如何向 Microsoft 管理控制台添加证书管理器

理解被证书用于 TLS 服务的字段

如果使用 New-ExchangeCertificate cmdlet 从第三方或其他公钥基础结构 (PKI) 证书颁发机构 (CA) 那里生成证书请求,请确保验证 CA 需要哪些证书字段和证书格式。

这一节解释最重要的证书字段,并为生成证书和证书请求提供某些最佳实践。

主题名称

TLS 证书的主题名称是 DNS 感知的服务所使用的字段。主题名称字段将证书绑定到特定的服务器名称或域名。

主题名称是一个 X.500 可分辨名称,由一个或多个相对可分辨名称(也称为 RDN)组成。下表列出了标识组织或服务器实体的常用相对可分辨名称。

名称 缩写 类型 最大大小 频率 在证书\请求中的推荐最大大小 在主题中的顺序

国家/地区

C

ASCII

2

1\1

1

域组件

DC

ASCII

255

很多

1

省/市/自治区

S

Unicode

128

1

2

位置

L

Unicode

128

1

3

组织

O

Unicode

64

1\1

4

组织单位

OU

Unicode

64

很多\很多

5

常用名

CN

Unicode

64

很多\1

6

国家/地区代码是 ISO 3166-1 代码。有关详细信息,请参阅英语国家/地区名称和代码元素

note注意:
UNRESOLVED_TOKEN_VAL(exNote3rdPartyURL)

按照约定,域组件和国家/地区是互斥的。最佳做法是按国家/地区引用名称,或按域名系统 (DNS) 名称引用名称。而且应注意,域组件的最大大小(255 个字符)是所有域组件值的总计。

important要点:
尽管证书可以有多个公用名字段,但某些服务是基于只有一个公用名的假定实现的。因此,多个公用名会导致互操作性问题。建议所创建的证书或证书请求只包含一个公用名。

实现相对可分辨名称

主题名称在 New-ExchangeCertificate cmdlet 中表示为由一系列逗号分隔的名称组成的一个参数。每个名称均以相对可分辨名称的缩写进行标识。例如,以下主题名称表示国家/地区 = US、组织 = Contoso Corp、公用名 = mail1.contoso.com

-SubjectName "C=US o=contoso corp, CN=mail1.contoso.com"

可以代表相同服务器的其他主题名称的示例包括:

-SubjectName  "O=contoso corp, CN=mail1.contoso.com"
-SubjectName "DC=contoso, DC=com, CN=mail1.contoso.com"
-SubjectName "DC= contoso, DC=com, O=contoso corp, CN=mail1.contoso.com"

如果有一个用于发送 SMTP 邮件的已注册的 DNS 名称,那么最好的做法是使用域组件约定和 DNS 名称作为证书名称,例如,DC=contoso,DC=com,CN=mail1.contoso.com。

但是,为 CA 提供程序生成证书请求时,必须理解 CA 的“主题名称”字段要求以及您独有的 PKI 需要。在某些情况下,可能必须使用国家/地区代码(“C”)。如果这样,则必须向 X.500 注册机构注册相对可分辨名称。

国际主题名称

如果主题名称包含非 ASCII 字符,则可以输入 SubjectName 参数作为包含在引号内的可分辨名称,如下所示:

-SubjectName "C=ES,O=Diversión de Bicicleta,CN=mail1.DiversiondeBicicleta.com"

主题名称和域名

按照约定,公用名可以包含完全限定的域名 (FQDN)。尽管此做法很广泛,并且是建议做法,但必须了解以下两个问题。

第一,公用名字段的最大大小是 64 个字符。它的字符数少于 FQDN 的最大大小。因此,对于大于 64 个字符的 FQDN,必须将域名放在“主题备用名称”中。DomainName 参数是映射到生成的证书中的“主题备用名称”的参数。

第二,FQDN 只能使用 ASCII 字符集的一个子集。但是,公用名 (CN) 支持 Unicode。因此,可以用看起来像 DNS 名称但却是无效 DNS 名称的 CN 来创建有效证书。如果 CN 包含非 ASCII 字符,则要在证书 CN 中查找 FQDN 的软件将无法返回正确的结果。例如,如果创建主题名称为 CN=mail.mïcrosoft.com 的证书,则不会将该名称视为 FQDN,因为该名称包含 Unicode 字符(带读音符号的 ï 字符 (x00ef))。用肉眼看,Unicode CN 很容易被误认为是 FQDN,因为带读音符号的 ï 字符 (x00ef) 与 ASCII i (x0069) 之间的差异很小。Exchange 证书任务不要求也不强制主题 CN 是有效的 FQDN。默认情况下,这意味着 cmdlet 将服务器的 FQDN 作为默认 CN。

证书域名

对于 TLS,证书必须包含 DNS 名称,因为 TLS 是基于 DNS 的协议。客户端根据希望连接的 DNS 名称来验证所连接服务器的 DNS 名称。通过 HTTPS 连接到网站的 Web 浏览器和通过 Internet 或 Intranet 传输电子邮件的 SMTP 服务器均属这种情况。

由于以下原因,单个服务器可能支持多个 DNS 名称:

  • SMTP 服务器支持多个接受域

  • 客户端可以用服务器名称、域名、FQDN 本地名称或负载平衡名称来访问电子邮件服务器。

建立 TLS 连接时,如果客户端发现正在查找的名称,该客户端将忽略证书中的其他名称。可以将多个域名和服务器名称添加到 TLS 证书的“主题备用名称”字段中。通过使用 New-ExchangeCertificate cmdlet 的 DomainName 参数,可以创建包含多个“主题备用名称”的证书。DomainName 参数是多值参数,因此可以接受多个名称。

X.509 证书可以在主题备用名称 (SubjectAltName) 证书扩展中包含零个、一个或更多个 DNS 名称。SubjectAltName 扩展中的 DNS 名称应当与 DNS 名称的限制准确匹配。它们不得超过 255 个字符,并且必须由 A-Z、a-z、0-9 和短横线 (-) 组成。

域安全性功能的名称匹配逻辑

域安全性功能的证书名称匹配逻辑将检查接收的证书中的域名与向该域发送邮件时的域名是否相匹配。例如,考虑收件人域 woodgrovebank.com 的 FQDN。证书名称匹配逻辑将搜索证书中的所有 DNS 名称,只要有一个 DNS 名称相匹配,将认定该证书是与指定域相匹配的证书。

在此示例中,证书名称匹配逻辑接受与域完全匹配的证书,例如 woodgrovebank.com。同时,还支持在证书中使用通配符域名,以便接受 DNS 名称为 *.woodgrovebank.com 的证书作为相匹配的证书。有关通配符域名的详细信息,请参阅本主题后面部分的“通配符域名”。

证书名称匹配逻辑还将在一个节点深度的范围内搜索 DNS。因此,也接受 mail1.woodgrovebank.com 作为 woodgrovebank.com 的匹配项。但是,不接受深度超过两个节点的 DNS 名称。因此,例如,不会接受 mail1.us.woodgrovebank.com 作为 woodgrovebank.com 的匹配项。

有关 Exchange 如何选择证书的详细信息,请参阅 SMTP TLS 证书选择

Internet SMTP 域名的最佳实践

为通过 Internet 执行 SMTP TLS 的边缘传输服务器创建证书或证书请求时,应当包括在请求中的域名集是:

  • 服务器的完全限定的 Internet 域名   此名称可能不同于在边缘传输服务器和集线器传输服务器之间使用的内部 FQDN,应当与在 Internet(公用)DNS 服务器上发布的 A 记录相匹配。该名称应当作为 CN 在 New-ExchangeCertificate cmdlet 的 SubjectName 参数中输入。

  • 组织的所有接受域名   使用 New-ExchangeCertificate cmdlet 的 IncludeAcceptedDomain 参数可以填充结果证书的主题备用名称。

  • 连接器的 FQDN(如果它未被以前的项覆盖)   使用 New-ExchangeCertificate cmdlet 的 DomainName 参数可以填充结果证书的主题备用名称。

客户端访问服务器的域名的最佳实践

为客户端访问服务器创建证书或证书请求时,应当包括在请求中的域名集是:

  • 服务器的本地或 NetBIOS 名称,例如 owa1

  • 组织的所有接受域名称,例如 contoso.com

  • 服务器的完全限定的域名,例如 owa1.contoso.com

  • 域的自动发现域名,例如 Autodiscover.contoso.com

  • 服务器的负载平衡标识(如果正在使用一个),例如 owa.contoso.com

通配符域名

通配符域名是表示多个子域的特殊类型的域名。通配符域名可以使证书简化,这是因为单个通配符域名可以表示该域的所有子域。您可以在 DNS 节点中用星号字符 (*) 表示它们。例如,*.contoso.com 表示 contoso.comcontoso.com 的所有子域。使用通配符创建所有接受域的证书或证书请求时,可以极大地简化请求。

克隆现有证书

在安装期间,Exchange 2007 将创建自我签名的证书,该证书使用在安装时 Exchange 已知的所有服务器和域名。这些证书的有效期为 12 个月。在某些情况下,如果“主题”和“主题备用名称”可以用于其他计算机,则可能有必要克隆这些证书。应当知道只克隆证书元数据,而不克隆密钥集。

若要在安装了边缘传输服务器角色的计算机上运行以下 cmdlet,必须使用作为该计算机上的本地 Administrators 组成员的帐户进行登录。

若要从现有证书克隆新证书,必须首先通过运行以下命令识别该域的当前证书:

Get-ExchangeCertificate -DomainName mail1.contoso.com

其中,mail1.contoso.com 是要克隆其证书的服务器名称或 FQDN。

在输出中列出的第一个证书是该服务器的默认 SMTP TLS 证书。

若要克隆证书,请运行以下命令:

Get-ExchangeCertificate -Thumbprint c4248cd7065c87cb942d60f7293feb7d533a4afc | New-ExchangeCertificate

其中,Thumbprint 的值来自于在 Get-ExchangeCertificate 的输出中列出的第一个证书。

该命令从现有证书中提取以指纹标识的名称,并在新的自我签名证书中使用这些名称。

为第三方证书服务生成请求

如果要使用 CA 生成证书,则必须按照 CA 的要求提供证书请求。

若要生成证书请求,可以使用 New-ExchangeCertificate cmdlet。若要生成证书请求,请将 GenerateRequest 参数与 Path 参数一起使用,以定义将创建请求文件的位置。生成的文件将是 PKCS #10 请求 (.req) 文件。PKCS #10 是由 RFC 2314 (http://www.ietf.org/rfc/rfc2314.txt) 指定的证书请求语法标准。

note注意:
UNRESOLVED_TOKEN_VAL(exNote3rdPartyURL)

以下示例显示一些典型的证书请求。

第一个示例为 Contoso 的服务器 mail1 生成证书请求。“主题名称”的 CN 包含服务器的 FQDN,而“主题备用名称”包含 Contoso 的所有接受域的 FQDN。

New-ExchangeCertificate -GenerateRequest -SubjectName "c=us, o=contoso corp, cn=mail1.contoso.com" -IncludeAcceptedDomains -Path c:\certificates\mail1.contoso.com.req

第二个示例为 Contoso 的服务器 mail1 生成证书请求。Contoso 在每台 FQDN 为 mail.contoso.com 的边缘传输服务器上都有发送连接器。

New-ExchangeCertificate -GenerateRequest -SubjectName "C=US, O=contoso corp, CN=mail1.contoso.com" -IncludeAcceptedDomains -DomainName mail.contoso.com -Path c:\certificates\mail1.contoso.com.req

第三个示例从现有 Contoso.com 证书创建证书请求。

Get-ExchangeCertificate -Thumbprint c4248cd7065c87cb942d60f7293feb7d533a4afc | New-ExchangeCertificate -GenerateRequest -SubjectName "C=us, O=contoso corp, CN=mail1.contoso.com" -Path c:\ certificates\mail1.contoso.com.req

最后一个示例显示如何用表示所有 Contoso.com 子域的通配符创建证书请求。

New-ExchangeCertificate -GenerateRequest -SubjectName "C=us, O=contoso corp, CN=mail1.contoso.com" -DomainName *.contoso.com -Path c:\ certificates\mail1.contoso.com.req

有关更多示例,请参阅 Microsoft Exchange 工作组博客文章学习课程:通过第三方 CA 生成证书

note注意:
UNRESOLVED_TOKEN_VAL(exBlog)

安装从证书请求颁发的证书

向 CA 发送证书请求之后,CA 将颁发证书或证书链。在这两种情况下,证书都将作为文件传递,您必须用 Import-ExchangeCertificate cmdlet 安装这些文件。

important要点:
不要在 Exchange 服务器上使用“证书管理器”管理单元导入任何服务的证书。在 Exchange 服务器上使用“证书管理器”管理单元导入证书的操作将失败。因此,TLS 或其他 Exchange 证书服务将无法使用。

以下示例显示如何导入用于 SMTP TLS 的证书

Import-ExchangeCertificate -Path c:\certificates\newcert.cer | Enable-ExchangeCertificate -Services SMTP

下一个示例显示如何导入证书,并为支持邮局协议版本 3 (POP3) 客户端的客户端访问服务器启用该证书。

Import-ExchangeCertificate -Path c:\certificates\newcert.p7b | Enable-ExchangeCertificate -Services IIS,POP

详细信息

有关目前运营着 Exchange 专用网站的证书颁发机构的详细信息,请参阅 Microsoft 知识库文章 929395 Exchange 2007 和 Communications Server 2007 的统一通信证书伙伴(英文)。

有关加密和证书的技术及概念的详细信息,请参阅以下出版物: