# RASPBERRY PI SSL FIX - ERR_SSL_KEY_USAGE_INCOMPATIBLE

## 🍓 SSL-Problem auf Raspberry Pi Zielsystem lösen

Das `ERR_SSL_KEY_USAGE_INCOMPATIBLE` Problem tritt auf dem **Raspberry Pi** auf, weil die SSL-Zertifikat-Extensions nicht browser-kompatibel sind.

## 🚀 Automatische Lösung auf Raspberry Pi

### Option 1: Automatisches Skript (Empfohlen)
```bash
# Übertrage das Skript auf den Raspberry Pi
scp backend/fix_ssl_raspberry.sh pi@m040tbaraspi001:/tmp/

# Führe auf dem Raspberry Pi aus:
ssh pi@m040tbaraspi001
sudo chmod +x /tmp/fix_ssl_raspberry.sh
sudo /tmp/fix_ssl_raspberry.sh
```

### Option 2: Setup-Skript SSL-Regenerierung
```bash
# Auf dem Raspberry Pi:
cd /opt/myp
sudo ./setup.sh

# Wähle Option [1] Abhängigkeiten installieren
# Das Skript regeneriert automatisch SSL-Zertifikate
```

## 🔧 Manuelle Lösung auf Raspberry Pi

### Schritt 1: SSH-Verbindung
```bash
# Von Windows-Entwicklungsrechner:
ssh pi@m040tbaraspi001.de040.corpintra.net
# oder
ssh pi@192.168.1.XXX
```

### Schritt 2: SSL-Verzeichnis vorbereiten
```bash
sudo mkdir -p /opt/myp/ssl
sudo mkdir -p /opt/myp/ssl/backup
cd /opt/myp/ssl
```

### Schritt 3: Backup existierender Zertifikate
```bash
if [ -f cert.pem ]; then
    sudo cp cert.pem backup/cert_backup_$(date +%Y%m%d_%H%M%S).pem
    sudo cp key.pem backup/key_backup_$(date +%Y%m%d_%H%M%S).pem
    echo "Backup erstellt"
fi
```

### Schritt 4: Browser-kompatible OpenSSL-Konfiguration
```bash
sudo tee openssl_raspberry_fix.conf << 'EOF'
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no

[req_distinguished_name]
C = DE
ST = Baden-Wuerttemberg
L = Stuttgart
O = Mercedes-Benz AG
OU = MYP Druckerverwaltung
CN = m040tbaraspi001

[v3_req]
# KRITISCH für Browser-Kompatibilität
basicConstraints = critical, CA:FALSE
keyUsage = critical, digitalSignature, keyEncipherment, keyAgreement
extendedKeyUsage = critical, serverAuth, clientAuth
subjectAltName = critical, @alt_names
nsCertType = server

[alt_names]
# Lokale Entwicklung
DNS.1 = localhost
DNS.2 = *.localhost
IP.1 = 127.0.0.1
IP.2 = ::1

# Raspberry Pi Hostname
DNS.3 = m040tbaraspi001
DNS.4 = m040tbaraspi001.local
DNS.5 = raspberrypi
DNS.6 = raspberrypi.local

# Intranet-Domain
DNS.7 = m040tbaraspi001.de040.corpintra.net
DNS.8 = *.de040.corpintra.net

# Typische Raspberry Pi IPs
IP.3 = 0.0.0.0
EOF
```

### Schritt 5: Neue Zertifikate generieren
```bash
# Private Key generieren
sudo openssl genrsa -out key.pem 2048

# Browser-kompatibles Zertifikat erstellen
sudo openssl req -new -x509 \
    -key key.pem \
    -out cert.pem \
    -days 365 \
    -config openssl_raspberry_fix.conf \
    -extensions v3_req \
    -sha256

# Berechtigungen setzen
sudo chmod 644 cert.pem   # Alle können lesen
sudo chmod 600 key.pem    # Nur root kann lesen
sudo chown root:root cert.pem key.pem

# Aufräumen
sudo rm openssl_raspberry_fix.conf
```

### Schritt 6: Validierung
```bash
# Prüfe Browser-Kompatibilität
openssl x509 -in cert.pem -noout -text | grep -E "(Digital Signature|Key Encipherment|TLS Web Server Authentication|Subject Alternative Name|CA:FALSE)"

# Prüfe Raspberry Pi spezifische Einträge
openssl x509 -in cert.pem -noout -text | grep -E "(m040tbaraspi001|localhost|de040.corpintra.net)"
```

### Schritt 7: Services neu starten
```bash
# MYP Services neu starten
sudo systemctl restart myp-app.service
sudo systemctl restart myp-kiosk.service

# Status prüfen
sudo systemctl status myp-app.service
sudo systemctl status myp-kiosk.service
```

## 🌐 Zugriff nach SSL-Fix

### Intranet-Zugriff (von Windows-Client):
```
https://m040tbaraspi001.de040.corpintra.net
```

