为证书颁发机构创建 Exchange Server 证书请求

创建证书请求是在 Exchange 服务器上安装新证书,为一个或多个 Exchange 服务配置传输层安全性 (TLS) 加密的第一步。 使用证书请求(也称为证书签名请求或 CSR)从证书颁发机构 (CA) 获取证书。 从内部 CA (获取证书的过程相同,例如 Active Directory 证书服务) 或从商业 CA 获取证书。 创建证书请求后,将结果发送到 CA,CA 使用该信息颁发实际证书,稍后会安装该证书。

可以在 Exchange 管理中心 (EAC) 或 Exchange 命令行管理程序中创建证书请求。 EAC 中的 “新建 Exchange 证书 ”向导可帮助你选择证书中所需的主机名。

开始前,有必要了解什么?

  • 你必须先获得权限,然后才能执行此过程或多个过程。 有关所需权限的详细信息,请参阅 客户端和移动设备权限 一文中的“客户端访问服务安全性”条目。

  • 估计完成时间:5 分钟即可完成新证书请求。 但是,在请求导致颁发证书之前,需要更多时间。 有关详细信息,请参阅后续步骤

  • 您需要经过认真规划,再选择需要的证书类型及证书中需要的主机名。 有关详细信息,请参阅 Exchange Server 中的数字证书和加密

  • 验证是否符合 CA 的证书请求要求。 Exchange 生成一个 PKCS #10 请求 (.req) 文件,该文件使用 Base64 (默认) 或可分辨编码规则 (DER) 编码,其 RSA 公钥为 1024、2048 (默认) 或 4096 位。 编码和公钥选项仅在 Exchange 命令行管理程序中可用。 有关详细信息,请参阅 New-ExchangeCertificate

  • 在 EAC 中,需要将证书请求文件存储在 UNC 路径 (\\<Server>\<Share>\\\<LocalServerName>\c$\) 。 在 Exchange 命令行管理程序中,可以指定本地路径。

  • 若要了解如何在本地 Exchange 组织中打开 Exchange 命令行管理程序,请参阅 Open the Exchange Management Shell

  • 有关可能适用于本文中的过程的键盘快捷方式的详细信息,请参阅 Exchange 管理中心中的键盘快捷方式

提示

是否有任何疑问? 请在 Exchange 论坛中寻求帮助。 请访问以下论坛:Exchange ServerExchange OnlineExchange Online Protection

使用 EAC 创建新的证书请求

注意

在 Exchange 2019 CU12 及更高版本以及 Exchange 2016 CU23 及更高版本中,ECP 证书请求已弃用。

  1. 打开 EAC 并导航到 “服务器>证书”。

  2. “选择服务器” 下拉列表中,选择要在其中安装证书的 Exchange 服务器,然后选择“ 添加”图标

“新建 Exchange 证书”向导打开。

  1. 在“ 此向导将创建新证书或证书请求文件 ”页上,验证是否已选择“ 从证书颁发机构创建证书请求 ”,然后选择“ 下一步”。

    注意

    若要创建新的自签名证书,请参阅 创建新的 Exchange Server 自签名证书

  2. 在此 证书的“友好名称 ”页上,输入证书的描述性名称,然后选择“ 下一步”。

  3. 在“申请通配符证书”页面上,选择下列选项之一:

    • 如果需要通配符证书:选择“ 请求通配符证书”,然后在“ 域”框中输入通配符 (*) 和域,例如 *.contoso.com 或 *.eu.contoso.com。 完成后,请选择“下一步”。
    • 如果想要 (SAN) 证书的使用者可选名称:不要在此页上选择,然后选择“ 下一步”。
    • 如果需要单个主机的证书:在此页上不进行任何选择,然后选择“ 下一步”。
  4. 在“ 在此服务器上存储证书请求 ”页上,选择“ 浏览 ”,然后选择要在其中存储证书请求的 Exchange 服务器, (要在其中安装证书) 。 然后,选择“ 确定 ”和“ 下一步”。

    注意

    步骤 7 和 8 仅适用于 SAN 证书或单个主机的证书请求。 如果选择了 “请求通配符证书”,请跳到步骤 9。

