为证书颁发机构创建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证书请求