2017-08-28 98 views
0

我的目標是在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調用。

回答

0

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對於這部分)。

  • 啓用它
  • 啓用-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