2017-08-28 2 views
0

Mein Ziel ist es, das Zertifikat für Exchange Server aus einer C# -App zu aktualisieren, genau wie die Enable-ExchangeCertificate PS Cmdlet tut.Update Exchange Server-Zertifikat in C#

Ich habe bereits einen Updater für IIS geschrieben, der verwendet, um auf IIS-Sites und -Bindungen zuzugreifen und diese zu bearbeiten. Ich habe Google und VS Libraries nach Exchange API-Tools durchsucht, aber ohne Glück. Ich kann nur Referenzen auf EWS (Exchange Web Services) finden, die das Serverzertifikat AFAIK nicht aktualisieren können.

Gibt es eine API, die verwendet werden kann? Wie stellt Enable-ExchangeCertificate die Funktionalität zur Verfügung? Ich denke auch darüber nach, nur das PS-Cmdlet zu verwenden, wenn alles andere fehlschlägt, aber ich möchte eine eigenständige App haben, auf die ich mich verlassen kann. Keine Remote-Server-Verwaltung benötigt, localhost-only ist in Ordnung.

tl; dr Wie aktualisiert man ein lokales Exchange Server-Zertifikat in C#?

EDIT Ich werde weiter in die EWS-API (https://github.com/OfficeDev/ews-managed-api/blob/master/README.md) schauen, es sieht aus wie es die Arbeit tun könnte. Es bietet Assemblys für den Zugriff auf EWS-Daten, aber ich habe keine API-Aufrufe ausschließlich für die Zertifikatsverwaltung gefunden.

Antwort

0

Es gibt mehrere Teile in MS Exchange, die nicht von einer API abgedeckt sind. Meistens ist dies aus Sicherheitsgründen oder weil es ziemlich komplex ist und daher keine API benötigt wird (z.B. Exchange Schema Update).

Die normale Microsoft Art und Weise enthalten nur zwei Schritten:

  1. & SSL-Zertifikat (optional) ein Backup der aktuellen Konfiguration

  2. Importieren Sie das Zertifikat

Make

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

Aber einige Verwendung MMC und das ist so gut funktioniert (so könnte man für diesen Teil für eine API für MMC überprüfen).

  1. Aktivieren Sie es

Enable-Exchange -Thumbprint 1234ae0567a72fccb75b1d0198628675333d010e -Leistungen POP, IMAP, SMTP, IIS

Ich gehe davon aus, dass würde Es gibt keine solche API, da sie nicht unbedingt benötigt wird. Normalerweise ist ein SSL-Zertifikat für 3 Jahre gültig. Sie müssen also den Befehl alle 3 Jahre über 1x ausführen und ein Zugriff von Drittanbietern auf diesen Teil würde keinen Sinn ergeben, da er nicht oft verwendet wird und Microsoft daher keinen solchen erstellt.

Hier finden Sie weitere Informationen. Die SSL-Zertifikatsinformationen für Microsoft werden an zwei Speicherorten gespeichert. Eine in der lokalen Regestry und eine in Microsoft Active Directory (siehe here: verwendet die lokale Instanz von Active Directory-Verzeichnisdiensten (AD LDS) zum Lesen und Schreiben von Daten).Der Umgang mit Änderungen am ActiveDirectory ohne die von Microsoft unterstützte Methode ist möglicherweise sehr riskant und würde bedeuten, dass Microsoft keine Unterstützung anbietet, wenn dies ein Problem verursacht. Also würde ich den Powershell-Ansatz Enable-ExchangeCertificate in Ihrer App verwenden.

P.S. Ich würde niemals ein unbekanntes Plugin auf meinem Exchange-Server ausführen, das ein SSL-Zertifikat ersetzen würde, was ich mit einem einfachen Powershell-Befehl tun kann. Das Plugin könnte viele andere Probleme verursachen und eine Menge Dinge enthalten, die nicht so "nett" sind. Bevor du also deine Zeit in dieses Projekt investierst, denke darüber nach, ob es wirklich ein Publikum dafür gibt.

+0

OK, ich rufe Enable-ExchangeCertificate dann einfach von meiner App aus an. Ich möchte automatisch Zertifikate von Let's Encrypt importieren und aktivieren. BTW-Import von verschlüsselten PFX-Dateien funktioniert nahtlos durch die bereitgestellten System-Bibliotheken in dotnet. Die PFX-Passphrase wird nur in verschlüsselter Form auf der Festplatte gespeichert. Ein Angreifer benötigt die Kenntnis dieses Verschlüsselungsschlüssels, um etwas Schädliches zu tun, d. Installieren Sie ein schädliches Zertifikat. Danke für diese Menge an Informationen, ich hätte etwas mehr Forschung betreiben sollen, bevor ich frage ... – NoMad

+0

Ah ich sehe. Es gibt ein LetsEncrypt Powershell-Modul. Vielleicht möchten Sie das auch in Ihre Bewerbung einbeziehen, damit Sie nicht das ganze Leben neu erfinden müssen. Was ich jedoch bevorzugen würde wäre ein komplettes Powershell-Skript, dann eine C# -App. – BastianW

+0

Ich habe versucht, einige Lösungen für LE auf Windows, IMO die Linux-Clients sind stabiler/arbeiten besser. Eine reine PS-Lösung wäre nett, aber für Linux-Kompatibilität verwende ich getssl, packen und verschlüsseln mit openssl, dann schiebe die Ausgabe auf eine Windows-Freigabe, wo mein Dienst es aufnehmen, importieren und für IIS-Bindungen und Exchange aktivieren kann. – NoMad