From dccf4b1b4eeb3dc44e24b41e3efa0d5e40648caf Mon Sep 17 00:00:00 2001 From: Kevin Feiler Date: Thu, 16 Oct 2025 03:34:17 +0200 Subject: [PATCH] ssl --- CHANGELOG.md | 12 ++++++++++ QUICKSTART.md | 24 ++++++++++++++++--- README.md | 18 +++++++++++--- .../servers/keyhelpmanager/keyhelpmanager.php | 18 ++++++++++++-- 4 files changed, 64 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ef346aa..abef9ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,18 @@ und dieses Projekt folgt [Semantic Versioning](https://semver.org/lang/de/). ## [Unreleased] +### Hinzugefügt +- **Automatische SSL-Verifizierung bei IP-Adressen:** + - SSL-Verifizierung wird automatisch deaktiviert wenn eine IP-Adresse als Hostname verwendet wird + - Behebt "cURL error 60: SSL certificate problem" bei IP-Adressen + - Manuelle Deaktivierung möglich über HTTP Prefix "no-verify" + - Logging-Hinweis wenn SSL-Verifizierung deaktiviert wird + +### Dokumentation +- Neue Datei `SSL_TROUBLESHOOTING.md` mit umfassender SSL-Fehlerbehandlung +- README.md erweitert um SSL-Konfigurationshinweise +- QUICKSTART.md aktualisiert mit SSL-Best-Practices + ### Geplant - Multi-Language Support (Deutsch/Englisch) - Automatische Backup-Verwaltung diff --git a/QUICKSTART.md b/QUICKSTART.md index 6e05ffa..33b0439 100644 --- a/QUICKSTART.md +++ b/QUICKSTART.md @@ -27,13 +27,19 @@ Oder manuell: ``` Name: KeyHelp Server 1 -Hostname: keyhelp.example.com +Hostname: keyhelp.example.com (oder IP: 5.83.148.129) Type: KeyHelp Manager Password: [DEIN-API-KEY-HIER] Secure (SSL): ✓ (aktivieren) Active: ✓ (aktivieren) +HTTP Prefix: [leer lassen - bei IP automatisch] ``` +> **💡 SSL-Hinweis:** +> - Bei **IP-Adresse** (z.B. `5.83.148.129`): SSL-Verifizierung wird automatisch deaktiviert +> - Bei **Domain** (z.B. `keyhelp.example.com`): Stelle sicher, dass ein gültiges SSL-Zertifikat installiert ist +> - Bei **selbstsigniertem Zertifikat**: Trage `no-verify` im Feld "HTTP Prefix" ein + 4. Klicke: **Test Connection** → "Connection Successful!" ✅ 5. Speichern: **Save Changes** @@ -229,6 +235,11 @@ Nach der Erstellung sehen Kunden: ### "Connection failed" → Hostname, API-Key und SSL-Einstellungen prüfen +### "cURL error 60: SSL certificate problem" +→ Bei IP-Adresse: Wird automatisch gelöst! +→ Bei selbstsigniertem Zertifikat: "no-verify" im HTTP Prefix eintragen +→ Details: [SSL_TROUBLESHOOTING.md](SSL_TROUBLESHOOTING.md) + ### API-Key funktioniert nicht → In KeyHelp prüfen: Key hat Admin-Rechte? @@ -257,6 +268,9 @@ Nach der Erstellung sehen Kunden: ### Funktionieren alte Accounts nach dem Update? **Ja!** Bestehende Accounts funktionieren weiterhin ohne Änderungen. +### Kann ich eine IP-Adresse statt Domain verwenden? +**Ja!** Das Modul erkennt IP-Adressen automatisch und deaktiviert die SSL-Verifizierung. + ### Kann ich Templates nachträglich ändern? **Ja!** Einfach in der Produktkonfiguration ändern und speichern. @@ -281,10 +295,14 @@ Templates nur in KeyHelp löschen, wenn keine aktiven Accounts damit verbunden s 3. **SSL immer aktivieren** - Sicher und empfohlen! -4. **Templates regelmäßig synchronisieren** +4. **IP vs. Domain für Hostname** + - 🧪 Entwicklung/Test: IP-Adresse ist OK (SSL-Check automatisch aus) + - 🚀 Produktion: Domain mit gültigem SSL-Zertifikat (Let's Encrypt) + +5. **Templates regelmäßig synchronisieren** - Nach Änderungen in KeyHelp: Sync klicken -5. **Test-Account behalten** +6. **Test-Account behalten** - Zum schnellen Testen von Änderungen --- diff --git a/README.md b/README.md index 576f5bd..b921b87 100644 --- a/README.md +++ b/README.md @@ -141,9 +141,12 @@ Bei der Einrichtung des Servers in WHMCS können Sie folgende Optionen konfiguri | **Hostname (IP or FQDN)** | Text | Hostname oder IP-Adresse des KeyHelp-Servers | - | | **API Key** | Password | Ihr KeyHelp API-Schlüssel | - | | **Use SSL** | Yes/No | SSL für API-Verbindungen verwenden | On | -| **Verify SSL Certificate** | Yes/No | SSL-Zertifikat überprüfen | On | +| **HTTP Prefix** | Text | Optional: "no-verify" für manuelles Deaktivieren der SSL-Verifizierung | - | -> **Hinweis:** Bei selbstsignierten SSL-Zertifikaten sollten Sie "Verify SSL Certificate" deaktivieren. +> **Hinweis zur SSL-Verifizierung:** +> - Bei Verwendung einer **IP-Adresse** wird die SSL-Verifizierung automatisch deaktiviert +> - Bei selbstsignierten SSL-Zertifikaten mit Domain-Namen: Tragen Sie "no-verify" im Feld "HTTP Prefix" ein +> - Für Produktivumgebungen wird immer ein gültiges SSL-Zertifikat empfohlen ### Produkt-Konfiguration @@ -312,7 +315,16 @@ Admin wird direkt in KeyHelp eingeloggt **Lösung:** 1. Prüfen Sie die Firewall-Einstellungen 2. Testen Sie die Verbindung manuell: `curl -k https://ihr-server.de/api/v2/server/version -H "X-API-Key: IHR_KEY"` -3. Bei selbstsigniertem Zertifikat: Deaktivieren Sie "Verify SSL Certificate" +3. Bei selbstsigniertem Zertifikat: Tragen Sie "no-verify" im Feld "HTTP Prefix" ein + +### "cURL error 60: SSL certificate problem" + +**Ursache:** SSL-Zertifikat stimmt nicht mit dem Hostnamen überein (häufig bei IP-Adressen oder selbstsignierten Zertifikaten) + +**Lösung:** +1. **Bei IP-Adresse:** Das Modul deaktiviert die SSL-Verifizierung automatisch +2. **Bei selbstsigniertem Zertifikat mit Domain:** Tragen Sie "no-verify" im Feld "HTTP Prefix" der Server-Konfiguration ein +3. **Empfohlen für Produktion:** Verwenden Sie ein gültiges SSL-Zertifikat von Let's Encrypt oder einem anderen CA ### "Domain konnte nicht hinzugefügt werden" diff --git a/modules/servers/keyhelpmanager/keyhelpmanager.php b/modules/servers/keyhelpmanager/keyhelpmanager.php index 3644434..dbf551a 100644 --- a/modules/servers/keyhelpmanager/keyhelpmanager.php +++ b/modules/servers/keyhelpmanager/keyhelpmanager.php @@ -58,8 +58,11 @@ function _keyhelpmanager_APIRequest( $apiKey = $params["serveraccesshash"] ?? ""; $useSSL = $params["serversecure"] ?? "on"; - // Verify SSL is enabled by default for security - $verifySSL = "on"; + // Check if SSL verification should be disabled + // Automatically disable for IP addresses or if serverhttpprefix is set to "no-verify" + $httpPrefix = $params["serverhttpprefix"] ?? ""; + $isIpAddress = filter_var($hostname, FILTER_VALIDATE_IP) !== false; + $verifySSL = $httpPrefix === "no-verify" || $isIpAddress ? "off" : "on"; if (empty($hostname) || empty($apiKey)) { return [ @@ -72,6 +75,17 @@ function _keyhelpmanager_APIRequest( $protocol = $useSSL === "on" ? "https" : "http"; $url = sprintf("%s://%s/api/v2%s", $protocol, $hostname, $endpoint); + // Log warning if SSL verification is disabled + if ($verifySSL === "off") { + logActivity( + "KeyHelp Manager: SSL verification disabled for " . + $hostname . + ($isIpAddress + ? " (IP address detected)" + : " (manual override)"), + ); + } + $client = new \GuzzleHttp\Client([ "verify" => $verifySSL === "on", "timeout" => 30,