本指南将向您展示如何在 Microsoft Exchange Server 中生成 CSR(证书签名请求)。内容涵盖当前发行版本(Exchange Server Subscription Edition 和 Exchange 2019 CU15+),使用 PowerShell 和 Exchange 管理中心两种方式;也涵盖 Exchange 2016(CU23+)和 Exchange 2019 CU12 至 CU14 中仅支持 PowerShell 的方式;以及针对旧版 Exchange 2013、2010、2007 和 2003 的存档参考步骤。
本教程仅适用于本地部署的 Microsoft Exchange Server。如果您使用 Microsoft 365 中的Exchange Online,则不需要生成 CSR:您的 *.mail.protection.outlook.com 和 *.outlook.com 端点的 TLS 由 Microsoft 管理,无法替换为第三方证书。
我应该使用哪种方法?
Exchange 在不同版本中处理证书管理的方式不同。Microsoft 在 Exchange 2016 CU23(2021 年 9 月)和 Exchange 2019 CU12(2022 年 4 月)中移除了 Exchange 管理中心(EAC)的证书选项,随后在 Exchange 2019 CU15(2025 年 2 月)和 Exchange Server Subscription Edition(于 2025 年 7 月 1 日发布)中将其恢复。开始操作前,请先检查您的版本和 CU。
要查看您的版本号,请在 Exchange Management Shell 中运行以下命令:
Get-ExchangeServer | Format-List Name,AdminDisplayVersion
| Exchange 版本 | CSR 方法 | 备注 |
|---|---|---|
| Exchange Server SE(2025+) | EAC 或 PowerShell | 当前产品版本,代码与 2019 CU15 相同。 |
| Exchange 2019 CU15 | EAC 或 PowerShell | 2019 系列的最终 CU 版本,EAC 证书向导已恢复。 |
| Exchange 2019 CU12 至 CU14 | 仅支持 PowerShell | EAC 证书选项已被 KB5014278 移除。 |
| Exchange 2016 CU23+ | 仅支持 PowerShell | EAC 证书选项已移除;自 2025 年 10 月 14 日起不再获得主流支持。 |
| Exchange 2013 | EAC 或 PowerShell | 已停止支持(2023 年 4 月 11 日)。请尽快迁移。 |
| Exchange 2010、2007、2003 | 旧版 GUI / shell | 早已停止支持,仅供存档参考。 |
请选择下方与您的版本对应的章节:
- Exchange Server SE、Exchange 2019 和 Exchange 2016(现代 PowerShell 方法,以及 SE 和 2019 CU15+ 上的 EAC 方法)。
- Exchange 2013(存档 EAC 步骤)。
- Exchange 2010、Exchange 2007、Exchange 2003(存档内容,已停止支持)。
在 Exchange Server SE、Exchange 2019 和 Exchange 2016 上生成 CSR
下方的 PowerShell 方法适用于从 Exchange 2013 到 Exchange Server SE 的所有受支持版本,并且是 Exchange 2016(CU23+)和 Exchange 2019 CU12 至 CU14 上唯一受支持的方法。在 Exchange Server SE 和 Exchange 2019 CU15+ 上,您也可以使用 EAC 向导,相关内容在 PowerShell 流程之后介绍。
方法一:PowerShell(Exchange Management Shell)
在将持有私钥的 Exchange 服务器上,以管理员身份打开Exchange Management Shell。使用 -GenerateRequest 运行 New-ExchangeCertificate cmdlet,然后使用 Set-Content 将返回的 CSR 文本保存到文件中。这种两步操作是必需的,因为 Microsoft 在 Exchange 2016 CU23 和 Exchange 2019 CU12(安全更新 KB5014278)中从该 cmdlet 中移除了 -RequestFile 参数。直接传递 -RequestFile 或 -Path 的旧版指南在当前版本上将会失败。
New-ExchangeCertificate `
-GenerateRequest `
-SubjectName "C=US, S=California, L=San Francisco, O=Example Inc, OU=IT, CN=mail.example.com" `
-DomainName mail.example.com, autodiscover.example.com `
-KeySize 2048 `
-PrivateKeyExportable $true `
| Set-Content -Path "C:certsexchange.req"
请根据您的环境修改以下值:
- C 是两字母国家代码(US、GB、DE 等)。
- S 是州或省的完整名称(请勿使用缩写)。
- L 是城市或地区的完整名称。
- O 是合法注册的公司名称。
- OU 是部门名称,通常为“IT”。此字段为可选项。
- CN 是证书要保护的主要完全限定主机名,例如 mail.example.com。
- -DomainName 是以逗号分隔的列表,包含证书必须覆盖的所有主机名(主题备用名称)。对于典型的 Exchange 部署,至少应列出 mail.example.com 和 autodiscover.example.com。还应添加客户端使用的其他名称:webmail、owa、EWS 主机、混合部署主机名等。
- -KeySize 2048 符合 CA/Browser Forum 的基线要求。仅当您的策略要求时,才使用 3072 或 4096。
- -PrivateKeyExportable $true 使您以后可以导出密钥用于备份,或用于同一 DAG 中的其他 Exchange 节点。
通配符证书。对于通配符证书,请将 CN 和某个 DomainName 条目设置为通配符模式,例如 CN=*.example.com 和 -DomainName *.example.com,example.com。请注意,某些 Exchange 功能(尤其是旧版本上的 Outlook Anywhere)历来对通配符存在限制;对于生产环境,我们建议使用明确列出每个主机名的多域(SAN)证书。
cmdlet 运行完成后,在记事本中打开保存的文件,确认其看起来像是标准的 PEM 格式 CSR:
-----BEGIN NEW CERTIFICATE REQUEST-----
MIIC6TCCAdECAQAwgaMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlh
...
-----END NEW CERTIFICATE REQUEST-----
复制整个代码块,包括BEGIN和END这两行(每边各五个连字符),然后将其粘贴到您的 SSL 订单的 CSR 字段中。如果您想在提交前解码并检查 CSR,可以使用我们的CSR 解码器,确认通用名称、SAN 和密钥长度是否正确。
在您使用签发的证书完成请求之前,待处理的请求会保留在此 Exchange 服务器上。使用以下命令列出待处理请求:
Get-ExchangeCertificate | Where-Object {$_.Status -eq "PendingRequest"} | Format-List FriendlyName,Thumbprint,Subject
方法二:Exchange 管理中心(仅适用于 Exchange Server SE 和 2019 CU15+)
EAC 证书向导已在 Exchange Server SE 和 Exchange 2019 CU15 上重新可用。如果您使用的是 Exchange 2016(CU23 及以后的任何 CU)、Exchange 2019 CU12、CU13 或 CU14,则该向导不存在:请改用上面的 PowerShell 方法。
- 使用具有组织管理角色的账户登录 EAC,地址为 https://<exchange-server>/ecp。
- 转到服务器 > 证书。
- 在选择服务器下拉列表中,选择将持有私钥的 Exchange 服务器。
- 点击+按钮以启动新建 Exchange 证书向导。
- 选择创建向证书颁发机构申请证书的请求,然后点击下一步。
- 输入一个便于日后识别该证书的友好名称,例如 mail.example.com 2026。这仅是一个标签。
- 如需通配符证书,请勾选请求通配符证书并输入根域名(例如 example.com)。如需标准证书或多域(SAN)证书,请不要勾选此框,然后点击下一步。
- 点击浏览并选择应存储证书请求的 Exchange 服务器,然后点击下一步。
- 如果您没有请求通配符证书,请选择证书要保护的服务(OWA、ECP、Outlook Anywhere、OAB、Autodiscover、POP、IMAP),然后点击下一步。Exchange 将据此建议 SAN 列表。
- 查看主机名列表,使用+和减号按钮添加或删除名称,并确认主要通用名称。点击下一步。
- 填写您的组织详细信息:合法组织名称、部门、国家/地区、城市以及州或省。请使用完整拼写(不要使用缩写)。
- 在将证书请求保存到以下文件下,输入您日后可以访问的路径,例如 \exch01c$certsexchange.req,然后点击完成。
- 在记事本中打开保存的 .req 文件,复制包括 —–BEGIN NEW CERTIFICATE REQUEST—– 和 —–END NEW CERTIFICATE REQUEST—– 标记的全部文本,并将其粘贴到您的 CA 的订单表单中。
CA 签发证书后,返回服务器 > 证书,选择待处理请求,然后点击完成。按照我们的Exchange SSL 安装指南中的步骤完成安装并分配服务。
在 Exchange 2013 上生成 CSR(旧版)
旧版提示:Exchange 2013 已于 2023 年 4 月 11 日停止支持,不再接收安全更新。请规划迁移到 Exchange Server SE。以下步骤仅供存档参考。
- 打开 https://<server>/ecp 处的 EAC 并登录。
- 转到服务器 > 证书,并在下拉列表中选择目标服务器。
- 点击+图标启动新建 Exchange 证书向导。
- 选择创建向证书颁发机构申请证书的请求,点击下一步。
- 输入友好名称,然后点击下一步。
- 如需通配符证书,请勾选通配符框并输入根域名(例如 *.example.com);否则请不要勾选。点击下一步。
- 点击浏览并选择应存储私钥的服务器,然后点击下一步。
- 选择证书要保护的 Exchange 服务(OWA、ECP、Outlook Anywhere、Autodiscover、SMTP、POP、IMAP),然后点击下一步。
- 查看 SAN 列表,使用+添加缺失的主机名,删除不需要的条目,然后点击下一步。
- 填写组织详细信息(合法名称、部门、国家、城市、州),然后点击下一步。
- 输入应保存 .req 文件的 UNC 路径(例如 \exch01c$certsexchange.req),然后点击完成。
- 在记事本中打开该文件,并将整个代码块(包括 BEGIN 和 END 这两行)复制到您 CA 的 CSR 字段中。
签发的证书到达后,在同一个证书界面中完成待处理请求,然后继续安装。
在 Exchange 2010 上生成 CSR(旧版)
旧版提示:Exchange 2010 已于 2020 年 10 月 13 日停止扩展支持。它不再接收安全更新,不应用于面向公众的服务。这里保留相关步骤仅供维护隔离内部系统的团队参考。
- 从开始 > 所有程序 > Microsoft Exchange Server 2010 启动Exchange 管理控制台。
- 在左侧树状目录中,展开Microsoft Exchange 本地部署并点击服务器配置。
- 在右侧的操作窗格中,点击新建 Exchange 证书。
- 在简介界面中,输入友好名称,然后点击下一步。
- 在域范围中,对于标准证书请保持通配符框未选中;对于通配符证书,请勾选并输入根域名(例如 *.example.com),然后点击下一步。
- 在Exchange 配置下,选择应受保护的服务(OWA、Outlook Anywhere、Autodiscover、POP、IMAP、SMTP、统一消息),然后点击下一步。
- 在证书域中,添加通用名称(主要 FQDN),点击设置为通用名称,然后点击下一步。
- 填写组织和位置详细信息:完整的合法组织名称、部门、国家、城市和州,然后点击浏览并为 .req 文件选择保存位置和文件名。点击保存,然后依次点击下一步、新建和完成。
- 用记事本打开保存的文件,将全部内容(包括 —–BEGIN NEW CERTIFICATE REQUEST—– 和 —–END NEW CERTIFICATE REQUEST—– 这两行)复制到您 CA 的订单表单中。
CA 签发证书后,返回 Exchange 管理控制台完成待处理请求。
在 Exchange 2007 上生成 CSR(旧版)
旧版提示:Exchange 2007 已于 2017 年 4 月 11 日停止扩展支持。以下步骤仅供存档参考。
- 打开开始 > 所有程序 > Microsoft Exchange Server 2007 > Exchange Management Shell。
- 在记事本中修改下方 cmdlet,然后将其粘贴到 shell 中。将示例主题值替换为您真实的组织详细信息和需要保护的主机名。
New-ExchangeCertificate `
-GenerateRequest `
-SubjectName "C=US, S=California, L=San Francisco, O=Example Inc, OU=IT, CN=mail.example.com" `
-DomainName mail.example.com, autodiscover.example.com `
-KeySize 2048 `
-PrivateKeyExportable $true `
-Path C:certsexchange.req
在 Exchange 2007 上,原始的 -Path 参数仍然有效(KB5014278 中的 UNC 路径限制仅适用于 Exchange 2016 和 2019)。请按照上面现代 PowerShell 部分相同的方式编辑主题字段:
- C、S、L、O、OU和CN遵循标准的 X.509 主题惯例。
- -DomainName 接受以逗号分隔的 SAN 列表。对于通配符证书,请使用 *.example.com。
- -KeySize 2048 是公共 CA 接受的最小密钥长度。
- -PrivateKeyExportable $true 使您以后可以导出证书和密钥。
- -Path 是将写入 CSR 的本地文件。
cmdlet 完成后,在记事本中打开该文件,并将完整的 PEM 代码块(包括每边各五个连字符的 BEGIN 和 END 这两行)复制到您 CA 的 CSR 字段中。
在 Exchange 2003 上生成 CSR(旧版)
旧版提示:Exchange 2003 已于 2014 年 4 月 8 日停止扩展支持。它不适用于任何面向公众的基础设施,而且现代公共 CA 可能拒绝签发 2003 时代客户端能够验证的 SHA-256 证书。请尽快迁移。
Exchange 2003 本身没有包含证书请求工具。CSR 的生成由底层的 IIS 6 Web 服务器处理,然后通过 Exchange 系统管理器将签发的证书绑定到 Exchange 虚拟协议服务器(SMTP、POP3、IMAP4)上。请参照我们的配套指南如何在 Microsoft IIS 中生成 CSR(IIS 6 部分)生成请求,然后返回您的 CA 订购证书。
提交前验证您的 CSR
在将 CSR 粘贴到订单表单之前,请先解码它以确认信息正确。通用名称中的拼写错误、缺失的 SAN 或过短的密钥长度都会导致订单被拒绝,或迫使您日后免费重新签发。将您的 CSR 粘贴到我们的CSR 解码器中,即可查看通用名称、完整的 SAN 列表、组织、国家、签名算法和密钥长度。
CA 验证请求并签发证书后,请继续参照我们的分步Exchange SSL 安装指南,导入证书并将其分配给 IIS、SMTP 以及您运行的其他任何服务。

