更新C#中的Exchange Server证书

更新C#中的Exchange Server证书

问题描述:

我的目标是在C#应用程序中更新Exchange Server的证书,就像Enable-ExchangeCertificate PS Cmdlet一样。更新C#中的Exchange Server证书

我已经编写了IIS的更新程序,它使用Microsoft.Web.Administration来访问和操作IIS站点和绑定。我已经通过Google和VS Libraries for Exchange API工具进行了搜索,但没有任何运气。我只能找到EWS(Exchange Web服务)的参考,它无法更新服务器证书AFAIK。

有没有可以使用的API? Enable-ExchangeCertificate如何提供功能?如果所有其他方法都失败,我还想着使用PS Cmdlet,但我想要一个独立的应用程序来依靠。不需要远程服务器管理,只有localhost才行。

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架构更新)。

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

  1. 为当前的配置& SSL证书的备份(可选)

  2. 导入证书

Import-ExchangeCertificate -FileData([Byte []] $(Get-Content -Path 个C:\证书\ YOUR_CERTIFICATE.cer -Encoding字节-ReadCount 0))

但是一些使用MMC和的工作,以及(所以你可能检查的API支持MMC对于这部分)。

  1. 启用它
  2. 启用-ExchangeCertificate -Thumbprint 1234ae0567a72fccb75b1d0198628675333d010e -Services 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。

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

开始=>
+0

好的,我只需从我的应用程序中调用Enable-ExchangeCertificate。我期待自动导入并启用Let's Encrypt中的证书。 BTW从加密的PFX文件导入可以通过dotnet中提供的系统库无缝工作。 PFX密码仅以加密形式存储在磁盘上,攻击者需要知道该加密密钥才能执行恶意操作,即。安装恶意证书。感谢那些大量的信息,我应该在询问之前做更多的研究... – NoMad

+0

啊,我明白了。有一个LetsEncrypt Powershell模块。也许你希望将它应用到你的应用程序中,这样你就不需要重新发明整个weel。然而,我更喜欢的是一个完整的powershell脚本,然后是C#应用程序。 – BastianW

+0

我在Windows上尝试了一些LE的解决方案,IMO的linux客户端更稳定/工作得更好。一个纯粹的PS解决方案会很好,但为了兼容Linux,我使用getssl,使用openssl进行打包和加密,然后将输出推送到Windows共享中,我的服务可以将其输出,导入并启用IIS绑定和Exchange。 – NoMad