此时会显示 “指定要包含在证书中的域 ”页。 此页基本上是一个工作表,可帮助你确定以下 Exchange 服务的证书中所需的内部和外部主机名:

  • Outlook 网页版
  • 脱机通讯簿生成 (OAB)
  • Exchange Web 服务
  • Exchange ActiveSync
  • 自动发现
  • 流行
  • IMAP
  • Outlook Anywhere
  1. 根据内部或外部) 的位置 (为每个服务输入一个值。 然后,向导确定证书中所需的主机名,并且信息将显示在下一页上。

  2. 如果要修改服务的值,请选择 “编辑 ” (“编辑”图标。) 并输入要使用的主机名值, (或删除) 的值。 完成后,请选择“下一步”。

    注意

    如果您已经确定了证书中所需的主机名的值,则您无需在此页上填写信息。 而是选择“ 下一步 ”,在下一页上手动输入主机名。

将显示“根据你的选择,以下域将包含在证书”页中。 此页列出将包含在证书请求中的主机名。 证书的 “使用者 ”框中使用的主机名是粗体,很难看出是否选择了该主机名。

  1. 通过引用在上一页上所做的选择来验证证书中所需的主机名条目。

    如果不想考虑此主机名列表以包含在证书请求中,请转到步骤 10。

  2. 通过执行以下步骤,忽略最后一页中的值并添加、编辑或删除主机名值:a。 如果需要 SAN 证书:若要选择证书的 “使用者 ”字段的主机名,请选择值,然后选择“ 设置为公用名 ” (复选标记) 。 此时值应以粗体显示。 b. 如果需要单个主机名的证书:一次选择其他值一个,然后选择 “删除 (删除”图标。) 。

    注意

    无法删除将用于证书的 “使用者 ”框的加粗主机名值。 首先,需要选择或添加其他主机名,然后选中 “设为公用名 ”框。 如果选择“ 后退 ”按钮,则在此页上所做的更改可能会丢失。

  3. 在“指定有关你组织的信息”页面,输入以下值:

  • 组织名称
  • 部门名称
  • 市/位置
  • 省/市/自治区
  • 国家/地区名称

注意

这些 X.500 值包含在证书的 “使用者 ”框中。 尽管在继续操作之前,每个字段中都需要一个值,但 CA 可能不关心某些字段 (例如“部门名称) ”,而其他字段 (重要,例如“国家/地区名称和组织名称) ”。 检查 CA 的 “主题 ”框要求。

  1. 完成后,请选择“下一步”。

  2. “将证书请求保存到以下文件 ”页上,输入证书请求的 UNC 路径和文件名, \\FileServer01\Data\ExchCertRequest.req例如 。 完成后,选择“ 完成”。

The certificate request appears in the list of Exchange certificates with a status value of Pending. 有关后续步骤的详细信息,请参阅 后续步骤 部分。

使用 Exchange 命令行管理程序创建新的证书请求

若要为通配符证书、SAN 证书或单个主机创建证书的新请求,请使用以下语法:

  • 如果需要将证书请求文件 的内容 发送到 CA,请使用以下语法创建 Base64 编码的请求文件:

    $txtrequest = New-ExchangeCertificate -PrivateKeyExportable $True -GenerateRequest [-FriendlyName <DescriptiveName>] -SubjectName C=<CountryOrRegion>[,S=<StateOrProvince>,L=<LocalityOrCity>,O=<Organization>,OU=<Department>],CN=<HostNameOrFQDN> [-DomainName <Host1>,<Host2>...] [-KeySize <1024 | 2048 | 4096>] [-Server <ServerIdentity>]
    [System.IO.File]::WriteAllBytes('<FilePathOrUNCPath>\<FileName>.req', [System.Text.Encoding]::Unicode.GetBytes($txtrequest))
    
  • 如果需要将 证书请求文件 发送到 CA,请使用以下语法创建 DER 编码的请求文件:

    $binrequest = New-ExchangeCertificate -PrivateKeyExportable $True -GenerateRequest -BinaryEncoded [-FriendlyName <DescriptiveName>] -SubjectName C=<CountryOrRegion>[,S=<StateOrProvince>,L=<LocalityOrCity>,O=<Organization>,OU=<Department>],CN=<HostNameOrFQDN> [-DomainName <Host1>,<Host2>...] [-KeySize <1024 | 2048 | 4096>] [-Server <ServerIdentity>]
    [System.IO.File]::WriteAllBytes('<FilePathOrUNCPath>\<FileName>.pfx', $binrequest.FileData)
    

注意

(证书的“使用者”框) 运行命令,X.500 SubjectName 参数值的唯一必需部分是 CN=<HostNameOrFQDN>。 但是,应始终包含 C=<CountryOrRegion> 值。 否则,可能无法续订证书。 检查 CA 的 “主题 ”框要求。 如果不使用 KeySize 参数,则证书请求具有 2048 位 RSA 公钥。 如果不使用 Server 参数,则命令将在本地 Exchange 服务器上运行。

有关语法和参数的详细信息,请参阅 New-ExchangeCertificate

通配符证书请求

这些示例使用以下属性为通配符证书创建证书请求文件:

  • SubjectName:*.contoso.com 位于美国,需要值 C=US,CN=*.contoso.com
  • RequestFile\\FileServer01\Data\Contoso Wildcard Cert.<cer or pfx>
  • FriendlyName:Contoso.com 通配符证书

若要为通配符证书创建 Base64 编码的请求文件,请运行以下命令:

$txtrequest = New-ExchangeCertificate -PrivateKeyExportable $True -GenerateRequest -FriendlyName "Contoso.com Wildcard Cert" -SubjectName "C=US,CN=*.contoso.com"
[System.IO.File]::WriteAllBytes('\\FileServer01\Data\Contoso Wildcard Cert.req', [System.Text.Encoding]::Unicode.GetBytes($txtrequest))

若要为通配符证书创建 DER 编码的请求文件,请运行以下命令:

$binrequest = New-ExchangeCertificate -PrivateKeyExportable $True -GenerateRequest -BinaryEncoded -FriendlyName "Contoso.com Wildcard Cert" -SubjectName "C=US,CN=*.contoso.com"
[System.IO.File]::WriteAllBytes('\\FileServer01\Data\Contoso Wildcard Cert.pfx', $binrequest.FileData)

SAN 证书请求

这些示例使用以下属性为 SAN 证书创建证书请求文件:

  • SubjectName:在美国 mail.contoso.com,需要值 C=US,CN=mail.contoso.com。 此 CN 值自动包含在 DomainName 参数中, (“使用者可选名称” 字段) 。
  • 其他 使用者可选名称 字段值:
    • autodiscover.contoso.com
    • legacy.contoso.com
    • mail.contoso.net
    • autodiscover.contoso.net
    • legacy.contoso.net
  • RequestFile\\FileServer01\Data\Contoso SAN Cert.<cer or pfx>
  • FriendlyName:Contoso.com SAN Cert
  • DomainName:未带引号的逗号分隔的域列表

若要为 SAN 证书创建 Base64 编码的请求文件,请运行以下命令:

$txtrequest = New-ExchangeCertificate -PrivateKeyExportable $True -GenerateRequest -FriendlyName "Contoso.com SAN Cert" -SubjectName "C=US,CN=mail.contoso.com" -DomainName autodiscover.contoso.com,legacy.contoso.com,mail.contoso.net,autodiscover.contoso.net,legacy.contoso.net
[System.IO.File]::WriteAllBytes('\\FileServer01\Data\Contoso SAN Cert.req', [System.Text.Encoding]::Unicode.GetBytes($txtrequest))

若要为 SAN 证书创建 DER 编码请求文件,请运行以下命令:

$binrequest = New-ExchangeCertificate -PrivateKeyExportable $True -GenerateRequest -BinaryEncoded -FriendlyName "Contoso.com SAN Cert" -SubjectName "C=US,CN=mail.contoso.com" -DomainName autodiscover.contoso.com,legacy.contoso.com,mail.contoso.net,autodiscover.contoso.net,legacy.contoso.net
[System.IO.File]::WriteAllBytes('\\FileServer01\Data\Contoso SAN Cert.pfx', $binrequest.FileData)

单使用者证书请求

这些示例为具有以下属性的单一使用者证书创建证书请求文件:

  • SubjectName:在美国 mail.contoso.com,需要值 C=US,CN=mail.contoso.com
  • RequestFile\\FileServer01\Data\Mail.contoso.com Cert.<cer or pfx>
  • FriendlyName:Mail.contoso.com 证书

若要为单一使用者证书创建 Base64 编码请求文件,请运行以下命令:

$txtrequest = New-ExchangeCertificate -PrivateKeyExportable $True -GenerateRequest -FriendlyName "Mail.contoso.com Cert" -SubjectName "C=US,CN=mail.contoso.com"
[System.IO.File]::WriteAllBytes('\\FileServer01\Data\Mail.contoso.com Cert.req', [System.Text.Encoding]::Unicode.GetBytes($txtrequest))

若要为单一使用者证书创建 DER 编码请求文件,请运行以下命令:

$binrequest = New-ExchangeCertificate -PrivateKeyExportable $True -GenerateRequest -BinaryEncoded -FriendlyName "Mail.contoso.com Cert" -SubjectName "C=US,CN=mail.contoso.com"
[System.IO.File]::WriteAllBytes('\\FileServer01\Data\Mail.contoso.com Cert.pfx', $binrequest.FileData)

你如何知道这些命令的工作原理?

若要验证是否已成功创建新的证书请求,请执行以下步骤之一:

  • “服务器>证书”处的 EAC 中,验证是否选择了存储证书请求的服务器。 请求应位于证书列表中, 其 Status 参数的值设置为 “挂起请求”。

  • 在用于存储证书请求的服务器上的 Exchange 命令行管理程序 中,运行以下命令:

    Get-ExchangeCertificate | where {$_.Status -eq "PendingRequest" -and $_.IsSelfSigned -eq $false} | Format-List FriendlyName,Subject,CertificateDomains,Thumbprint
    

后续步骤

Base64 编码证书请求文件的内容如下所示:

-----BEGIN NEW CERTIFICATE REQUEST-----
MIIEBjCCAu4CAQAwYzEWMBQGA1UEAwwNKi5jb250b3NvLmNvbTELMAkGA1UECwwC
SVQxEDAOBgNVBAoMB0NvbnRvc28xEDAOBgNVBAcMB1NlYXR0bGUxCzAJBgNVBAgM
AldBMQswCQYDVQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
ANZFK6JxcQMEBitJcEC82vCvr6251o28CMmrpIkl7Z0MnkCrU+BMTLBuZnIgaLvb
jlzORvH6DP/dbyR8gQEAHVrXVWdr3AJIRbqQXWwN++BM5b2O6lIrA8w41XwGNu6r
dtddi+POf8UYwot7PXw6wDsbKaTs1ePVK/0XdemdJCFIXNfCT8LY4p/KryQAyquo
XDa+Acbx7TRxG2kXNAxgPGve+mvyCyizbugXAJIz4nugJ2k/X1kGYDc7f/b80tCv
bPTcGCr09ScsbKmsQcqJ7UxiX2tScpO5AQxNxJHGL+bA6+96FBjPnFZaqPbFgI74
N6hmZdSEDgQlaGfLEGjZBGMCAwEAAaCCAVwwGgYKKwYBBAGCNw0CAzEMFgo2LjEu
NzYwMS4yMEwGCSqGSIb3DQEJDjE/MD0wDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB
/wQCMAAwHQYDVR0OBBYEFNRw1o74zcuGyky33rl7WChgdQrlMHIGCisGAQQBgjcN
AgIxZDBiAgEBHloATQBpAGMAcgBvAHMAbwBmAHQAIABSAFMAQQAgAFMAQwBoAGEA
bgBuAGUAbAAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkA
ZABlAHIDAQAwfAYJKwYBBAGCNxUUMW8wbQIBBQwrRVhIUi0zMjQ4LkVYSFItMzI0
OGRvbS5leHRlc3QubWljcm9zb2Z0LmNvbQwXRVhIUi0zMjQ4RE9NXEVYSFItMzI0
OCQMIk1pY3Jvc29mdC5FeGNoYW5nZS5TZXJ2aWNlSG9zdC5leGUwDQYJKoZIhvcN
AQEFBQADggEBAL63qVj1m2mBz53+nilnlFweOlcltXoxaF28+Kf0hrJVbH5a2Jme
tS0iKU8YXU3mZ3NnWco+5ea024f9awMIzg4z/heE5yEUFf9UtwRGSOc84r2QexPa
zT/rveTTcbliKU0EFhporl3C2uuBCdAewyLj+/k0hABH3djnmMONG6NyC5f+wMun
kkH5naiSLdsTYbq8jkWYuSqL0qdhtmauqWeAPpA0hKDkQk5eDWpOGx3mgxiaQumo
Rqw6dmQ+o8TC+lE3Tvgdfv47A84X8H7Y9h8liS4h0OfbsgEQb8LcM0YHD6yvPgcD
JCmt8A7JFHF9u6mghjiKlXaZ/i+2l10Wsu8=
-----END NEW CERTIFICATE REQUEST-----

您需要将此信息发送到 CA。 发送方式取决于 CA,但通常以电子邮件或 CA 网站上的证书请求表单的形式发送文件内容。

如果 CA 需要由 DER 编码的二进制证书请求(您使用了带 BinaryEncoded 开关的 New-ExchangeCertificate cmdlet),通常您应将整个证书请求文件发送到 CA。

从 CA 收到证书后,您需要完成待处理的证书请求。 有关详细信息,请参阅 完成挂起的 Exchange Server 证书请求