In diesem Artikel hatte ich ja bereits beschrieben, wie das Zertifikat der Sophos UTM per REST API exportiert werden kann. Ein paar Leute haben sich nun gemeldet, dass eine automatischer Export und Import für Exchange Server interessant ist. Ich habe daher das Script erweitert und den Export und Import mit Exchange Server 2016 erfolgreich getestet.
Hier einmal die angepasste Version für den automatischen Import für Exchange Server 2016:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
|
#Requires -RunAsAdministrator param ( [ Parameter ( Position =0, Mandatory = $true )] $UTMAddress = "utm.domain.local" , [ Parameter ( Position =1, Mandatory = $true )] [string] $UTMApiToken = "xxXXxxXXxxXXxxXX" , [ Parameter ( Position =2, Mandatory = $true )] [string] $CertREF = "REF_0815abcd" , [ Parameter ( Position =3, Mandatory = $false )] [string] $OpenSSLPath = "C:\Program Files (x86)\OpenSSL\bin\openssl.exe" , [ Parameter ( Position =4, Mandatory = $false )] [string] $PFXFilePath = $PSScriptRoot ) #Set TLS Settings (Only TSLv1.1 and TLSv1.2) try { write-warning "Changing PowerShell TLS settings" [System.Net.ServicePointManager] ::SecurityProtocol = @( "Tls12" , "Tls11" , "Tls" ) } catch { write-error "Can't change PowerShell TLS settings: $Error[0]" } #Build Credentials try { Write-Warning "Building UTM Rest API Creds" $securePassword = ConvertTo-SecureString $UTMApiToken -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential( "token" , $securePassword ) } catch { write-error "Error building UTM creds: $Error[0]" exit } #UTM API Call to get certificate and private key try { Write-Warning "Getting Cert from UTM REST API" $UTMAPICall = "https://$UTMAddress" + ":4444/api/objects/ca/host_key_cert/$CertREF" $UTMCertResponse = Invoke-RestMethod -Method GET -Uri $UTMAPICall -Credential $credential } catch { write-error "Error getting certificate from UTM: $Error[0]" exit } #Write private key and certificate to temp files try { Write-Warning "Writing cert TMP files" $TempCertFile = "$env:temp\" + $CertREF + ".cer" $TempKeyFile = "$env:temp\" + $CertREF + ".key" $UTMCertResponse .certificate | set-content $TempCertFile $UTMCertResponse .key | set-content $TempKeyFile } catch { write-error "Error writing temp files: $Error[0]" exit } #Build PFX File from certificate and key try { Write-Warning "Convert UTM Cert and Key to PKCS12" $PFXFileNameAndPath = "$PFXFilePath" + "\" + "$CertREF" + ".pfx" . $OpenSSLPath pkcs12 -export -in $TempCertFile -inkey $TempKeyFile -out $PFXFileNameAndPath -password pass: $UTMApiToken remove-item $TempCertFile -force remove-item $TempKeyFile -force } catch { write-error "Error building PFX File: $Error[0]" } #Get UTM certs serial number try { $UTMCertSerial = $UTMCertResponse .certificate.split( " " )[35].ToUpper().Replace( ":" ," ").Trim() Write-Warning " UTM Cert Serial: $UTMCertSerial " } catch { write-error " Can't find serial number of UTMs certificate: $Error [0] " exit } #Get current Exchange Server certificate try { write-warning " Get current Exchange Server Certificate " Import-Module -Name WebAdministration Add-PSSnapin Microsoft.Exchange* $AllIISCerts = Get-ChildItem IIS:SSLBindings foreach ($IISCert in $AllIISCerts) { if ($IISCert.sites.value -match " Default Web Site ") {$IISThumbprint = $IISCert.Thumbprint} } $CurrentExchangeCert = Get-ExchangeCertificate -Thumbprint $IISThumbprint $CurrentExchangeCertSerial = $CurrentExchangeCert.SerialNumber write-warning " Exchange Cert Serial: $CurrentExchangeCertSerial " } catch { write-error " Can 't find current Exchange certificate: $Error[0]" exit } #Test if current Exchange Cert matches UTM Cert try { if ($CurrentExchangeCertSerial -eq $UTMCertSerial) { Write-Warning "Exchange certificate matches UTM certificate: Nothing to do!" $ExchangeCertChangeRequierd = $false } else { write-warning "UTM Cert dosen' t match Exchange certificate! " $ExchangeCertChangeRequierd = $true } } catch { write-error " Don 't know if cert change is requierd: $Error[0]" exit } #If needed: lets try to change the Exchange Server certificate if ($ExchangeCertChangeRequierd -eq $true) { try { Write-Warning "Let' s try to change the certificate " $CertFilePath = " \\ " + $env:computername + " \ " + $PFXFileNameAndPath.Replace(" : "," $ ") $ImportCert = Import-ExchangeCertificate -FileName $CertFilePath -Password $securePassword -PrivateKeyExportable:$true -FriendlyName " $CertREF " $EnableCert = Get-ExchangeCertificate | where {$_.SerialNumber -eq $UTMCertSerial} | Enable-ExchangeCertificate -Services POP,IMAP,SMTP,IIS -force $ChangeSuccessfull = $true write-warning " Change Sucessfull: $ChangeSuccessfull " } catch { write-error " Can 't change certificate: $Error[0]" exit } } if ($ExchangeCertChangeRequierd -eq $false) { Write-Information "No certificate change needed" exit } #Remove the old Exchange server certificate if change was successfull if ($ChangeSuccessfull -eq $true) { try { Write-Warning "Removing old certificate" $RemoveCert = Remove-ExchangeCertificate -Thumbprint $IISThumbprint -Confirm:$false } catch { write-error "Can' t remove old certificate: $Error [0]" exit } } |
Das Script kann auch hier direkt als PS1 Datei runtergeladen werden:
Get-SophosUTMCertificate
Dieses Script kann direkt auf dem Exchange Server ausgeführt werden. Wichtig ist, dass das Script mit Administrator Rechten gestartet wird. Natürlich muss der Benutzer auch entsprechende Exchange Berechtigungen haben um das Zertifikat zuzuweisen.
Das Script kann wie folgt aufgerufen werden:
1
|
.\ Get-SophosUTMCertificate .ps1 -UTMAddress utm.domain.local -UTMApiToken "UTMRESTAPIKEY" -CertREF "REF_XXXXXXXX" -OpenSSLPath "C:\Program Files (x86)\OpenSSL\bin\openssl.exe" |
Hier einmal zwei Durchläufe des Scripts. Beim ersten Durchlauf wurde festgestellt, dass sich das Zertifikat der UTM und des Exchange Servers unterscheiden, daher wurde das Zertifikat der UTM auf dem Exchange Server eingespielt. Beim zweiten Aufruf entspricht das UTM Zertifikat dem Exchange Zertifikat, es muss also nicht wieder ausgetauscht werden:
Das Script lässt sich als Task in der Aufgabenplanung anlegen und beispielsweise einmal täglich ausführen. Wenn die UTM nun das Let’s Encrypt Zertifikat erneuert, wird mit maximal einen Tag Verzögerung auch das Exchange Zertifikat ausgetauscht.
Noch eine Info für alle, die mittlerweile die Windows Extended Protection aktiviert haben: Ich hatte gestern den unglücklichen Fall, dass das Scheduled Task für den Import vor der Zertifikats-Erneuerung auf der UTM lief. Somit gab es an dem Tag ein Certificate Mismatch und Outlook Anywhere funktionierte nicht mehr. Ich habe dann mal die Letsencrypt-Logs auf der UTM geprüft und dort findet das Renewal immer um ca. halb4 morgens statt. Das Scheduled Task habe ich entsprechend auf 4 Uhr eingestellt.
Hi,
I’m trying to use this to export my Let’s Encrypt certificate from UTM to Exchange 2019 server.
I’ve used latest script with suggested modifications.
I’m able to connect to the UTM using the token account and look for the certificate that I need but when I export, I don’t keep any key so I cannot use OpenSSL to generate the pfx fle.
Can someone show me what I should get in the .key file please?
Thanks for your help
Hallo
mit OpenSSL in der Version 1.1.0 klappt es bei mir.
Ich hab beim Stöbern noch einen ‚extended‘ Version von Frankys Script gefunden:
https://www.mpca.solutions/wp/knowledgebase/topic/sophos-utm-zertifikat-der-waf-mittels-powershell-exportieren-exchange-version/
@Steffen:
deine Adaption werd ich noch testen
@ALL: Danke
Servus,
ich hatte auch Probleme mit dem Import und habe folgendes angepasst dann läuft es auch mit EX2016 aktuelle Patchstand und OpenSSL 3.0.3:
OLD: . $OpenSSLPath pkcs12 -export -in $TempCertFile -inkey $TempKeyFile -out $PFXFileNameAndPath -password pass:$UTMApiToken
NEW: . $OpenSSLPath pkcs12 -export -certpbe PBE-SHA1-3DES -keypbe PBE-SHA1-3DES -nomac -name $CertREF -in $TempCertFile -inkey $TempKeyFile -passin pass:$UTMApiToken -out $PFXFileNameAndPath -passout pass:$UTMApiToken
OLD: $ImportCert = Import-ExchangeCertificate -FileName $CertFilePath -Password $securePassword -PrivateKeyExportable:$true -FriendlyName „$CertREF“
NEW: $ImportCert = Import-ExchangeCertificate -FileData ([Byte[]]$(Get-Content -Path „$CertFilePath“ -Encoding byte -ReadCount 0)) -Password $securePassword -PrivateKeyExportable:$true -FriendlyName „$CertREF“
Gruß, Steffen
PS: Das entscheidenden ist wohl auch das OS mit Server 2012R2, welches AES256 (default bei neueren OpenSSL Version) nicht lesen kann.
Beim Versuch das Skript auf einem aktuellen Exchange 2019 laufen zu lassen habe ich die Fehlermeldung bekommen:
Import-ExchangeCertificate : Es wurde kein Parameter gefunden, der dem Parameternamen „FileName“ entspricht.
In Zeile:1 Zeichen:28
Microsoft hat den Parameter FileName anscheinend jetzt komplett entfernt und besteht auf den folgenden Aufruf im Skript:
$ImportCert = Import-ExchangeCertificate -FileData ([System.IO.File]::ReadAllBytes($CertFilePath)) -Password $securePassword -PrivateKeyExportable:$true -FriendlyName „$CertREF“
Vielleicht mag Frank ja das Skript hier auch anpassen, so wie es im Exchange 2019 Artikel zum Import der Fall ist.
Gruß Volker
Besten Dank für die Lösung!
Hallo, habe mit einem zweiten Exchange Server ein Problem dass das Zertifikat nicht inmportiert werden kann weil angeblich das Passwort falsch sei. Ich habe es händisch versucht und tatsächlich lässt sich das Zertifikat nicht importieren weil das Passwort nicht stimmt. :'(
Jemand ne Idee was nicht stimmen könnte?
Fehlermeldung:
WARNUNG: Let’s try to change the certificate
Import-ExchangeCertificate : Ein spezieller RPC-Fehler ist auf Server ROPEX01 aufgetreten: Die Quelldaten können nicht
importiert werden, oder das falsche Kennwort wurde angegeben.
In C:\Skripte\Get-SophosUTMCertificate.ps1:141 Zeichen:18
+ … mportCert = Import-ExchangeCertificate -FileName $CertFilePath -Passw …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ReadError: (:) [Import-ExchangeCertificate], InvalidOperationException
+ FullyQualifiedErrorId : [Server=ExchangeServer,RequestId=cc19c3bd-c1f3-48d4-94d7-c34cdcfef280,TimeStamp=05.05.2022 13:3
4:49] [FailureCategory=Cmdlet-InvalidOperationException] ACF1D057,Microsoft.Exchange.Management.SystemConfiguratio
nTasks.ImportExchangeCertificate
Das ist die Zeile 141
$ImportCert = Import-ExchangeCertificate -FileName $CertFilePath -Password $securePassword -PrivateKeyExportable:$true -FriendlyName „$CertREF“
Ich habe bereits einen neuen API Schlüssel und ein komplett neues Zertifikat erstellt.
Jemand eine Idee?
OpenSSL in der Version 3.0.3 hat scheinbar ein Problem auf einem w2k16 Server.
Egal wie wird das Passwort nicht ins neue Zert geschrieben.
Mit der Version 1.1.0 funktioniert es einwandfrei!
Hallo ich schaffe es nicht den Skript über die Aufgabenplanung zu starten.
Habe eine cmd und bat erstellt, bekomme allerdings immer diese Meldung:
C:\TEMP CERT>powershell.exe .\Get-SophosUTMCertificate.ps1 -UTMAddress utm.domaene.de -UTMApiToken „XL*********OYh“ -CertREF „REF_*********HB“ -OpenSSLPath „C:\Program Files (x86)\OpenSSL-Win32\bin\openssl.exe“
x86 : Die Benennung „x86“ wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren
Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und
wiederholen Sie den Vorgang.
In Zeile:1 Zeichen:161
+ … -CertREF REF_HEuoMYCRoyHB -OpenSSLPath C:\Program Files (x86)\OpenSS …
+ ~~~
+ CategoryInfo : ObjectNotFound: (x86:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Ich habe es auch direkt mit der powershell.exe und dem Argument -command „C:\TEMP CERT\Get-SophosUTMCertificate.ps1 -UTMAddress…“ versucht.
Klappt nicht. :(
In der PowerShell selbst klappt alles ohne Probleme.
Habe es hinbekommen. :)
Programm: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Argumente: -command „& ‚C:\TEMP CERT.\Get-SophosUTMCertificate.ps1′“
Im Skript selbst habe ich die Variablen direkt eingetragen:
[Parameter(Position=0, Mandatory=$false)]
$UTMAddress = „utm.domain.de“,
[Parameter(Position=1, Mandatory=$false)]
[string]$UTMApiToken = „X************h“,
[Parameter(Position=2, Mandatory=$false)]
[string]$CertREF = „REF_H***B“,
[Parameter(Position=3, Mandatory=$false)]
[string]$OpenSSLPath = „C:\Program Files (x86)\OpenSSL-Win32\bin\openssl.exe“,
[Parameter(Position=4, Mandatory=$false)]
[string]$PFXFilePath = $PSScriptRoot
Wichtig ist auch Mandatory=$false damit der Wert nicht abgefragt wird.
Hallo, welche Serverversion benutzt du?
Ich weiß nicht mehr genau die Hintergründe, aber musste auch auf einen 2016er Upgraden,bzw. das Zertifikat über einen 2016 besorgen, weil irgendetwas mit der Verschlüsselung auf 2008r2 nicht funktioniert hat.
Exchange 2019 CU11 mit allen Patches auf Server 2019 aktueller Stand.
Wir verwenden ebenfalls Exchange 2019 CU11 mit funktionierendem Skript, das kannst du also immerhin als Problem ausschließen.
Ja, ich verwende das hier downloadbare. Das geht aber eben nicht wie es soll, Fehler steht oben. Was habt ihr geändert ausser die Variable „$PSScriptRoot“.
Versuche es mit OpenSSL in der Version 1.1.0
Bei mit hat es geklappt.
Hallo,
als erstes vielen Dank an Franky.
Ich habe folgendes Problem, bin aber zu blind es zu lösen.
WARNUNG: Changing PowerShell TLS settings
WARNUNG: Building UTM Rest API Creds
WARNUNG: Getting Cert from UTM REST API
C:\temp\Get-SophosUTMCertificate.ps1 : Error getting certificate from UTM: Die zugrunde liegende Verbindung wurde
geschlossen: Für den geschützten SSL/TLS-Kanal konnte keine Vertrauensstellung hergestellt werden.
In Zeile:1 Zeichen:1
+ .\Get-SophosUTMCertificate.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Get-SophosUTMCertificate.ps1
Das Problem han ich nun behoben. Aber ein neues taucht auf, ist hier weiter oben auch schon beschrieben:
Import-ExchangeCertificate : Ein spezieller RPC-Fehler ist auf Server SOWIESO aufgetreten: Die Quelldaten können nicht
importiert werden, oder das falsche Kennwort wurde angegeben.
In C:\temp\Get-SophosUTMCertificate.ps1:142 Zeichen:18
+ … mportCert = Import-ExchangeCertificate -FileName $CertFilePath -Passw …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ReadError: (:) [Import-ExchangeCertificate], InvalidOperationException
+ FullyQualifiedErrorId : [Server=SOWIESO,RequestId=7535665375965969479596594394595,TimeStamp=10.12.2021 14:0
8:30] [FailureCategory=Cmdlet-InvalidOperationException] AD810F94,Microsoft.Exchange.Management.SystemConfiguratio
nTasks.ImportExchangeCertificate
Da ich nicht der Programmierer bin … ich denke es stimmt noch was mit dem Script nicht.
Ich hatte eine ähnliche Meldung. Bei mir half es, anstatt der Variable „$PSScriptRoot“ direkt den Pfad zu dem Zertifikat einzutragen.
Das hab ich schon versucht, leider ohne Erfolg. Ich finde auch, das Open SSL kann man weglassen, der IIS importiert auch *.p12.
Hallo Remé,
wie habt Ihr das gelöst? Ich hänge aktuell auch daran rum.
VG
Frank
Hallo,
teste gerade den export des Certi von der Sophos.
Bekommeleider die drei gleichen Fehlermeldung wie Sie.
Können Sie mir sagen wie Sie es gelöst haben.
Danke
Hi,
nach der dritten Warnung dauert es bestimmt 5 Minuten, danach erfolgt die Fehlermeldung.
Im Livelog der UTM kommt nichts an…
Die RestfulAPI kann ich aber aufrufen und bis zum CURL Befehl alles abrufen…
Hat mir jemand einen Tipp?
WARNUNG: Changing PowerShell TLS settings
WARNUNG: Building UTM Rest API Creds
WARNUNG: Getting Cert from UTM REST API
C:\_scripts\Get-SophosUTMCertificate\Get-SophosUTMCertificate.ps1 : Error getting certificate from UTM: Die zugrunde
liegende Verbindung wurde geschlossen: Unerwarteter Fehler beim Senden.. Der Pfad
„HKLM:\Software\microsoft\ExchangeServer\v15\CentralAdmin“ kann nicht gefunden werden, da er nicht vorhanden ist. Der
Pfad „HKLM:\SOFTWARE\Microsoft\PowerShell\1\PowerShellSnapins\Microsoft.Exchange.Management.Xrm“ kann nicht gefunden
werden, da er nicht vorhanden ist. Der Pfad
„HKLM:\SOFTWARE\Microsoft\PowerShell\1\PowerShellSnapins\Microsoft.Exchange.Management.People“ kann nicht gefunden
werden, da er nicht vorhanden ist. Der Pfad
„HKLM:\SOFTWARE\Microsoft\PowerShell\1\PowerShellSnapins\Microsoft.Exchange.Management.PeopleICommunicateWith“ kann
nicht gefunden werden, da er nicht vorhanden ist. Der Pfad
„HKLM:\SOFTWARE\Microsoft\PowerShell\1\PowerShellSnapins\Microsoft.Exchange.Management.AntiSpamTasks“ kann nicht
gefunden werden, da er nicht vorhanden ist. Der Pfad „HKLM:\Software\microsoft\ExchangeServer\v15\CentralAdmin“ kann
nicht gefunden werden, da er nicht vorhanden ist.[0]
In Zeile:1 Zeichen:1
+ .\Get-SophosUTMCertificate.ps1 -UTMAddress gate.dmtpe.com -UTMApiToke …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Get-SophosUTMCertificate.ps1
Hallo Zusammen,
ich kämpfe gerade mit den User Berechtigungen.
Ich möchte dem User gerne so wenige Berichtigungen wie möglich geben.
Dafür hatte ich eine Gruppe erstellt in der er nur WebApplication Protection Auditor ist.
Damit kann der User die Zertifikate soweit lesen und der Export funktioniert auch.
Leider braucht er wohl für den private key die vollen WebAdmin Access Rechte.
Gibt es eine Möglichkeit an den private key zu kommen ohne volle Administrationsrechte freizuschalten?
Die Firmwareversion ist: 9.705-3
Keine Lösung für deine Frage aber ich habe einen dedizierten Account mit 32-stelligem Passwort erstellt und für diesen Account eine Restriktion konfiguriert, sodass dieser nur von der IP-Adresse des Exchangeserver zugreifen darf (static remote access IP).
Danke für die schnelle Antwort :)
Das habe ich auch so gemacht (sogar mit 32 stelligem Passwort :D), allerdings ist mir aufgefallen das, zumindest intern, der Account trotzdem noch von jeder beliebigen IP auf den WebAdmin zugreifen / sich einloggen kann.
Oha, das hätte ich vielleicht auch einmal testen sollen. Nach etwas Recherche muss ich feststellen, dass diese Funktion für VPN-Zwecke gedacht ist. In dem Fall hoffe ich auf eine Lösung mit deinem Ansatz.
Hi,vielen Dank für das Script. Läuft klasse!
Hast du vielleicht noch eine Idee wie man es im Aufgabenplaner zum laufen bekommt? Habe wirklich alles probiert, bekomme es einfach nicht hin! Vielleicht irgendwer von euch?
MfG
Christoph
Moin Christoph,
habe eine .bat-Datei mit folgendem Inhalt:
powershell.exe -noprofile -executionpolicy bypass -File .\Get-SophosUTMCertificate.ps1 -UTMAddress utm.domain.endung -UTMApiToken „ABC123ABC123ABC123ABC123ABC123ABC123“ -CertREF „REF_ABC123ABC“ -OpenSSLPath „C:\Program Files (x86)\OpenSSL-Win32\bin\openssl.exe“
Die Batch Datei liegt im selben Ordner wie das PowerShell Script und in den Aufgaben „Programm ausführen“ auswählen und den die Batch-Datei.
Viele Grüße
Fabian
Vielen Dank! Auf dem Weg war ich schon, hatte aber leider die 64 Bit Version von OpenSSL im Einsatz. das mochte er wohl nicht. Nun funktioniert es
hat es einen Grund, dass du die Parameter wie UTM-Addresse, API-Token und Zertifikats-Referenz ausgelagert hast in die Batch-Datei?
Ich habe mich nur dran gehalten wie das Script aufgerufen werden soll:
.\Get-SophosUTMCertificate.ps1 -UTMAddress utm.domain.local -UTMApiToken „UTMRESTAPIKEY“ -CertREF „REF_XXXXXXXX“ -OpenSSLPath „C:\Program Files (x86)\OpenSSL\bin\openssl.exe“
Siehe oben. Und der Aufruf muss dann natürlich auch mit in die Batch-Datei.
Kann mir bitte mal jemand der die geplante Aufgabe erfolgreich am laufen hat seine Einstellungen durchgeben. Bei mir kommt bei Ausführen des Skript per Aufgabe die Meldung:
„Remove-ExchangeCertificate : Ein spezieller RPC-Fehler ist auf Server aufgetreten: Das interne
Transportzertifikat kann nicht entfernt werden, weil dies das Beenden des Microsoft Exchange-Transportdiensts bewirken würde.“
Ich würde in Moment auf ein Berechtigungsproblem tippen, der Account den ich für die Aufgabe verwende hat aber definitiv die nötigen Rechte, sprich, das Skript tut was es soll wenn ich mit dem Account angemeldet bin und es manuell ausführe.
Hier meine Einstellungen:
„Run whether user is logged on or not“ aktiviert
„Run with highest privileges“ aktiviert
Program/script: Powershell.exe
Arguments: -NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File C:\Scripts\Get-SophosUTMCertificate.ps1
Ich habe nun noch einmal rumprobiert mit diversen Optionen (Batch-Datei anstatt PS in geplanter Aufgabe, alle Optionen durchprobiert in der geplanten Aufgabe) ohne Erfolg. Wenn ich das Skript in einer elevated Powershell aufrufe (gleicher Account wie geplante Aufgabe) gibt es keine Probleme. Umgebung ist ein Exchange 2019.
Update: Problem war die Variable $PFXFilePath. Anstatt „=$PSScriptRoot“ habe ich den Pfad explizit eingetragen. Das Skript läuft nun.
Moin moin,
Franky – hast du zufälligerweise ein Script welches den Weg auch Umgekehrt geht ? Export aus Windows und Upload zur UTM ?
Ich habe hier zuhause eine PBX, welche selbst über den Hersteller Zertifikate anfordert und möchte den externen Zugriff über die Sophos laufen lassen – nicht per NAT – dann wärs ja einfach :)
Eventuell hast du ja sowas schon mal gemacht :)
Gruss,
Michael
Moin zusammen,
ich erhalte seit ein paar Tagen folgenden Fehler beim Script:
***
WARNUNG: Removing old certificate
Remove-ExchangeCertificate : Ein spezieller RPC-Fehler ist auf Server EXCHANGE aufgetreten: Das interne
Transportzertifikat kann nicht entfernt werden, weil dies das Beenden des Microsoft Exchange-Transportdiensts bewirken
würde. Erstellen Sie ein neues Zertifikat, um das interne Transportzertifikat zu ersetzen. Das neue Zertifikat wird
automatisch als internes Transportzertifikat eingesetzt. Anschließend können Sie das vorhandene Zertifikat entfernen.
In C:\Scripte\Get-SophosUTMCertificate.ps1:164 Zeichen:18
+ … emoveCert = Remove-ExchangeCertificate -Thumbprint $IISThumbprint -Co …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Remove-ExchangeCertificate], InvalidOperationException
+ FullyQualifiedErrorId : [Server=EXCHANGE,RequestId=281ef7c8-ce88-4569-bee8-c51965b4210f,TimeStamp=15.11.201
9 08:13:21] [FailureCategory=Cmdlet-InvalidOperationException] E8B410EA,Microsoft.Exchange.Management.SystemConfig
urationTasks.RemoveExchangeCertificate
***
Hat jemand eine Idee? Hat bisher sonst ohne Probleme geklappt. Tritt evtl. nach dem letzten Update auf CU 14 auf.
Exchange 2016, CU 14
Viele Grüße
Fabian
Hallo Fabian,
dieses Problem habe ich auf einem Exchange 2013 Server auch und leider noch keine Lösung.
Falls jemand eine Lösung hat, üwrde es mich freuen.
Gruß Volker
Hallo Frank,
könntest du das Script so anpassen das ein Export/Import von Exchange zu Exchange ( z.B. im DAG) durchgeführt wird?
Gruss
Alex
Ich korrigiere mich selbst: natürlich kann die UTM in der aktuellen Version SAN-Certificates erstellen – so hat Frank es auch in seinem Blog beschrieben. Was nicht funktioniert, sind wildcards mit Let’s Encrypt. Da hatte ich irgendwie was im Hinterkopf und das lag nun quer.
Hallo Frank,
ich sehe mich mit der Zertifikat-Thematik und unserem Exchange gerade konfrontiert. Hier gibt es viel lesenswertes, vielen Dank! Das Whitepaper habe ich mir schon mal zur Seite gelegt und diverse Bookmarks gesetzt. Da wir auch eine Sophos UTM einsetzen, passt das sehr gut.
Eine Frage stellt sich mir aber gerade: die UTM kann ja keine SAN Zertifikate erstellen, sprich ich habe dort ein mail.domain.tld Zertifikat und eines für autodiscover.domain.tld – so jedenfalls meine Denke. Zwei Scripte anlegen für zwei Zertifikate wäre jetzt das kleinere Problem – aber wie weise ich die Zertifikate jeweils zu? Es müsste ja autodiscover-Zertifikat bei autodiscover.domain.tld ausgewiesen werden sowie das mail.domain.tld bei allen anderen virtuellen Exchange Seiten.
Oder stehe ich da gerade auf dem Schlauch? Das Whitepaper spricht ja von einem SAN Zert für outlook oder eben mail sowie autodiscover. Wenn du dafür auch eine Lösung hast, wäre das grandios.
Hallo! Erst einmal: Vielen Dank Frank! Immer wieder tolle Lösungen und Artikel!
Ich habe mal zwei Fragen:
1. Funktioniert das auch auf EX2013 ? (Ich würde es testen, habe aber erst in einigen Tagen wieder Zugriff auf mein Labor).
2. Ich habe auf einem EX2013 CU22 auf WS2012R2 mir das Zertifikat für mail.dom1.de und autodiscover.dom1.de ausstellen lassen. Jetzt habe ich noch weitere autorisierte Domänen auf dem EX, zB. dom2.de. Ein Postfach hat als Antwort-Adresse mail@dom2.de. Wenn ich jetzt Outlook mit diesem Konto einrichte, erhalte ich eine Zertifikatswarnung, dass autodiscover.dom2.de nicht dem Namen des Zertifikats entrspicht, ist ja auch richtig.
Kann ich das Zertifikat beim erneuern einfach um autodiscover.dom2.de erweitern? oder muss ich ein neues Zertifikat anfordern?
Hallo Stefan,
ja grundsätzlich funktioniert es auch mit Exchange 2013. Zu Punkt 2: Du musst ein neues Zertifikat anfordern. Es ist aber nicht nötig nur für Autodiscover ständig neue Zertifikate anzufordern, für zusätzliche Mail Domains lässt sich dies auch mit DNS-SRV Records lösen. Schau mal in das Autodiscover Whitepaper, darin ist beschrieben wie es funktioniert.
Gruß,
Frank
Hallo Frank,
genau das hat mir gefehlt, klappt super mit den DNS-Einträgen! Vielen Dank für den Hinweis und Deine Arbeit hier!!
Recht vielen Dank dafür. Skript läuft super, wollen mal schauen, ob der Wechsel in 2 Monaten noch klappt.