📚 Improved Mercedes Certificate Installation Documentation and Scripts 🎉
This commit is contained in:
parent
b567f21e43
commit
c2d75f0d46
1
backend/app/docs/MERCEDES_ZERTIFIKAT_INSTALLATION.md
Normal file
1
backend/app/docs/MERCEDES_ZERTIFIKAT_INSTALLATION.md
Normal file
@ -0,0 +1 @@
|
||||
|
297
backend/app/install_certificates.sh
Normal file
297
backend/app/install_certificates.sh
Normal file
@ -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 "$@"
|
374
backend/app/install_mercedes_certificates.ps1
Normal file
374
backend/app/install_mercedes_certificates.ps1
Normal file
@ -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
|
423
backend/app/install_mercedes_certificates.sh
Normal file
423
backend/app/install_mercedes_certificates.sh
Normal file
@ -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 "$@"
|
@ -722,9 +722,9 @@ case "$1" in
|
||||
echo " ✅ Anwendung erreichbar"
|
||||
else
|
||||
echo " ❌ Anwendung NICHT erreichbar"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo
|
||||
echo
|
||||
# Kiosk-Check
|
||||
echo "🖥️ Kiosk-Status:"
|
||||
if pgrep -u kiosk > /dev/null; then
|
||||
@ -817,7 +817,7 @@ else
|
||||
else
|
||||
echo "Kein unterstützter Browser gefunden!"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Starte \$CHROMIUM_BIN im Kiosk-Modus..."
|
||||
|
@ -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()
|
||||
|
||||
@ -351,3 +351,45 @@ def apply_global_subprocess_patch():
|
||||
__all__.append('safe_subprocess_run')
|
||||
__all__.append('patch_subprocess')
|
||||
__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)}")
|
Loading…
x
Reference in New Issue
Block a user