【问题标题】:Update Exchange Server Certificate in C#在 C# 中更新 Exchange Server 证书
【发布时间】:2017-08-29 00:35:29
【问题描述】:

我的目标是从 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 Server 证书?

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

【问题讨论】:

    标签: c# ssl-certificate exchange-server x509certificate2


    【解决方案1】:

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

    正常的微软方式只包括两个步骤:

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

    2. 导入证书

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

    但有些人使用 MMC,而且效果也很好(因此您可能会为此部分检查 MMC 的 API)。

    1. 启用它

    启用-ExchangeCertificate -Thumbprint 1234ae0567a72fccb75b1d0198628675333d010e -服务 POP、IMAP、SMTP、IIS

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

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

    附言我永远不会在我的 Exchange 服务器上运行一个未知的插件,它会替换我可以通过一个简单的 powershell 命令执行的 SSL 证书。该插件可能会导致很多其他问题,并且可能包含很多不太“好”的东西。所以在你把时间浪费在那个项目上之前,想想它是否真的有观众。

    【讨论】:

    • 好的,然后我会从我的应用程序中调用 Enable-ExchangeCertificate。我希望从 Let's Encrypt 自动导入和启用证书。 BTW 从加密的 PFX 文件导入通过 dotnet 中提供的系统库无缝工作。 PFX 密码仅以加密形式存储在磁盘上,攻击者需要知道该加密密钥才能进行恶意操作,即。安装恶意证书。感谢您提供大量信息,在询问之前我应该​​做更多的研究......
    • 啊,我明白了。有一个 LetsEncrypt Powershell 模块。也许您也希望在您的应用程序中包含那个,这样您就不需要重新发明整个卷轴。然而,我更喜欢的是一个完整的 powershell 脚本,然后是一个 C# 应用程序。
    • 我在 Windows 上尝试了一些 LE 解决方案,IMO linux 客户端更稳定/工作更好。纯 PS 解决方案会很好,但为了与 linux 兼容,我使用 getssl,使用 openssl 打包和加密,然后将输出推送到 Windows 共享,我的服务可以在其中获取、导入和启用 IIS 绑定和 Exchange。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 2018-05-31
    • 2019-09-20
    • 2014-04-30
    • 1970-01-01
    相关资源
    最近更新 更多