cert_opn2ex hinzugefügt
This commit is contained in:
commit
fd30ef2e79
115
cert_opn2ex
Normal file
115
cert_opn2ex
Normal file
@ -0,0 +1,115 @@
|
||||
<#
|
||||
#############################################################
|
||||
# Script zum Import von Exchange-Zertifikaten, welche auf der OPNsense erzeugt wurden
|
||||
# Copyright (C) Marius 2024
|
||||
# Dieses Skript erstellt und importiert automatisch Zertifikate aus den gegebenn .pem Files
|
||||
# importiert diese in Microsoft Exchange und löscht alte Zertifikate.
|
||||
#############################################################
|
||||
#>
|
||||
|
||||
# Pfad zum Zertifikatsverzeichnis
|
||||
$CertDir = "PFAD ZUM EXPORTIEREN SCRIPT DER OPNSENSE"
|
||||
$CertFile = Join-Path $CertDir "fullchain.pem" # Vollständige Zertifikatskette
|
||||
$KeyFile = Join-Path $CertDir "key.pem"
|
||||
$PfxFile = Join-Path $CertDir "cert.pfx"
|
||||
|
||||
# Lade Exchange-Snap-In
|
||||
try {
|
||||
Write-Host "Lade Exchange-Snap-In..."
|
||||
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010 -ErrorAction Stop
|
||||
Write-Host "Exchange-Snap-In erfolgreich geladen." -ForegroundColor Green
|
||||
} catch {
|
||||
Write-Host "Fehler beim Laden des Exchange-Snap-Ins: $_" -ForegroundColor Red
|
||||
return
|
||||
}
|
||||
|
||||
# Überprüfen, ob die benötigten Dateien im Verzeichnis vorhanden sind
|
||||
if (!(Test-Path $CertFile) -or !(Test-Path $KeyFile)) {
|
||||
Write-Host "Die erforderlichen Dateien (fullchain.pem oder key.pem) wurden nicht gefunden. Script beendet." -ForegroundColor Yellow
|
||||
return
|
||||
}
|
||||
|
||||
Write-Host "Zertifikatsdateien gefunden. Erstelle .pfx-Datei..."
|
||||
|
||||
# OpenSSL-Befehl ausführen
|
||||
try {
|
||||
$OpenSSLPath = "C:\Program Files\OpenSSL-Win64\bin\openssl.exe" # Pfad zu OpenSSL
|
||||
& "$OpenSSLPath" pkcs12 -export -out "$PfxFile" -inkey "$KeyFile" -in "$CertFile" -password pass:!Sonne2000
|
||||
|
||||
# Überprüfen, ob die PFX-Datei erfolgreich erstellt wurde
|
||||
if (Test-Path $PfxFile) {
|
||||
Write-Host ".pfx Datei wurde erfolgreich erstellt: $PfxFile" -ForegroundColor Green
|
||||
|
||||
# Seriennummer aus der vollständigen PEM-Datei extrahieren
|
||||
Write-Host "Extrahiere Seriennummer aus der PEM-Datei..."
|
||||
$SerialNumber = & "$OpenSSLPath" x509 -in "$CertFile" -serial -noout | ForEach-Object { $_.Split('=')[-1].Trim() }
|
||||
|
||||
Write-Host "Seriennummer extrahiert: $SerialNumber"
|
||||
|
||||
# Überprüfen, ob das Zertifikat bereits in Exchange vorhanden ist
|
||||
$ExistingCert = Get-ExchangeCertificate | Where-Object { $_.SerialNumber -eq $SerialNumber }
|
||||
|
||||
if ($ExistingCert) {
|
||||
Write-Host "Das Zertifikat ist bereits in Exchange vorhanden. Kein Import erforderlich." -ForegroundColor Yellow
|
||||
$Thumbprint = $ExistingCert.Thumbprint
|
||||
} else {
|
||||
# Zertifikat importieren
|
||||
Write-Host "Importiere Zertifikat in Exchange..."
|
||||
$ImportCert = Import-ExchangeCertificate -FileData ([System.IO.File]::ReadAllBytes($PfxFile)) -Password (ConvertTo-SecureString -String "!Sonne2000" -AsPlainText -Force) -PrivateKeyExportable:$true -FriendlyName "mx0.edv-ffb.de Zertifikat (ACME Client)"
|
||||
|
||||
# Thumbprint direkt aus Exchange holen
|
||||
$ImportedCert = Get-ExchangeCertificate | Where-Object { $_.FriendlyName -eq "mx0.edv-ffb.de Zertifikat (ACME Client)" }
|
||||
if ($ImportedCert) {
|
||||
$Thumbprint = $ImportedCert.Thumbprint
|
||||
Write-Host "Zertifikat erfolgreich importiert: $Thumbprint"
|
||||
} else {
|
||||
Write-Host "Fehler: Zertifikat wurde importiert, aber kein Thumbprint gefunden." -ForegroundColor Red
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
# Zertifikat aktivieren
|
||||
if ($Thumbprint) {
|
||||
Enable-ExchangeCertificate -Thumbprint $Thumbprint -Services POP,IMAP,SMTP,IIS -Force
|
||||
Write-Host "Zertifikat wurde erfolgreich für Exchange-Dienste aktiviert." -ForegroundColor Green
|
||||
|
||||
# Altes Zertifikat löschen
|
||||
Write-Host "Suche und lösche das alte Zertifikat..."
|
||||
$OldCert = Get-ExchangeCertificate | Where-Object { $_.FriendlyName -eq "mx0.edv-ffb.de (ACME Client)" -and $_.Thumbprint -ne $Thumbprint }
|
||||
if ($OldCert) {
|
||||
Remove-ExchangeCertificate -Thumbprint $OldCert.Thumbprint -Confirm:$false
|
||||
Write-Host "Altes Zertifikat erfolgreich gelöscht: $($OldCert.Thumbprint)" -ForegroundColor Cyan
|
||||
} else {
|
||||
Write-Host "Kein altes Zertifikat gefunden, das gelöscht werden muss." -ForegroundColor Yellow
|
||||
}
|
||||
} else {
|
||||
Write-Host "Kein Thumbprint verfügbar. Zertifikat konnte nicht aktiviert werden." -ForegroundColor Red
|
||||
}
|
||||
|
||||
# Entferne TLS-Zertifikat vom Send Connector
|
||||
Write-Host "Entferne TLS-Zertifikat vom Outbound Office365 Send Connector..."
|
||||
Set-SendConnector -Identity 'Outbound Office365' -TlsCertificateName $Null
|
||||
Write-Host "TLS-Zertifikat erfolgreich entfernt." -ForegroundColor Cyan
|
||||
|
||||
# Lösche alle Dateien im Verzeichnis
|
||||
Write-Host "Lösche alle Dateien im Verzeichnis..."
|
||||
Get-ChildItem -Path $CertDir -File | Remove-Item -Force
|
||||
Write-Host "Alle Dateien wurden aus dem Verzeichnis gelöscht." -ForegroundColor Cyan
|
||||
|
||||
# IIS-Dienst neu starten mit Timer
|
||||
Write-Host "Starte IIS-Dienst neu..."
|
||||
$startTime = Get-Date
|
||||
iisreset > $null
|
||||
while (-not (Get-Service W3SVC).Status -eq "Running") {
|
||||
$elapsed = (Get-Date) - $startTime
|
||||
Write-Host "Es wird versucht den Dienst zu starten... ($($elapsed.Seconds) Sekunden)" -NoNewline
|
||||
Start-Sleep -Seconds 1
|
||||
Write-Host "`r" -NoNewline
|
||||
}
|
||||
Write-Host "`nIIS-Dienst wurde erfolgreich neu gestartet." -ForegroundColor Green
|
||||
} else {
|
||||
Write-Host "Fehler beim Erstellen der .pfx Datei." -ForegroundColor Red
|
||||
}
|
||||
} catch {
|
||||
Write-Host "Ein Fehler ist aufgetreten: $_" -ForegroundColor Red
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user