Projektarbeit-MYP/backend/app/install_mercedes_certificates.ps1

374 lines
14 KiB
PowerShell
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Mercedes-Benz SSL-Zertifikat-Installationsskript für Windows
# Installiert notwendige Zertifikate für sichere Netzwerkverbindungen
param(
[switch]$Force,
[switch]$Verbose
)
# Fehlerbehandlung
$ErrorActionPreference = "Stop"
# Emojis und Farben für bessere Ausgabe
$SUCCESS = ""
$ERROR = ""
$WARNING = "⚠️"
$INFO = ""
$CERT = "🔐"
$MERCEDES = "🏎️"
# Logging-Funktionen
function Write-Success { param($Message) Write-Host "$SUCCESS $Message" -ForegroundColor Green }
function Write-Error { param($Message) Write-Host "$ERROR $Message" -ForegroundColor Red }
function Write-Warning { param($Message) Write-Host "$WARNING $Message" -ForegroundColor Yellow }
function Write-Info { param($Message) Write-Host "$INFO $Message" -ForegroundColor Blue }
# Header
Write-Host ""
Write-Host "$MERCEDES Mercedes-Benz SSL-Zertifikat-Installation $MERCEDES" -ForegroundColor Blue
Write-Host "=================================================================="
Write-Host ""
# Administrator-Rechte prüfen
function Test-Administrator {
$currentUser = [Security.Principal.WindowsIdentity]::GetCurrent()
$principal = New-Object Security.Principal.WindowsPrincipal($currentUser)
return $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
}
if (-not (Test-Administrator)) {
Write-Error "Dieses Skript muss als Administrator ausgeführt werden!"
Write-Info "Starten Sie PowerShell als Administrator und führen Sie das Skript erneut aus."
exit 1
}
# Zertifikat-Verzeichnisse erstellen
function New-CertificateDirectories {
Write-Info "Erstelle Zertifikat-Verzeichnisse..."
$directories = @(
"certs\mercedes\root",
"certs\mercedes\intermediate",
"certs\mercedes\server",
"certs\backup"
)
foreach ($dir in $directories) {
if (-not (Test-Path $dir)) {
New-Item -ItemType Directory -Path $dir -Force | Out-Null
}
}
Write-Success "Zertifikat-Verzeichnisse erstellt"
}
# Mercedes-Benz Root-Zertifikate erstellen
function New-MercedesRootCertificates {
Write-Info "$CERT Erstelle Mercedes-Benz Root-Zertifikate..."
# Mercedes-Benz Corporate Root CA (Platzhalter)
$mercedesRootCert = @"
-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAKoK/heBjcOuMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
BAYTAkRFMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
aWRnaXRzIFB0eSBMdGQwHhcNMjQwMTAxMDAwMDAwWhcNMzQwMTAxMDAwMDAwWjBF
MQswCQYDVQQGEwJERTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50
ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEAuIj/82u+f1n3c3fpjwNnFOKBY4/l0f+uKKDVzYWOQbIQc+7qvgfKGoI+
UqK3QmXRJb26fidjMuFdC4XJBOmLg+mSRnZskQdJVFI5gVBELWw+YC+cINhycXy4
V8turPrzhkfinDiB40+hLRlhGtjdQWspUXLoRhNT+Hf6+5rOKFHPbFHjzuDMFXXF
XrVhLVyIjYK+wFXGAVBgAsEAtLA+KjIww+eApVL+bJXhkws1Vx+cPkvsYGSGcq2ϕ
QIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQCfmyGoGWI0+1QQiap6EcOXAXJeIpkPGU
-----END CERTIFICATE-----
"@
# Daimler AG Root CA (Platzhalter)
$daimlerRootCert = @"
-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAKoK/heBjcOuMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
BAYTAkRFMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
aWRnaXRzIFB0eSBMdGQwHhcNMjQwMTAxMDAwMDAwWhcNMzQwMTAxMDAwMDAwWjBF
MQswCQYDVQQGEwJERTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50
ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEAuIj/82u+f1n3c3fpjwNnFOKBY4/l0f+uKKDVzYWOQbIQc+7qvgfKGoI+
UqK3QmXRJb26fidjMuFdC4XJBOmLg+mSRnZskQdJVFI5gVBELWw+YC+cINhycXy4
V8turPrzhkfinDiB40+hLRlhGtjdQWspUXLoRhNT+Hf6+5rOKFHPbFHjzuDMFXXF
XrVhLVyIjYK+wFXGAVBgAsEAtLA+KjIww+eApVL+bJXhkws1Vx+cPkvsYGSGcq2ϕ
QIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQCfmyGoGWI0+1QQiap6EcOXAXJeIpkPGU
-----END CERTIFICATE-----
"@
# Zertifikate in Dateien speichern
$mercedesRootCert | Out-File -FilePath "certs\mercedes\root\mercedes-root-ca.crt" -Encoding ASCII
$daimlerRootCert | Out-File -FilePath "certs\mercedes\root\daimler-root-ca.crt" -Encoding ASCII
Write-Success "Mercedes-Benz Root-Zertifikate erstellt"
}
# Zertifikate in Windows-Zertifikatsspeicher installieren
function Install-WindowsCertificates {
Write-Info "Installiere Zertifikate in Windows-Zertifikatsspeicher..."
try {
# Root-Zertifikate installieren
$certFiles = Get-ChildItem -Path "certs\mercedes\root\*.crt"
foreach ($certFile in $certFiles) {
Write-Info "Installiere: $($certFile.Name)"
# Zertifikat in Trusted Root Certification Authorities installieren
Import-Certificate -FilePath $certFile.FullName -CertStoreLocation "Cert:\LocalMachine\Root" -Verbose:$Verbose
# Zertifikat auch in Current User installieren
Import-Certificate -FilePath $certFile.FullName -CertStoreLocation "Cert:\CurrentUser\Root" -Verbose:$Verbose
}
Write-Success "Windows-Zertifikate erfolgreich installiert"
}
catch {
Write-Error "Fehler beim Installieren der Windows-Zertifikate: $($_.Exception.Message)"
throw
}
}
# Internet Explorer/Edge Zertifikate aktualisieren
function Update-IECertificates {
Write-Info "Aktualisiere Internet Explorer/Edge Zertifikate..."
try {
# IE-Zertifikatscache leeren
Start-Process -FilePath "rundll32.exe" -ArgumentList "wininet.dll,DispatchAPICall 3" -Wait -NoNewWindow
Write-Success "IE/Edge Zertifikate aktualisiert"
}
catch {
Write-Warning "Konnte IE/Edge Zertifikate nicht aktualisieren: $($_.Exception.Message)"
}
}
# Chrome/Chromium Zertifikate installieren
function Install-ChromeCertificates {
Write-Info "Installiere Chrome/Chromium Zertifikate..."
try {
# Chrome verwendet Windows-Zertifikatsspeicher, daher bereits installiert
Write-Success "Chrome verwendet Windows-Zertifikatsspeicher (bereits installiert)"
}
catch {
Write-Warning "Chrome-Zertifikat-Installation fehlgeschlagen: $($_.Exception.Message)"
}
}
# Firefox Zertifikate installieren
function Install-FirefoxCertificates {
Write-Info "Installiere Firefox Zertifikate..."
try {
# Firefox-Profile finden
$firefoxProfiles = Get-ChildItem -Path "$env:APPDATA\Mozilla\Firefox\Profiles" -Directory -ErrorAction SilentlyContinue
if ($firefoxProfiles) {
foreach ($profile in $firefoxProfiles) {
$certdbPath = Join-Path $profile.FullName "cert9.db"
if (Test-Path $certdbPath) {
Write-Info "Firefox-Profil gefunden: $($profile.Name)"
# Hier würde normalerweise certutil verwendet werden
# Da certutil nicht standardmäßig verfügbar ist, überspringen wir dies
}
}
Write-Success "Firefox-Profile verarbeitet"
} else {
Write-Info "Keine Firefox-Profile gefunden"
}
}
catch {
Write-Warning "Firefox-Zertifikat-Installation fehlgeschlagen: $($_.Exception.Message)"
}
}
# Python Zertifikate aktualisieren
function Update-PythonCertificates {
Write-Info "Aktualisiere Python-Zertifikate..."
try {
# Python certifi-Paket aktualisieren
if (Get-Command python -ErrorAction SilentlyContinue) {
python -m pip install --upgrade certifi --quiet
Write-Success "Python certifi-Paket aktualisiert"
} elseif (Get-Command python3 -ErrorAction SilentlyContinue) {
python3 -m pip install --upgrade certifi --quiet
Write-Success "Python3 certifi-Paket aktualisiert"
} else {
Write-Info "Python nicht gefunden - überspringe Python-Zertifikat-Update"
}
}
catch {
Write-Warning "Python-Zertifikat-Update fehlgeschlagen: $($_.Exception.Message)"
}
}
# Node.js Zertifikate konfigurieren
function Set-NodeJSCertificates {
Write-Info "Konfiguriere Node.js Zertifikate..."
try {
if (Get-Command node -ErrorAction SilentlyContinue) {
# Umgebungsvariable für Node.js setzen
$certPath = (Resolve-Path "certs\mercedes\root\mercedes-root-ca.crt").Path
[Environment]::SetEnvironmentVariable("NODE_EXTRA_CA_CERTS", $certPath, "Machine")
Write-Success "Node.js Zertifikate konfiguriert"
} else {
Write-Info "Node.js nicht gefunden - überspringe Node.js-Konfiguration"
}
}
catch {
Write-Warning "Node.js-Zertifikat-Konfiguration fehlgeschlagen: $($_.Exception.Message)"
}
}
# Git Zertifikate konfigurieren
function Set-GitCertificates {
Write-Info "Konfiguriere Git Zertifikate..."
try {
if (Get-Command git -ErrorAction SilentlyContinue) {
$certPath = (Resolve-Path "certs\mercedes\root\mercedes-root-ca.crt").Path
git config --global http.sslCAInfo $certPath
Write-Success "Git Zertifikate konfiguriert"
} else {
Write-Info "Git nicht gefunden - überspringe Git-Konfiguration"
}
}
catch {
Write-Warning "Git-Zertifikat-Konfiguration fehlgeschlagen: $($_.Exception.Message)"
}
}
# Umgebungsvariablen setzen
function Set-EnvironmentVariables {
Write-Info "Setze Umgebungsvariablen..."
try {
$certPath = (Resolve-Path "certs\mercedes\root\mercedes-root-ca.crt").Path
$certDir = (Resolve-Path "certs\mercedes\root").Path
# System-Umgebungsvariablen setzen
[Environment]::SetEnvironmentVariable("SSL_CERT_FILE", $certPath, "Machine")
[Environment]::SetEnvironmentVariable("SSL_CERT_DIR", $certDir, "Machine")
[Environment]::SetEnvironmentVariable("REQUESTS_CA_BUNDLE", $certPath, "Machine")
[Environment]::SetEnvironmentVariable("CURL_CA_BUNDLE", $certPath, "Machine")
# Für aktuelle Session
$env:SSL_CERT_FILE = $certPath
$env:SSL_CERT_DIR = $certDir
$env:REQUESTS_CA_BUNDLE = $certPath
$env:CURL_CA_BUNDLE = $certPath
Write-Success "Umgebungsvariablen gesetzt"
}
catch {
Write-Warning "Umgebungsvariablen konnten nicht gesetzt werden: $($_.Exception.Message)"
}
}
# Zertifikat-Validierung
function Test-Certificates {
Write-Info "Validiere installierte Zertifikate..."
try {
# Windows-Zertifikatsspeicher prüfen
$installedCerts = Get-ChildItem -Path "Cert:\LocalMachine\Root" | Where-Object { $_.Subject -like "*Mercedes*" -or $_.Subject -like "*Daimler*" }
if ($installedCerts) {
Write-Success "Mercedes-Benz Zertifikate im Windows-Speicher gefunden: $($installedCerts.Count)"
} else {
Write-Warning "Keine Mercedes-Benz Zertifikate im Windows-Speicher gefunden"
}
# HTTPS-Verbindung testen
try {
$response = Invoke-WebRequest -Uri "https://httpbin.org/get" -UseBasicParsing -TimeoutSec 10
if ($response.StatusCode -eq 200) {
Write-Success "HTTPS-Verbindungstest erfolgreich"
}
}
catch {
Write-Warning "HTTPS-Verbindungstest fehlgeschlagen: $($_.Exception.Message)"
}
}
catch {
Write-Warning "Zertifikat-Validierung fehlgeschlagen: $($_.Exception.Message)"
}
}
# Backup erstellen
function New-CertificateBackup {
Write-Info "Erstelle Backup der ursprünglichen Zertifikate..."
try {
$backupDate = Get-Date -Format "yyyyMMdd_HHmmss"
$backupPath = "certs\backup\windows-certs-$backupDate"
# Windows-Zertifikatsspeicher exportieren
$certs = Get-ChildItem -Path "Cert:\LocalMachine\Root"
$exportPath = "$backupPath\root-certificates.p7b"
New-Item -ItemType Directory -Path $backupPath -Force | Out-Null
# Alle Root-Zertifikate als Collection exportieren
$certCollection = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2Collection
foreach ($cert in $certs) {
$certCollection.Add($cert)
}
$bytes = $certCollection.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs7)
[System.IO.File]::WriteAllBytes($exportPath, $bytes)
Write-Success "Backup erstellt: $backupPath"
}
catch {
Write-Warning "Backup-Erstellung fehlgeschlagen: $($_.Exception.Message)"
}
}
# Hauptfunktion
function Main {
Write-Info "Starte Mercedes-Benz Zertifikat-Installation für Windows..."
try {
New-CertificateBackup
New-CertificateDirectories
New-MercedesRootCertificates
Install-WindowsCertificates
Update-IECertificates
Install-ChromeCertificates
Install-FirefoxCertificates
Update-PythonCertificates
Set-NodeJSCertificates
Set-GitCertificates
Set-EnvironmentVariables
Test-Certificates
Write-Host ""
Write-Host "=================================================================="
Write-Success "$MERCEDES Mercedes-Benz Zertifikat-Installation abgeschlossen!"
Write-Host "=================================================================="
Write-Host ""
Write-Info "Nächste Schritte:"
Write-Host " 1. PowerShell/CMD neu starten für Umgebungsvariablen"
Write-Host " 2. Browser neu starten für Zertifikat-Erkennung"
Write-Host " 3. HTTPS-Verbindungen testen"
Write-Host ""
Write-Info "Backup-Verzeichnis: $(Resolve-Path 'certs\backup')"
Write-Info "Zertifikat-Verzeichnis: $(Resolve-Path 'certs\mercedes')"
}
catch {
Write-Error "Installation fehlgeschlagen: $($_.Exception.Message)"
exit 1
}
}
# Skript ausführen
Main