### Lokaler Zugriff (auf Raspberry Pi):
```
https://localhost:5000
```

### Direkte IP (falls DNS-Probleme):
```
https://192.168.1.XXX:5000
```

## 🔥 Firewall-Konfiguration

### UFW Firewall auf Raspberry Pi:
```bash
# Prüfe Firewall-Status
sudo ufw status

# Öffne HTTPS-Port falls blockiert
sudo ufw allow 443/tcp
sudo ufw allow 5000/tcp

# Status erneut prüfen
sudo ufw status numbered
```

## 🖥️ Browser-Setup auf Windows-Client

### Nach SSL-Fix auf Raspberry Pi:

#### 1. Browser-Cache vollständig leeren:
- **Chrome/Edge**: `Strg+Shift+Del` → "Gesamte Zeit" → alle Optionen
- **Firefox**: `Strg+Shift+Del` → "Alles" auswählen

#### 2. DNS-Cache leeren (Windows):
```cmd
ipconfig /flushdns
```

#### 3. Browser-Zugriff testen:
1. Öffne: `https://m040tbaraspi001.de040.corpintra.net`
2. Bei SSL-Warnung: **"Erweitert"** → **"Weiter zu m040tbaraspi001 (unsicher)"**

## 🐛 Debugging auf Raspberry Pi

### SSL-Verbindung testen:
```bash
# Teste SSL-Handshake
openssl s_client -connect localhost:5000 -servername localhost

# Teste von anderem System
openssl s_client -connect m040tbaraspi001.de040.corpintra.net:443
```

### Zertifikat-Details anzeigen:
```bash
# Vollständige Zertifikat-Informationen
openssl x509 -in /opt/myp/ssl/cert.pem -noout -text

# Nur Gültigkeit
openssl x509 -in /opt/myp/ssl/cert.pem -noout -dates

# Subject Alternative Names
openssl x509 -in /opt/myp/ssl/cert.pem -noout -text | grep -A 10 "Subject Alternative Name"
```

### Netzwerk-Debugging:
```bash
# Hostname prüfen
hostname
hostname -I

# DNS-Auflösung testen
nslookup m040tbaraspi001.de040.corpintra.net
ping m040tbaraspi001.de040.corpintra.net

# Port-Status
sudo netstat -tulpn | grep :443
sudo netstat -tulpn | grep :5000
```

### Service-Logs prüfen:
```bash
# MYP App Logs
sudo journalctl -u myp-app.service -f

# MYP Kiosk Logs
sudo journalctl -u myp-kiosk.service -f

# SSL-spezifische Fehler
sudo journalctl | grep -i ssl
sudo journalctl | grep -i certificate
```

## 📋 Raspberry Pi System-Info

### Hardware & OS:
```bash
# Raspberry Pi Modell
cat /proc/cpuinfo | grep "Model"

# OS Version
cat /etc/os-release

# Verfügbarer Speicher
df -h /opt/myp

# OpenSSL Version
openssl version
```

### Netzwerk-Konfiguration:
```bash
# IP-Konfiguration
ip addr show

# Routing-Tabelle
ip route show

# DNS-Konfiguration
cat /etc/resolv.conf
```

## 🔄 Integration mit Setup-Skript

Das Setup-Skript wurde aktualisiert um automatisch:

1. **Send2Trash-Problem** zu beheben (bereinigte requirements.txt)
2. **SSL-Zertifikate** browser-kompatibel zu regenerieren
3. **Raspberry Pi spezifische** Konfiguration anzuwenden

### Setup-Skript ausführen:
```bash
cd /opt/myp
sudo ./setup.sh

# Option [1]: Abhängigkeiten installieren
# Option [2]: Produktionsbetrieb einrichten
```

## 🎯 Erfolgs-Validierung

Nach dem SSL-Fix sollten folgende Tests erfolgreich sein:

### ✅ Raspberry Pi (lokal):
```bash
curl -k https://localhost:5000/health
```

### ✅ Windows-Client (remote):
```cmd
curl -k https://m040tbaraspi001.de040.corpintra.net/health
```

### ✅ Browser-Test:
- Keine `ERR_SSL_KEY_USAGE_INCOMPATIBLE` Fehler
- SSL-Warnung kann übersprungen werden
- MYP-Interface lädt korrekt

## 🚨 Fallback-Optionen

### Option 1: HTTP-Modus aktivieren
```bash
# In /opt/myp/config.py:
USE_HTTPS = False
PORT = 5000

# Zugriff über:
http://m040tbaraspi001.de040.corpintra.net:5000
```

### Option 2: Self-Signed Certificate Installation
```bash
# Zertifikat zu System CA-Store hinzufügen
sudo cp /opt/myp/ssl/cert.pem /usr/local/share/ca-certificates/myp.crt
sudo update-ca-certificates
```

---

**🍓 Der ERR_SSL_KEY_USAGE_INCOMPATIBLE Fehler sollte auf dem Raspberry Pi nach diesen Schritten vollständig behoben sein!** 