我的目标是从 C# 应用程序中更新 Exchange 服务器的证书,就像Enable-ExchangeCertificate
PS Cmdlet 一样。
我已经为 IIS 编写了一个更新程序,它使用Microsoft.Web.Administration
来访问和操作 IIS 站点和绑定。我已经在Google和VS Libraries中搜索了Exchange API工具,但没有任何运气。我只能找到对 EWS(Exchange Web 服务)的引用,它无法更新服务器证书 AFAIK。
是否有可以使用的 API?Enable-ExchangeCertificate
如何提供这些功能?如果所有其他方法都失败了,我也在考虑只使用 PS Cmdlet,但我想有一个独立的应用程序可以依赖。无需远程服务器管理,仅本地主机就可以了。
tl;dr 如何在 C# 中更新本地 Exchange Server 证书?
编辑我将进一步研究 EWS API(https://github.com/OfficeDev/ews-managed-api/blob/master/README.md),看起来它可以完成这项工作。它提供了程序集来访问 EWS 数据,但我还没有找到任何专门用于证书管理的 API 调用。
MS Exchange 中有多个部分未被 API 覆盖。这主要是由于安全原因,或者因为它非常复杂,因此不需要API(例如Exchange Schema更新)。
正常的Microsoft方式只包括两个步骤:
-
备份当前配置和SSL证书(可选)
-
导入证书
Import-ExchangeCertificate -FileData ([byte[]]$(get-content -path c:\certificates\YOUR_CERTIFICATE.cer -编码字节 -读取计数 0))
但是有些人使用 MMC,这也在工作(所以你可以检查这部分的 MMC API)。
- >启用它
启用交换证书 - 指纹 1234ae0567a72fcb75b1d0198628675333d010e -服务 POP,IMAP,SMTP,IIS
我假设没有这样的 API,因为它实际上并不需要一个。通常,SSL证书的有效期为3年。因此,您需要每 3 年运行一次 1x 以上的命令,并且第三方访问此部分没有任何意义,因为它不会经常使用,因此Microsoft没有构建一个。
在这里为您提供更多信息。Microsoft的 SSL 证书信息保存在两个位置。一个在本地注册表中,一个在Microsoft Active Directory中(请参阅此处:使用 Active Directory 轻量级目录服务 (AD LDS) 的本地实例读取和写入数据)。在没有Microsoft支持的情况下处理对 ActiveDirectory 的更改可能非常危险,并且意味着如果这导致问题,Microsoft不提供任何支持。所以我会在你的应用程序中使用Powershell方法Enable-ExchangeCertificate。
附言我永远不会在我的 Exchange 服务器上运行一个未知的插件,它确实会替换 SSL 证书,我可以通过一个简单的 powershell 命令来完成。该插件可能会导致许多其他问题,并且可能包含很多不太"好"的东西。因此,在你浪费时间进行该项目之前,请考虑一下它是否真的有观众。