This commit is contained in:
Kevin Feiler
2025-10-16 03:39:52 +02:00
parent dccf4b1b4e
commit f5cf6ee08f
2 changed files with 418 additions and 7 deletions

384
SSL_TROUBLESHOOTING.md Normal file
View File

@@ -0,0 +1,384 @@
# SSL-Fehlerbehebung - KeyHelp Manager Modul
## Übersicht
Das KeyHelp Manager Modul verwendet SSL/TLS-Verbindungen zur sicheren Kommunikation mit der KeyHelp API. Bei der Verwendung von IP-Adressen oder selbstsignierten Zertifikaten können SSL-Verifizierungsprobleme auftreten.
## Automatische SSL-Verifizierung
Das Modul erkennt automatisch, ob eine IP-Adresse verwendet wird und deaktiviert in diesem Fall die SSL-Zertifikatsverifizierung.
### Wie es funktioniert
```
Hostname wird geprüft
Ist es eine IP-Adresse? (z.B. 5.83.148.129)
JA → SSL-Verifizierung wird automatisch deaktiviert
NEIN → SSL-Verifizierung bleibt aktiv (Standard)
```
## Häufige SSL-Fehler
### 1. cURL error 60: SSL certificate problem
**Vollständige Fehlermeldung:**
```
cURL error 60: SSL: no alternative certificate subject name matches target host name '5.83.148.129'
```
**Ursache:**
Das SSL-Zertifikat wurde für einen Domain-Namen ausgestellt (z.B. `server.example.com`), aber Sie verwenden eine IP-Adresse zur Verbindung.
**Lösung:**
-**Automatisch gelöst:** Bei IP-Adressen deaktiviert das Modul die SSL-Verifizierung automatisch
-**Keine manuelle Konfiguration nötig**
**Logging:**
Das Modul schreibt einen Hinweis in die Activity Logs:
```
KeyHelp Manager: SSL verification disabled for 5.83.148.129 (IP address detected)
```
---
### 2. Self-signed Certificate Error
**Fehlermeldung:**
```
cURL error 60: SSL certificate problem: self signed certificate
```
**Ursache:**
Der KeyHelp-Server verwendet ein selbstsigniertes SSL-Zertifikat statt eines von einer vertrauenswürdigen Zertifizierungsstelle (CA) signierten Zertifikats.
**Lösung:**
#### Option A: SSL-Verifizierung manuell deaktivieren (nicht empfohlen für Produktion)
1. Öffnen Sie die Server-Konfiguration in WHMCS:
- Navigieren Sie zu **Setup → Products/Services → Servers**
- Bearbeiten Sie Ihren KeyHelp-Server
2. Tragen Sie im Feld **HTTP Prefix** den Wert ein:
```
no-verify
```
3. Speichern Sie die Konfiguration
**Logging:**
```
KeyHelp Manager: SSL verification disabled for server.example.com (manual override)
```
#### Option B: Gültiges SSL-Zertifikat installieren (empfohlen)
1. Installieren Sie Let's Encrypt auf Ihrem KeyHelp-Server:
```bash
# In KeyHelp unter System → SSL-Zertifikate
```
2. Generieren Sie ein kostenloses Let's Encrypt Zertifikat für Ihre Domain
3. Stellen Sie sicher, dass KeyHelp das Zertifikat für die API verwendet
4. Verwenden Sie den Domain-Namen statt der IP-Adresse in WHMCS
---
### 3. Certificate has expired
**Fehlermeldung:**
```
cURL error 60: SSL certificate problem: certificate has expired
```
**Ursache:**
Das SSL-Zertifikat ist abgelaufen.
**Lösung:**
1. Erneuern Sie das SSL-Zertifikat auf dem KeyHelp-Server
2. Bei Let's Encrypt: Überprüfen Sie die automatische Erneuerung
3. Prüfen Sie das Ablaufdatum:
```bash
openssl s_client -connect ihr-server.de:443 -servername ihr-server.de < /dev/null 2>/dev/null | openssl x509 -noout -dates
```
---
### 4. Unable to get local issuer certificate
**Fehlermeldung:**
```
cURL error 60: SSL certificate problem: unable to get local issuer certificate
```
**Ursache:**
Die Zertifikatskette ist unvollständig oder das Root-Zertifikat fehlt.
**Lösung:**
1. Stellen Sie sicher, dass die vollständige Zertifikatskette auf dem KeyHelp-Server installiert ist
2. Prüfen Sie die Zertifikatskette:
```bash
openssl s_client -connect ihr-server.de:443 -showcerts
```
3. Temporäre Lösung: Deaktivieren Sie die SSL-Verifizierung mit "no-verify"
---
## Konfiguration
### Server-Einstellungen in WHMCS
```
Setup → Products/Services → Servers → [Ihr KeyHelp Server]
┌─────────────────────────────────────────────┐
│ Name: KeyHelp Server 1 │
│ Hostname: 5.83.148.129 ← IP-Adresse │
│ Type: KeyHelp Manager │
│ Username: [leer] │
│ Password: [Ihr API-Key] │
│ Access Hash: [leer] │
│ Secure: ☑ On │
│ HTTP Prefix: [leer] ← Auto bei IP │
└─────────────────────────────────────────────┘
```
**Bei IP-Adresse:** Keine weitere Konfiguration nötig!
---
### Manuelle Deaktivierung der SSL-Verifizierung
```
Setup → Products/Services → Servers → [Ihr KeyHelp Server]
┌─────────────────────────────────────────────┐
│ Name: KeyHelp Server 1 │
│ Hostname: server.example.com │
│ Type: KeyHelp Manager │
│ Username: [leer] │
│ Password: [Ihr API-Key] │
│ Access Hash: [leer] │
│ Secure: ☑ On │
│ HTTP Prefix: no-verify ← Manuell │
└─────────────────────────────────────────────┘
```
---
## Best Practices
### ✅ Empfohlen für Entwicklung/Test
- IP-Adresse verwenden (SSL-Verifizierung wird automatisch deaktiviert)
- Oder "no-verify" bei selbstsignierten Zertifikaten
### ✅ Empfohlen für Produktion
1. **Verwenden Sie einen Domain-Namen** statt einer IP-Adresse
```
Statt: 5.83.148.129
Nutzen: keyhelp.example.com
```
2. **Installieren Sie ein gültiges SSL-Zertifikat**
- Let's Encrypt (kostenlos)
- Commercial CA (Comodo, DigiCert, etc.)
3. **DNS korrekt konfigurieren**
```
keyhelp.example.com → A Record → 5.83.148.129
```
4. **SSL-Verifizierung aktiviert lassen**
- HTTP Prefix: [leer lassen]
- Secure: On
### ⚠️ Sicherheitshinweise
| Szenario | SSL-Verifizierung | Sicherheit | Empfohlen für |
|----------|-------------------|------------|---------------|
| IP-Adresse mit gültigem Cert | Auto aus | Mittel | Test/Dev |
| Domain mit gültigem Cert | An | Hoch | Produktion |
| Selbstsigniertes Cert | Manuell aus | Niedrig | Nur Test |
| Abgelaufenes Cert | - | Unsicher | ❌ Nie |
---
## Logs überprüfen
### WHMCS Activity Log
```
System Settings → Activity Log
Filter nach: "KeyHelp Manager: SSL verification disabled"
```
**Beispiel-Einträge:**
```
KeyHelp Manager: SSL verification disabled for 5.83.148.129 (IP address detected)
KeyHelp Manager: SSL verification disabled for server.example.com (manual override)
```
### WHMCS Module Log
```
Utilities → Logs → Module Log
Filter: keyhelpmanager
```
Hier sehen Sie alle API-Requests und Responses inkl. SSL-Fehlern.
---
## Debugging
### Test 1: Manuelle API-Verbindung
**Mit SSL-Verifizierung:**
```bash
curl https://5.83.148.129/api/v2/server/version \
-H "X-API-Key: IHR_API_KEY" \
-H "Accept: application/json"
```
**Ohne SSL-Verifizierung:**
```bash
curl -k https://5.83.148.129/api/v2/server/version \
-H "X-API-Key: IHR_API_KEY" \
-H "Accept: application/json"
```
Der `-k` Parameter entspricht `verify => false` in Guzzle.
---
### Test 2: SSL-Zertifikat überprüfen
**Zertifikat-Informationen anzeigen:**
```bash
openssl s_client -connect 5.83.148.129:443 -servername keyhelp.example.com < /dev/null 2>/dev/null | openssl x509 -noout -text
```
**Prüfen Sie:**
- Subject: CN (Common Name)
- Subject Alternative Name (SAN)
- Validity: Not Before / Not After
- Issuer
---
### Test 3: PHP Guzzle Test-Script
Erstellen Sie eine Test-Datei `test_keyhelp_ssl.php`:
```php
<?php
require_once __DIR__ . '/vendor/autoload.php';
use GuzzleHttp\Client;
$hostname = '5.83.148.129';
$apiKey = 'IHR_API_KEY';
// Test mit SSL-Verifizierung
$client = new Client([
'verify' => true,
'timeout' => 10,
]);
try {
$response = $client->get("https://{$hostname}/api/v2/server/version", [
'headers' => [
'X-API-Key' => $apiKey,
'Accept' => 'application/json',
],
]);
echo "✅ Mit SSL-Verifizierung: Erfolg!\n";
echo $response->getBody();
} catch (Exception $e) {
echo "❌ Mit SSL-Verifizierung: Fehler!\n";
echo $e->getMessage() . "\n\n";
}
// Test ohne SSL-Verifizierung
$client = new Client([
'verify' => false,
'timeout' => 10,
]);
try {
$response = $client->get("https://{$hostname}/api/v2/server/version", [
'headers' => [
'X-API-Key' => $apiKey,
'Accept' => 'application/json',
],
]);
echo "✅ Ohne SSL-Verifizierung: Erfolg!\n";
echo $response->getBody();
} catch (Exception $e) {
echo "❌ Ohne SSL-Verifizierung: Fehler!\n";
echo $e->getMessage();
}
```
Führen Sie aus:
```bash
php test_keyhelp_ssl.php
```
---
## Zusammenfassung
### IP-Adresse verwenden (Automatisch)
```
Hostname: 5.83.148.129
HTTP Prefix: [leer]
→ SSL-Verifizierung: Automatisch deaktiviert ✅
```
### Domain mit selbstsigniertem Zertifikat (Manuell)
```
Hostname: server.example.com
HTTP Prefix: no-verify
→ SSL-Verifizierung: Manuell deaktiviert ✅
```
### Domain mit gültigem Zertifikat (Empfohlen)
```
Hostname: keyhelp.example.com
HTTP Prefix: [leer]
→ SSL-Verifizierung: Aktiv ✅✅✅
```
---
## Support
Bei weiteren SSL-Problemen:
1. **WHMCS Module Log prüfen:** Utilities → Logs → Module Log
2. **Activity Log prüfen:** System Settings → Activity Log
3. **KeyHelp Logs prüfen:** `/var/log/keyhelp/`
4. **PHP Error Log prüfen:** `/var/log/php/error.log`
**Kontakt:**
- E-Mail: info@avvgo.de
- Website: https://avvgo.de
---
**Entwickelt von:** Kevin Feiler / AVVGO
**Version:** 2.0.0
**Letzte Aktualisierung:** 2024