diff --git a/backend/app/docs/MERCEDES_ZERTIFIKAT_INSTALLATION.md b/backend/app/docs/MERCEDES_ZERTIFIKAT_INSTALLATION.md new file mode 100644 index 00000000..0519ecba --- /dev/null +++ b/backend/app/docs/MERCEDES_ZERTIFIKAT_INSTALLATION.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/backend/app/install_certificates.sh b/backend/app/install_certificates.sh new file mode 100644 index 00000000..26b243ca --- /dev/null +++ b/backend/app/install_certificates.sh @@ -0,0 +1,297 @@ +#!/bin/bash +# Mercedes-Benz SSL-Zertifikat-Installation - Universeller Wrapper +# Erkennt automatisch das Betriebssystem und führt das entsprechende Skript aus + +set -euo pipefail + +# Farben für Ausgabe +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# Emojis +SUCCESS="✅" +ERROR="❌" +WARNING="⚠️" +INFO="ℹ️" +MERCEDES="🏎️" + +# Logging-Funktionen +log_success() { echo -e "${GREEN}${SUCCESS}${NC} $1"; } +log_error() { echo -e "${RED}${ERROR}${NC} $1"; } +log_warning() { echo -e "${YELLOW}${WARNING}${NC} $1"; } +log_info() { echo -e "${BLUE}${INFO}${NC} $1"; } + +# Header +echo -e "${BLUE}${MERCEDES}${NC} Mercedes-Benz SSL-Zertifikat-Installation ${BLUE}${MERCEDES}${NC}" +echo "==================================================================" +echo "Universeller Installer für alle Betriebssysteme" +echo "" + +# Betriebssystem erkennen +detect_os() { + if [[ "$OSTYPE" == "linux-gnu"* ]]; then + OS="linux" + if command -v apt-get &> /dev/null; then + DISTRO="ubuntu" + elif command -v yum &> /dev/null; then + DISTRO="centos" + elif command -v pacman &> /dev/null; then + DISTRO="arch" + else + DISTRO="generic" + fi + elif [[ "$OSTYPE" == "darwin"* ]]; then + OS="macos" + DISTRO="macos" + elif [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "cygwin" ]]; then + OS="windows" + DISTRO="windows" + else + OS="unknown" + DISTRO="unknown" + fi + + log_info "Erkanntes Betriebssystem: $OS ($DISTRO)" +} + +# Verfügbarkeit der Installationsskripte prüfen +check_scripts() { + log_info "Prüfe verfügbare Installationsskripte..." + + BASH_SCRIPT="install_mercedes_certificates.sh" + POWERSHELL_SCRIPT="install_mercedes_certificates.ps1" + + if [[ ! -f "$BASH_SCRIPT" ]]; then + log_error "Bash-Installationsskript nicht gefunden: $BASH_SCRIPT" + return 1 + fi + + if [[ ! -f "$POWERSHELL_SCRIPT" ]]; then + log_warning "PowerShell-Installationsskript nicht gefunden: $POWERSHELL_SCRIPT" + fi + + log_success "Installationsskripte gefunden" + return 0 +} + +# Berechtigungen prüfen +check_privileges() { + if [[ "$OS" == "windows" ]]; then + # Windows: Prüfung erfolgt im PowerShell-Skript + return 0 + elif [[ $EUID -ne 0 ]]; then + log_error "Dieses Skript muss als Root ausgeführt werden!" + log_info "Verwenden Sie: sudo $0" + return 1 + fi + + log_success "Ausreichende Berechtigungen vorhanden" + return 0 +} + +# Abhängigkeiten installieren +install_dependencies() { + log_info "Installiere notwendige Abhängigkeiten..." + + case "$DISTRO" in + "ubuntu") + apt-get update -qq + apt-get install -y openssl ca-certificates curl wget + ;; + "centos") + yum install -y openssl ca-certificates curl wget + ;; + "arch") + pacman -Sy --noconfirm openssl ca-certificates curl wget + ;; + "macos") + # Prüfe ob Homebrew verfügbar ist + if command -v brew &> /dev/null; then + brew install openssl curl wget + else + log_warning "Homebrew nicht gefunden - manuelle Installation von Abhängigkeiten erforderlich" + fi + ;; + "windows") + log_info "Windows-Abhängigkeiten werden vom PowerShell-Skript verwaltet" + ;; + *) + log_warning "Unbekannte Distribution - überspringe Abhängigkeits-Installation" + ;; + esac + + log_success "Abhängigkeiten installiert" +} + +# Hauptinstallation ausführen +run_installation() { + log_info "Starte betriebssystemspezifische Installation..." + + case "$OS" in + "linux"|"macos") + log_info "Führe Bash-Installation aus..." + chmod +x "$BASH_SCRIPT" + ./"$BASH_SCRIPT" + ;; + "windows") + if [[ -f "$POWERSHELL_SCRIPT" ]]; then + log_info "Führe PowerShell-Installation aus..." + if command -v powershell.exe &> /dev/null; then + powershell.exe -ExecutionPolicy Bypass -File "$POWERSHELL_SCRIPT" + elif command -v pwsh &> /dev/null; then + pwsh -ExecutionPolicy Bypass -File "$POWERSHELL_SCRIPT" + else + log_error "PowerShell nicht gefunden!" + log_info "Führen Sie das Skript manuell aus: $POWERSHELL_SCRIPT" + return 1 + fi + else + log_error "PowerShell-Skript nicht gefunden: $POWERSHELL_SCRIPT" + return 1 + fi + ;; + *) + log_error "Unbekanntes Betriebssystem: $OS" + log_info "Unterstützte Systeme: Linux, macOS, Windows" + return 1 + ;; + esac + + log_success "Installation abgeschlossen" +} + +# Post-Installation Validierung +validate_installation() { + log_info "Validiere Installation..." + + # Prüfe ob Zertifikat-Verzeichnis erstellt wurde + if [[ -d "certs/mercedes/root" ]]; then + log_success "Zertifikat-Verzeichnis gefunden" + else + log_warning "Zertifikat-Verzeichnis nicht gefunden" + fi + + # Prüfe ob Zertifikate vorhanden sind + if [[ -f "certs/mercedes/root/mercedes-root-ca.crt" ]]; then + log_success "Mercedes-Benz Root-Zertifikat gefunden" + else + log_warning "Mercedes-Benz Root-Zertifikat nicht gefunden" + fi + + # Teste HTTPS-Verbindung + if command -v curl &> /dev/null; then + if curl -s --connect-timeout 10 https://httpbin.org/get > /dev/null 2>&1; then + log_success "HTTPS-Verbindungstest erfolgreich" + else + log_warning "HTTPS-Verbindungstest fehlgeschlagen" + fi + fi +} + +# Hilfe anzeigen +show_help() { + echo "Mercedes-Benz SSL-Zertifikat-Installation" + echo "" + echo "Verwendung: $0 [OPTIONEN]" + echo "" + echo "Optionen:" + echo " -h, --help Zeigt diese Hilfe an" + echo " -v, --verbose Verbose-Ausgabe" + echo " --check-only Nur Systemprüfung, keine Installation" + echo " --force Erzwungene Installation" + echo "" + echo "Unterstützte Betriebssysteme:" + echo " - Linux (Ubuntu, CentOS, Arch Linux)" + echo " - macOS" + echo " - Windows (über PowerShell)" + echo "" + echo "Beispiele:" + echo " sudo $0 # Standard-Installation" + echo " sudo $0 --verbose # Mit detaillierter Ausgabe" + echo " $0 --check-only # Nur Systemprüfung" +} + +# Hauptfunktion +main() { + local check_only=false + local verbose=false + local force=false + + # Parameter verarbeiten + while [[ $# -gt 0 ]]; do + case $1 in + -h|--help) + show_help + exit 0 + ;; + -v|--verbose) + verbose=true + shift + ;; + --check-only) + check_only=true + shift + ;; + --force) + force=true + shift + ;; + *) + log_error "Unbekannte Option: $1" + show_help + exit 1 + ;; + esac + done + + # Verbose-Modus aktivieren + if [[ "$verbose" == true ]]; then + set -x + fi + + # Systemprüfung + detect_os + + if ! check_scripts; then + exit 1 + fi + + if ! check_privileges; then + exit 1 + fi + + # Nur Prüfung gewünscht? + if [[ "$check_only" == true ]]; then + log_success "Systemprüfung abgeschlossen - System ist bereit für Installation" + exit 0 + fi + + # Installation durchführen + log_info "Starte Mercedes-Benz Zertifikat-Installation..." + + install_dependencies + run_installation + validate_installation + + echo "" + echo "==================================================================" + log_success "${MERCEDES} Mercedes-Benz Zertifikat-Installation erfolgreich abgeschlossen!" + echo "==================================================================" + echo "" + log_info "Nächste Schritte:" + echo " 1. Terminal/PowerShell neu starten" + echo " 2. Browser neu starten" + echo " 3. HTTPS-Verbindungen testen" + echo "" + log_info "Dokumentation: docs/MERCEDES_ZERTIFIKAT_INSTALLATION.md" + log_info "Support: Siehe Dokumentation für Kontaktinformationen" +} + +# Fehlerbehandlung +trap 'log_error "Installation wurde unterbrochen"; exit 1' INT TERM + +# Skript ausführen +main "$@" \ No newline at end of file diff --git a/backend/app/install_mercedes_certificates.ps1 b/backend/app/install_mercedes_certificates.ps1 new file mode 100644 index 00000000..4774a505 --- /dev/null +++ b/backend/app/install_mercedes_certificates.ps1 @@ -0,0 +1,374 @@ +# 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 \ No newline at end of file diff --git a/backend/app/install_mercedes_certificates.sh b/backend/app/install_mercedes_certificates.sh new file mode 100644 index 00000000..cf62694f --- /dev/null +++ b/backend/app/install_mercedes_certificates.sh @@ -0,0 +1,423 @@ +#!/bin/bash +# Mercedes-Benz SSL-Zertifikat-Installationsskript +# Installiert notwendige Zertifikate für sichere Netzwerkverbindungen + +set -euo pipefail + +# Farben für Ausgabe +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# Emojis für bessere Lesbarkeit +SUCCESS="✅" +ERROR="❌" +WARNING="⚠️" +INFO="ℹ️" +CERT="🔐" +MERCEDES="🏎️" + +# Logging-Funktion +log() { + echo -e "${1} $(date '+%Y-%m-%d %H:%M:%S') - ${2}" +} + +log_success() { log "${GREEN}${SUCCESS}${NC}" "$1"; } +log_error() { log "${RED}${ERROR}${NC}" "$1"; } +log_warning() { log "${YELLOW}${WARNING}${NC}" "$1"; } +log_info() { log "${BLUE}${INFO}${NC}" "$1"; } + +# Header +echo -e "${BLUE}${MERCEDES}${NC} Mercedes-Benz SSL-Zertifikat-Installation ${BLUE}${MERCEDES}${NC}" +echo "==================================================================" +echo "" + +# Betriebssystem erkennen +detect_os() { + if [[ "$OSTYPE" == "linux-gnu"* ]]; then + if command -v apt-get &> /dev/null; then + OS="ubuntu" + elif command -v yum &> /dev/null; then + OS="centos" + elif command -v pacman &> /dev/null; then + OS="arch" + else + OS="linux" + fi + elif [[ "$OSTYPE" == "darwin"* ]]; then + OS="macos" + elif [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "cygwin" ]]; then + OS="windows" + else + OS="unknown" + fi + + log_info "Erkanntes Betriebssystem: $OS" +} + +# Root-Rechte prüfen (außer Windows) +check_privileges() { + if [[ "$OS" != "windows" ]] && [[ $EUID -ne 0 ]]; then + log_error "Dieses Skript muss als Root ausgeführt werden!" + log_info "Verwenden Sie: sudo $0" + exit 1 + fi +} + +# Zertifikat-Verzeichnisse erstellen +create_cert_directories() { + log_info "Erstelle Zertifikat-Verzeichnisse..." + + mkdir -p certs/mercedes/{root,intermediate,server} + mkdir -p certs/backup + + log_success "Zertifikat-Verzeichnisse erstellt" +} + +# Mercedes-Benz Root-Zertifikate herunterladen/installieren +install_mercedes_root_certs() { + log_info "${CERT} Installiere Mercedes-Benz Root-Zertifikate..." + + # Mercedes-Benz Corporate Root CA + cat > certs/mercedes/root/mercedes-root-ca.crt << 'EOF' +-----BEGIN CERTIFICATE----- +MIIGOTCCBCGgAwIBAgIQSeiY3h8+WoxNSBg0jOy/ozANBgkqhkiG9w0BAQsFADA9 +MQswCQYDVQQGEwJERTETMBEGA1UECgwKRGFpbWxlciBBRzEZMBcGA1UEAwwQQ29y +cC1QcmotUm9vdC1DQTAeFw0yMDA5MzAyMTM0MzlaFw00MDA5MzAyMTM0MzlaMD0x +CzAJBgNVBAYTAkRFMRMwEQYDVQQKDApEYWltbGVyIEFHMRkwFwYDVQQDDBBDb3Jw +LVByai1Sb290LUNBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmwTL +4Pwy4W9yM637BwmYYPle5YErD/lpbmP8b3if+BKmwsWsOz2pRzCNDCPUnZl7xW1e +XrMmmksD6MRXk2vwz/BAXgf5Bc6+ii+q4ia3Tt+voKLZXJej5cXuqoZrGWzdlC5H +bY2SxUwbr7O05CsQzVsGhI+rbGDCUbjfE6NY2s3BbMpjndQYX/9JV+KHg6puZI/o +s1vt/RaOHkuvd9NFmrCdb9A+b0CpMT2K4tQzgNjk30MNfI6DRwHUjxF2l1ZpscHq +28gj4PfWbA9d/kxwuxOOJX4rfihRiwwnUzwF3jD1MlnHu4GTGLBIoke2KUXL0BI9 +IrSKvl3DjRZf3XRcAo4IlT8tECaRZloTIVNgACsUmSNtIWn/x6EUKoaLvqZf6BQt +4I+tuMdmIqRkGA+MRuCHbPsjpDBPsQ5Y+r80MF1STode0Peq6gTdYvRbN7KJjbET +uXFjD520LEBRP1YaA99DMmer2e0znhkCffwrkWYQUc1B2yUdyS08UfMIqm8CybWD +lFTE2Taau2xebGlBeipvJ4QkzrR3TZ9CsTb+h38o50F4GHUh5nF0ll0IIS/73XtQ +YSEOaCxCBiEraIxPIg9HRj6yASnA7korzqUb3cmJiqIoLOjoMqZL1NksbEJBranV +QMzY4lNuNHabjwa3P36MoGIkUj334EigoEtqwvMCAwEAAaOCATMwggEvMA4GA1Ud +DwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTojU2VKgTmq3j3 +JZl7o9WYdlWuHDCB7AYDVR0gBIHkMIHhMIHeBgRVHSAAMIHVMCoGCCsGAQUFBwIB +Fh5odHRwOi8vcGtpLmNvcnBzaGFyZWQubmV0L2Nwcy8wgaYGCCsGAQUFBwICMIGZ +HoGWAEQAYQBpAG0AbABlAHIAIABQAHIAbwBqAGUAYwB0ACAAQwBBACAAQwBlAHIA +dABpAGYAaQBjAGEAdABlACAAUABvAGwAaQBjAHkAIABhAG4AZAAgAEMAZQByAHQA +aQBmAGkAYwBhAHQAaQBvAG4AIABQAHIAYQBjAHQAaQBjAGUAIABTAHQAYQB0AGUA +bQBlAG4AdAAuMA0GCSqGSIb3DQEBCwUAA4ICAQA1/LxktggnmFd7k77Qkub89LpI +26BdNXpozIpc5+uW0W2Q1jJ30PHNEaXGNt2hBA7sXxCYx/+NrrC2RE/8QClZ6kUk +P+AT8W2j0msmh5TpH9TRizDRGFbIlvsLlDRAW2FuTKYL1N7LXFE8oqlqpo6Tl+k9 +6yWJwVyZInTwRy0BWAPviA/n2gJuEGTIFi3I494d6YMKIDw5LAvH90ISVNRN7+a3 +DBmdVATSQRA9cEsLgDxpDQnOMxNaSIsIKD8DKGwD+m7Kzgwg5Qg9JyC734wJMqu9 +wHdZJ1FiTXNkH68dOK2zNGNEsjhUTH058joY2y33dxawJXTkeqDVP2uozC2ruWDs +QUT/AdLcUWa+mrFyDSw0IvrdUmSp3fWW9+Sx3o2uInSSBISkVByg3XvYag+Ibdiy +83Denqi9SVQjzTclfx0XNbjcSoxvRRluegNXuU0P48PZ2/QKZhs0hJ7poQCeUlDe +O8oOGhOOejlouUi0uqOthfS1puqlLIAESjWADyufir1+WcMow7PVUy9+agg9lpgr +aH7+klVjLPiGYUg3CxGv+aO6uYSA089SuhJRrurYuOXuP3VqaoPx0Smbj1JZ1n3D +HlSPGaSVWF06l5gF0dZj1IgrWjljvhfhr8Mfj5aQCiUDWN7YhLzthzlrhSeV8sY7 +i9eJKKHKnwWB67iC4g== +-----END CERTIFICATE----- +EOF + + # Daimler AG Root CA + cat > certs/mercedes/root/daimler-root-ca.crt << 'EOF' +-----BEGIN CERTIFICATE----- +MIIGIjCCBAqgAwIBAgIQHFAzqM8GW6RCGy2VQ1JYBDANBgkqhkiG9w0BAQsFADA8 +MQswCQYDVQQGEwJERTETMBEGA1UECgwKRGFpbWxlciBBRzEYMBYGA1UEAwwPQ29y +cC1Sb290LUNBLUcyMB4XDTE2MTEwMjEzNTE1NFoXDTM2MTEwMjEzNTE1NFowPDEL +MAkGA1UEBhMCREUxEzARBgNVBAoMCkRhaW1sZXIgQUcxGDAWBgNVBAMMD0NvcnAt +Um9vdC1DQS1HMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMJPB4sn +gp25cVIrmOaU+V4ZpCeuzzUJDdHDyd7wPTezjgzpp70s65SgTFtvHV2171OaVaFP +RWl3Tnm2dt4TOzTTf5L6VSn7RcAH3DKZ9hmWpyTZNEdTViLOBMcxYyNWD42oSpvM +hrqhPc19/6G4a2DqX7wWLrMtw8gxZXP6Fu/2Xzgw+Bw0iUo3DUaZu6Qiw+mrAZis +VhrsjrTChj9+sgpva/JLZPAU0UlSRKa+jZL2O5cZY8AL21NFNmR+MbxI/inPcBXO +k803MszGPraZbKk+ZPgyn38O3BwPNZRBzadi5f6XwI9W9K0Ar7rXjUf/OJRL8//1 +qqsILdyYYultdv1BldXsN5szPsXrRyOlln0+bmer+k8KDdTekV0Y9aiOTgUIlvhH +D7ocCR7vZulyLtgg0YkMbV3ds2dC7ZNJiGYiR0WY/XaEE7Nn1RuQvJvfRYuotPqU ++Ra2jkqM8BS/CfN/NEL1C6Gki1+Xwgbyp6Y0u9ouuBhuK8hBA8F8XPmtg8j05MSl +/M3zetIhxPf/N6l09oARzRyaTlVj+RiUhX4maKW7CxEsjcY+NsnunfYCTYtrrM0b +L/c3x84B+tlYmJ2P1AEzBDT0DG2rz8qc9CszgcvDzyBOWFav14enWihMXaQglmZK +6atHWUIHG7xU6+URey3fuiERu8bRUWJylnLXAgMBAAGjggEeMIIBGjAOBgNVHQ8B +Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjMD1u+au8ZZ5Svfo +uG1K4odr0XQwgdcGA1UdIASBzzCBzDCByQYEVR0gADCBwDArBggrBgEFBQcCARYf +aHR0cDovL3BraS5jb3Jwc2hhcmVkLm5ldC9jcHMvADCBkAYIKwYBBQUHAgIwgYMe +gYAARABhAGkAbQBsAGUAcgAgAEMAZQByAHQAaQBmAGkAYwBhAHQAZQAgAFAAbwBs +AGkAYwB5ACAAYQBuAGQAIABDAGUAcgB0AGkAZgBpAGMAYQB0AGkAbwBuACAAUABy +AGEAYwB0AGkAYwBlACAAUwB0AGEAdABlAG0AZQBuAHQALjANBgkqhkiG9w0BAQsF +AAOCAgEAO/YuDNU9uPMKlkjTHg7kzs3dtEE2HA/aRD2ko4UDkOf8fSynIv5AcuC2 +O//bbcTmFByU7OFx/P6JXIsqXhnw+8HdScZB8RxUwskjbD9qSq2zG+vcL9WRvNw5 +5/Igq3xbNMHWLix+h98IV3Rzok6i6btHr9/yvdvDMHlcy7hMfkMhsx9IoXveJLcB +2n0s/JYqkR+eN+zJ7C3sx+W/nAMkwqG3oFAiaKVUmvbRD9eKOssAEQGZi7AgCige +D395CIL+jIZfxrSotTlR5oxx0LabxACEAulL6I5Retnnpsnbc75sQnpMBKFvQO8n +dPTdzNCp7337Qby1fPnrzig4SndSSf/crbPBU3N/tZWKldC3SHmcOhAzBUwMibQC +GsvkPxIqROYFRoKRv5VlsoqSJkb225DTfq1TyP9wHhi80ZllOpHrFkdc+Z6a62O3 +sGQNSymxC5xyNMsVd8GidgxbCa1xXHNtTnKTxsbzFvTXgL7GwbJnaf341uP/+sTt +L7i3SsMynWRMQgXIbu8h+zriacnAWoQmxeJ/by/TZUUSNcYxyZWDmIxR3ZIdS2AO +srlDmNt++Q3P0DHpJXOvZKeRoWyTsA8RceRvAoJWjBSBwuW2kThKHqwAOVRwQ2o9 +uPU7Ic3wisWJTNmVF7d/QATRL2tVV2HV1+O4aTNl9s8bTKZ4P1w= +-----END CERTIFICATE----- +EOF + + log_success "Mercedes-Benz Root-Zertifikate erstellt" +} + +# System-Zertifikatsspeicher aktualisieren +update_system_cert_store() { + log_info "Aktualisiere System-Zertifikatsspeicher..." + + case "$OS" in + "ubuntu") + # Ubuntu/Debian + cp certs/mercedes/root/*.crt /usr/local/share/ca-certificates/ + update-ca-certificates + ;; + "centos") + # CentOS/RHEL + cp certs/mercedes/root/*.crt /etc/pki/ca-trust/source/anchors/ + update-ca-trust + ;; + "arch") + # Arch Linux + cp certs/mercedes/root/*.crt /etc/ca-certificates/trust-source/anchors/ + trust extract-compat + ;; + "macos") + # macOS + for cert in certs/mercedes/root/*.crt; do + security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "$cert" + done + ;; + "windows") + # Windows (über PowerShell) + powershell.exe -Command " + Get-ChildItem -Path 'certs/mercedes/root/*.crt' | ForEach-Object { + Import-Certificate -FilePath \$_.FullName -CertStoreLocation Cert:\\LocalMachine\\Root + } + " + ;; + *) + log_warning "Unbekanntes OS - manuelle Installation erforderlich" + ;; + esac + + log_success "System-Zertifikatsspeicher aktualisiert" +} + +# Python-Zertifikate aktualisieren +update_python_certs() { + log_info "Aktualisiere Python-Zertifikate..." + + # Python certifi-Paket aktualisieren + if command -v pip3 &> /dev/null; then + pip3 install --upgrade certifi + elif command -v pip &> /dev/null; then + pip install --upgrade certifi + fi + + # Requests-Zertifikate aktualisieren + python3 -c " +import ssl +import certifi +print(f'Python SSL-Kontext: {ssl.create_default_context().check_hostname}') +print(f'Certifi-Pfad: {certifi.where()}') +" 2>/dev/null || log_warning "Python-Zertifikat-Check fehlgeschlagen" + + log_success "Python-Zertifikate aktualisiert" +} + +# Node.js-Zertifikate aktualisieren +update_nodejs_certs() { + if command -v node &> /dev/null; then + log_info "Aktualisiere Node.js-Zertifikate..." + + # Node.js CA-Bundle aktualisieren + export NODE_EXTRA_CA_CERTS="$(pwd)/certs/mercedes/root/mercedes-root-ca.crt" + + log_success "Node.js-Zertifikate konfiguriert" + fi +} + +# Git-Zertifikate konfigurieren +configure_git_certs() { + if command -v git &> /dev/null; then + log_info "Konfiguriere Git-Zertifikate..." + + # Git CA-Bundle setzen + git config --global http.sslCAInfo "$(pwd)/certs/mercedes/root/mercedes-root-ca.crt" + + log_success "Git-Zertifikate konfiguriert" + fi +} + +# Curl-Zertifikate konfigurieren +configure_curl_certs() { + if command -v curl &> /dev/null; then + log_info "Konfiguriere Curl-Zertifikate..." + + # Curl CA-Bundle in .curlrc setzen + echo "cacert = $(pwd)/certs/mercedes/root/mercedes-root-ca.crt" >> ~/.curlrc + + log_success "Curl-Zertifikate konfiguriert" + fi +} + +# Wget-Zertifikate konfigurieren +configure_wget_certs() { + if command -v wget &> /dev/null; then + log_info "Konfiguriere Wget-Zertifikate..." + + # Wget CA-Bundle in .wgetrc setzen + echo "ca_certificate = $(pwd)/certs/mercedes/root/mercedes-root-ca.crt" >> ~/.wgetrc + + log_success "Wget-Zertifikate konfiguriert" + fi +} + +# Browser-Zertifikate installieren +install_browser_certs() { + log_info "Installiere Browser-Zertifikate..." + + case "$OS" in + "ubuntu"|"linux") + # Chrome/Chromium + if command -v google-chrome &> /dev/null || command -v chromium-browser &> /dev/null; then + mkdir -p ~/.pki/nssdb + certutil -A -n "Mercedes-Benz Root CA" -t "C,," -i certs/mercedes/root/mercedes-root-ca.crt -d ~/.pki/nssdb 2>/dev/null || true + fi + + # Firefox + if command -v firefox &> /dev/null; then + FIREFOX_PROFILE=$(find ~/.mozilla/firefox -name "*.default*" -type d | head -1) + if [[ -n "$FIREFOX_PROFILE" ]]; then + certutil -A -n "Mercedes-Benz Root CA" -t "C,," -i certs/mercedes/root/mercedes-root-ca.crt -d "$FIREFOX_PROFILE" 2>/dev/null || true + fi + fi + ;; + "macos") + # Safari verwendet System-Keychain (bereits installiert) + log_info "Safari verwendet System-Keychain" + ;; + "windows") + # Internet Explorer/Edge verwenden Windows-Zertifikatsspeicher (bereits installiert) + log_info "IE/Edge verwenden Windows-Zertifikatsspeicher" + ;; + esac + + log_success "Browser-Zertifikate installiert" +} + +# Zertifikat-Validierung +validate_certificates() { + log_info "Validiere installierte Zertifikate..." + + # Test mit OpenSSL + if command -v openssl &> /dev/null; then + openssl verify -CAfile certs/mercedes/root/mercedes-root-ca.crt certs/mercedes/root/mercedes-root-ca.crt &>/dev/null && \ + log_success "OpenSSL-Validierung erfolgreich" || \ + log_warning "OpenSSL-Validierung fehlgeschlagen" + fi + + # Test mit Python requests + python3 -c " +import requests +import ssl +try: + # Test HTTPS-Verbindung + response = requests.get('https://httpbin.org/get', timeout=10) + print('✅ Python requests: HTTPS-Verbindung erfolgreich') +except Exception as e: + print(f'⚠️ Python requests: {e}') +" 2>/dev/null || log_warning "Python requests-Test fehlgeschlagen" + + # Test mit Curl + if command -v curl &> /dev/null; then + curl -s --connect-timeout 10 https://httpbin.org/get > /dev/null && \ + log_success "Curl HTTPS-Test erfolgreich" || \ + log_warning "Curl HTTPS-Test fehlgeschlagen" + fi +} + +# Backup erstellen +create_backup() { + log_info "Erstelle Backup der ursprünglichen Zertifikate..." + + case "$OS" in + "ubuntu") + cp -r /etc/ssl/certs certs/backup/original-certs-$(date +%Y%m%d) 2>/dev/null || true + ;; + "centos") + cp -r /etc/pki/tls/certs certs/backup/original-certs-$(date +%Y%m%d) 2>/dev/null || true + ;; + "macos") + security export -k /Library/Keychains/System.keychain -o certs/backup/system-keychain-$(date +%Y%m%d).p12 2>/dev/null || true + ;; + esac + + log_success "Backup erstellt" +} + +# Umgebungsvariablen setzen +set_environment_variables() { + log_info "Setze Umgebungsvariablen..." + + # SSL-Umgebungsvariablen + cat >> ~/.bashrc << EOF + +# Mercedes-Benz SSL-Zertifikat-Konfiguration +export SSL_CERT_FILE="$(pwd)/certs/mercedes/root/mercedes-root-ca.crt" +export SSL_CERT_DIR="$(pwd)/certs/mercedes/root" +export REQUESTS_CA_BUNDLE="$(pwd)/certs/mercedes/root/mercedes-root-ca.crt" +export CURL_CA_BUNDLE="$(pwd)/certs/mercedes/root/mercedes-root-ca.crt" +export NODE_EXTRA_CA_CERTS="$(pwd)/certs/mercedes/root/mercedes-root-ca.crt" + +EOF + + # Für aktuelle Session + export SSL_CERT_FILE="$(pwd)/certs/mercedes/root/mercedes-root-ca.crt" + export SSL_CERT_DIR="$(pwd)/certs/mercedes/root" + export REQUESTS_CA_BUNDLE="$(pwd)/certs/mercedes/root/mercedes-root-ca.crt" + export CURL_CA_BUNDLE="$(pwd)/certs/mercedes/root/mercedes-root-ca.crt" + export NODE_EXTRA_CA_CERTS="$(pwd)/certs/mercedes/root/mercedes-root-ca.crt" + + log_success "Umgebungsvariablen gesetzt" +} + +# Hauptfunktion +main() { + log_info "Starte Mercedes-Benz Zertifikat-Installation..." + + detect_os + check_privileges + create_backup + create_cert_directories + install_mercedes_root_certs + update_system_cert_store + update_python_certs + update_nodejs_certs + configure_git_certs + configure_curl_certs + configure_wget_certs + install_browser_certs + set_environment_variables + validate_certificates + + echo "" + echo "==================================================================" + log_success "${MERCEDES} Mercedes-Benz Zertifikat-Installation abgeschlossen!" + echo "==================================================================" + echo "" + log_info "Nächste Schritte:" + echo " 1. Terminal neu starten oder 'source ~/.bashrc' ausführen" + echo " 2. Anwendungen neu starten für Zertifikat-Erkennung" + echo " 3. HTTPS-Verbindungen testen" + echo "" + log_info "Backup-Verzeichnis: $(pwd)/certs/backup" + log_info "Zertifikat-Verzeichnis: $(pwd)/certs/mercedes" +} + +# Fehlerbehandlung +trap 'log_error "Skript wurde unterbrochen"; exit 1' INT TERM + +# Skript ausführen +main "$@" \ No newline at end of file diff --git a/backend/app/schnellstart_raspberry_pi.sh b/backend/app/schnellstart_raspberry_pi.sh index 06700fa3..e1c07492 100644 --- a/backend/app/schnellstart_raspberry_pi.sh +++ b/backend/app/schnellstart_raspberry_pi.sh @@ -722,9 +722,9 @@ case "$1" in echo " ✅ Anwendung erreichbar" else echo " ❌ Anwendung NICHT erreichbar" - fi - - echo +fi + +echo # Kiosk-Check echo "🖥️ Kiosk-Status:" if pgrep -u kiosk > /dev/null; then @@ -816,8 +816,8 @@ else exit 0 else echo "Kein unterstützter Browser gefunden!" - exit 1 - fi + exit 1 +fi fi echo "Starte \$CHROMIUM_BIN im Kiosk-Modus..." diff --git a/backend/app/utils/windows_fixes.py b/backend/app/utils/windows_fixes.py index c8c91d96..4c1be66f 100644 --- a/backend/app/utils/windows_fixes.py +++ b/backend/app/utils/windows_fixes.py @@ -213,7 +213,7 @@ def apply_all_windows_fixes(): return try: - logger.info("🔧 Wende Windows-spezifische Fixes an...") + windows_logger.info("🔧 Wende Windows-spezifische Fixes an...") # 1. Encoding-Fixes apply_encoding_fixes() @@ -231,10 +231,10 @@ def apply_all_windows_fixes(): apply_global_subprocess_patch() _windows_fixes_applied = True - logger.info("✅ Alle Windows-Fixes erfolgreich angewendet") + windows_logger.info("✅ Alle Windows-Fixes erfolgreich angewendet") except Exception as e: - logger.error(f"❌ Fehler beim Anwenden der Windows-Fixes: {str(e)}") + windows_logger.error(f"❌ Fehler beim Anwenden der Windows-Fixes: {str(e)}") raise e # Automatisch Windows-Fixes beim Import anwenden (nur einmal) @@ -245,9 +245,9 @@ if os.name == 'nt' and not _windows_fixes_applied: if not hasattr(subprocess, '_early_patched'): patch_subprocess() subprocess._early_patched = True - logger.info("✅ Früher subprocess-Patch beim Import angewendet") + windows_logger.info("✅ Früher subprocess-Patch beim Import angewendet") except Exception as e: - logger.warning(f"⚠️ Früher subprocess-Patch fehlgeschlagen: {str(e)}") + windows_logger.warning(f"⚠️ Früher subprocess-Patch fehlgeschlagen: {str(e)}") apply_all_windows_fixes() @@ -350,4 +350,46 @@ def apply_global_subprocess_patch(): # Sichere subprocess-Funktion exportieren __all__.append('safe_subprocess_run') __all__.append('patch_subprocess') -__all__.append('apply_global_subprocess_patch') \ No newline at end of file +__all__.append('apply_global_subprocess_patch') + +# ===== ENCODING-FIXES ===== + +def apply_encoding_fixes(): + """Wendet Windows-spezifische Encoding-Fixes an.""" + try: + # Umgebungsvariablen für bessere Windows-Kompatibilität + os.environ['PYTHONIOENCODING'] = 'utf-8' + os.environ['PYTHONUTF8'] = '1' + + windows_logger.debug("✅ Windows-Encoding-Fixes angewendet") + + except Exception as e: + windows_logger.warning(f"⚠️ Encoding-Fixes konnten nicht angewendet werden: {str(e)}") + +# ===== THREADING-FIXES ===== + +def apply_threading_fixes(): + """Wendet Windows-spezifische Threading-Fixes an.""" + try: + # Thread-Manager initialisieren + get_windows_thread_manager() + + # Socket-Fixes anwenden + fix_windows_socket_issues() + apply_safe_socket_options() + + windows_logger.debug("✅ Windows-Threading-Fixes angewendet") + + except Exception as e: + windows_logger.warning(f"⚠️ Threading-Fixes konnten nicht angewendet werden: {str(e)}") + +# ===== SIGNAL-FIXES ===== + +def apply_signal_fixes(): + """Wendet Windows-spezifische Signal-Handler-Fixes an.""" + try: + # Signal-Handler werden bereits im WindowsThreadManager registriert + windows_logger.debug("✅ Windows-Signal-Fixes angewendet") + + except Exception as e: + windows_logger.warning(f"⚠️ Signal-Fixes konnten nicht angewendet werden: {str(e)}") \ No newline at end of file