feature/letsEncryptProvider #10
Reference in New Issue
Block a user
No description provided.
Delete Branch "feature/letsEncryptProvider"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Zusammenfassung: ACME & Let's Encrypt Refaktorisierung
backend/providers/acme_provider.go (182 Zeilen)
ACMEProvider Interface: Interface für ACME-basierte CAs
ACMEProviderManager: Singleton-Manager für ACME-Provider
Funktionen:
GetACMEManager(): Singleton-Instanz
RegisterACMEProvider(): Provider registrieren
GetACMEProvider(): Provider abrufen
GetACMEProviderConfig(): Konfiguration laden
SetACMEProviderEnabled(): Provider aktivieren/deaktivieren
loadAllConfigs(): Lädt Configs aus ./config/providers/
saveConfig(): Speichert Configs als JSON
backend/providers/letsencrypt.go (107 Zeilen)
LetsEncryptProvider: Implementierung für Let's Encrypt
Unterstützt:
Staging: letsencrypt-staging
Production: letsencrypt-production
Funktionen:
GetDirectoryURL(): ACME Directory URLs
GetRenewalInfoURL(): RenewalInfo API URLs
TestConnection(): Verbindungstest zum ACME-Server
ValidateConfig(): Konfigurationsvalidierung
backend/acme_client_context.go (58 Zeilen)
ACMEClientContext: Kontext-Objekt für ACME-Operationen
Kapselt:
Provider-Instanz
Directory-Endpunkte (NewAccount, NewOrder, NewNonce)
Directory-URL
NewACMEClientContext(): Erstellt Context für einen Provider
Config-Dateien
backend/config/providers/letsencrypt-staging.json
{ "enabled": true, "settings": {} }
backend/config/providers/letsencrypt-production.json
{ "enabled": true, "settings": {} }
backend/main.go
Provider-Registrierung (Zeile ~5607-5609):
acmeManager := providers.GetACMEManager() acmeManager.RegisterACMEProvider(providers.NewLetsEncryptProvider("production")) acmeManager.RegisterACMEProvider(providers.NewLetsEncryptProvider("staging"))
requestCertificateHandler (Zeile ~2246-2247):
Verwendet NewACMEClientContext("letsencrypt-staging")
TODO: Aus FQDN-Konfiguration lesen
backend/acme_client.go
RequestCertificate(): Akzeptiert ACMEClientContext statt hardcodierter URLs
Funktionen verwenden Context-URLs:
getNonce()
createAccount()
createOrder()
extractTokenFromOrder()
extractChallengeURLFromOrder()
activateChallenge()
cleanupChallenge()
waitForChallengeValidation()
waitForOrderReady()
finalizeOrderAndGetCertificate()
backend/renewal_scheduler.go
processCertificateRenewal() (Zeile ~247-248):
Verwendet NewACMEClientContext("letsencrypt-staging")
TODO: Aus FQDN-Konfiguration lesen
Provider-Wechsel-Erkennung (Zeile ~257-261):
Prüft, ob Provider gewechselt wurde
Erstellt neuen Account, wenn Provider ungleich ist
backend/renewal_info.go
FetchRenewalInfo() (Zeile ~163):
Verwendet GetACMEManager() statt hardcodierter URLs
Liest RenewalInfoURL aus Provider-Konfiguration
Aktuell hardcodiert auf "letsencrypt-staging"
Vorher:
Hardcodierte Let's Encrypt Staging URLs
Keine Modularität für andere ACME-Provider
Direkte Verwendung der ACME-URLs im Code
Nachher:
Modulares System ähnlich dem Provider-System (AutoDNS, Hetzner)
Separate Manager für ACME-Provider (ACMEManager) und normale Provider (ProviderManager)
Provider-spezifische URLs werden dynamisch geladen
Einfache Erweiterung um weitere ACME-Provider möglich
Hardcodierte Stellen (TODO für zukünftige Verbesserung):
backend/main.go (Zeile ~2246): "letsencrypt-staging"
backend/renewal_scheduler.go (Zeile ~247): "letsencrypt-staging"
backend/renewal_info.go (Zeile ~163): "letsencrypt-staging"
Modularität: Einfache Integration neuer ACME-Provider
Konfigurierbarkeit: Provider über JSON-Dateien aktivieren/deaktivieren
Wartbarkeit: Provider-Logik isoliert
Erweiterbarkeit: Interface-basiert, einfach erweiterbar
Konsistenz: Gleiche Struktur wie andere Provider