在 C# 中更新 Exchange 服务器证书

Update Exchange Server Certificate in C#

我的目标是从 C# 应用程序中更新 Exchange 服务器的证书,就像 Enable-ExchangeCertificate PS Cmdlet 所做的那样。

我已经为 IIS 编写了一个更新程序,它使用 Microsoft.Web.Administration 访问和操作 IIS 站点和绑定。我在 Google 和 VS 库中搜索了 Exchange API 工具,但没有任何运气。我只能找到对 EWS(Exchange Web 服务)的引用,它无法更新服务器证书 AFAIK。

有没有API可以用的? Enable-ExchangeCertificate 如何提供功能?如果其他所有方法都失败,我也在考虑只使用 PS Cmdlet,但我希望有一个独立的应用程序可以依赖。无需远程服务器管理,仅本地主机即可。

tl;dr 如何在 C# 中更新本地 Exchange 服务器证书?

编辑 我会进一步研究 EWS API (https://github.com/OfficeDev/ews-managed-api/blob/master/README.md),看起来它可能会完成这项工作。它提供程序集来访问 EWS 数据,但我还没有找到任何 API 专门用于证书管理的调用。

MS Exchange 中有多个部分未包含在 API 中。这主要是出于安全原因或它非常复杂,因此不需要 API(例如 Exchange 架构更新)。

Microsoft 的正常方法仅包括两个步骤:

  1. 备份当前配置和 SSL 证书(可选)

  2. 导入证书

Import-ExchangeCertificate -FileData ([Byte[]]$(Get-Content -Path c:\certificates\YOUR_CERTIFICATE.cer -Encoding byte -ReadCount 0))

但有些人使用 MMC 并且它也能正常工作(因此您可以为这部分的 MMC 检查 API)。

  1. 启用它

Enable-ExchangeCertificate -Thumbprint 1234ae0567a72fccb75b1d0198628675333d010e -Services POP,IMAP,SMTP,IIS

我假设没有这样的 API 因为它真的不需要一个。通常 SSL 证书的有效期为 3 年。因此,您需要 运行 每 3 年执行 1 次以上的命令,第三方访问此部分没有任何意义,因为它不会经常使用,因此 Microsoft 没有构建一个。

在这里为您提供更多信息。 Microsoft 的 SSL 证书信息保存在两个位置。一个在本地注册表中,一个在 Microsoft Active Directory 中(参见 here:使用 Active Directory 轻型目录服务 (AD LDS) 的本地实例来读取和写入数据)。在没有 Microsoft 支持的情况下处理对 ActiveDirectory 的更改可能非常危险,这意味着如果导致问题,Microsoft 将不提供任何支持。所以我会在您的应用程序中使用 powershell 方法 Enable-ExchangeCertificate。

P.S。我永远不会在我的 Exchange 服务器上 运行 一个未知的插件,它会替换我可以通过简单的 powershell 命令完成的 SSL 证书。该插件可能会导致很多其他问题,并且可能包含很多不是这样的东西 "nice"。因此,在您将时间浪费在该项目之前,请考虑是否真的有观众。