Domainverwaltung Marke Eigenbau – EPP-Client in PHP 8.4 ohne Legacy-Code
Möchte man eine Website erstellen oder per E-Mail kommunizieren, tut man dies am besten mit einer eigenen Domain. Um eine eigene Domain zu «bekommen», muss man sie bei einer Registry (Registrierungsstelle) registrieren lassen.
In diesem Artikel beschreibe ich, warum und wie ich in einem Tag meine eigene EPP-Schnittstelle in PHP 8.4 zur Verwaltung von Domains bei den Registries gebaut habe.
Inhaltsverzeichnis
Verschiedene Arten von Domains
Es gibt verschiedene Arten von Domains, die hauptsächlich durch ihre Top-Level-Domain (TLD), den Teil nach dem letzten Punkt im Domainnamen, unterschieden werden.
Generische Top-Level-Domains (gTLDs)
Generische Top-Level-Domains (gTLDs) sind die bekanntesten und häufigsten Domainendungen. Ursprünglich hatten einige von ihnen einen bestimmten Zweck, was heute aber nicht mehr so streng eingehalten wird.
Beispiele:
- .swiss - wird von der schweizerischen Eidgenossenschaft (vertreten durch das Bundesamt für Kommunikation, BAKOM) betrieben und ist an strenge Kriterien gebunden, die einen Bezug zur Schweiz erfordern.
- .zuerich - eine geografische gTLD, betrieben durch den Kanton Zürich als Registry und beschränkt auf Organisationen und Unternehmen, die im Kanton Zürich tätig sind oder einen Bezug dazu haben.
- .com - ursprünglich für kommerzielle Unternehmen, heute weitgehend allgemein genutzt.
- .net - ursprünglich für Netzwerk-Infrastruktur, heute allgemein genutzt.
- .org - ursprünglich für Organisationen, oft Non-Profit.
- .info - für Informationsseiten.
- .biz - für Unternehmen.
Es gibt auch viele neuere gTLDs wie .app, .shop, .name, usw.
Länder-spezifische Top-Level-Domains (ccTLDs)
Länder-spezifische Top-Level-Domains (ccTLDs) bestehen aus zwei Buchstaben und sind spezifischen Ländern oder Territorien zugeordnet. Es gibt für fast jedes Land eine eigene ccTLD.
Beispiele:
- .ch - Schweiz
- .li - Liechtenstein
- .de - Deutschland
- .at - Österreich
- .it - Italien
- .fr - Frankreich
- .es - Spanien
- .ag - Antigua und Barbuda, häufig auch für Aktiengesellschaften verwendet
Gesponserte Top-Level-Domains (sTLDs)
Gesponserte Top-Level-Domains (sTLDs) werden oft von bestimmten Organisationen oder Gemeinschaften gesponsert und haben meistens spezifischere Nutzungsrichtlinien.
Beispiele:
- .edu - für Bildungseinrichtungen, hauptsächlich in den USA.
- .gov - für Regierungsbehörden, hauptsächlich in den USA.
Obwohl sowohl .swiss als auch .zuerich eine Art «Sponsor» haben (die Schweizerische Eidgenossenschaft bzw. den Kanton Zürich) und die Registrierung beschränkt ist, werden sie nicht als klassische sTLDs betrachtet. Sie fallen eher in die Kategorie der gTLDs mit spezifischen Vergabebedingungen oder im Fall von .zuerich als geografische gTLD.
Unterschied zwischen Registry, Registrar und Registrant
Bei der Verwaltung von Domains gibt es die drei Haupt-Akteure Registry (Registrierungsstelle), Registrar (Vermittler) und Registrant (Domain-Inhaber).
Die Aufgaben der Registrierungsstellen (Registry)
Registrierungsstellen (Registries) dienen als zentrale Verwaltungsstelle für eine oder mehrere Top-Level-Domains (TLDs). Sie sind entscheidend für das Funktionieren des Domain Name Systems (DNS). Beispielsweise die SWITCH ist verantwortlich für die .ch- und .li-Domains und die DENIC verwaltet die .de-Domains.
Die Aufgaben der Registry sind vielfältig:
- Führen des zentralen Domain-Verzeichnisses
- Technische Verwaltung der TLD
- Festlegung von Richtlinien und Vergabebedingungen
- Akkreditierung von Registraren
- Gewährleistung der Stabilität und Sicherheit
- Führung von Statistiken und Berichten
Grundsätzlich (in speziellen Fällen gibt es Ausnahmen) können Domainnamen nicht direkt bei der Registry registriert werden. Der übliche Weg führt über sogenannte Registrare, die als Vermittler fungieren.
Domainverwaltung durch Domain-Registrare
Registrare haben Verträge mit den verschiedenen Registries. Sie ermöglichen Endnutzern einfach und bequem Domainnamen zu registrieren und zu verwalten, ohne direkt mit der oft komplexen technischen Infrastruktur der Registries interagieren zu müssen.
Die Hauptaufgaben von Registraren sind:
- Domain-Suche und Verfügbarkeitsprüfung
- Domain-Registrierung
- Verwaltung der Domain-Informationen
- Domain-Verlängerung
- Domain-Transfer
- Kundensupport
- Abrechnung und Rechnungsstellung
- Einhaltung von Richtlinien und Vorschriften
- Angebot zusätzlicher Dienstleistungen
Um als Domain-Registrar akkreditiert zu werden, insbesondere von der ICANN für generische Top-Level-Domains (gTLDs) wie .com, .net und .org, müssen verschiedene Voraussetzungen erfüllt sein:
- Rechtliche und Unternehmensbezogene Anforderungen
- Rechtlich gültige und im jeweiligen Land ordnungsgemäss registrierte Einheit
- Ein detaillierter Geschäftsplan ist in der Regel erforderlich
- Eine angemessene Haftpflichtversicherung muss nachgewiesen werden können
- Finanzielle Stabilität
- Die finanzielle Stabilität und Fähigkeit, die mit dem Betrieb eines Registrars verbundenen Kosten zu tragen, müssen nachgewiesen werden
- ICANN oder spezifische Registries können eine Sicherheitsleistung oder eine Vorauszahlung verlangen
- Technische Anforderungen
- Funktionierende EPP-Schnittstelle
- Zuverlässige Nameserver-Infrastruktur
- Sichere Datenbanken
- Redundanz und Ausfallsicherheit
- Technisches Personal
- Vertragliche und richtlinienbezogene Anforderungen
- Registrar Accreditation Agreement (RAA) mit ICANN
- Einhaltung von ICANN-Richtlinien
- Registry-spezifische Verträge
- Datenschutzrichtlinien
- Antragsprozess und Gebühren
- Ein formeller Antrag auf Akkreditierung muss eingereicht werden.
- Die Bearbeitung des Antrags wird in der Regel eine Gebühr erhoben.
- Nach erfolgreicher Akkreditierung können jährliche Gebühren anfallen.
Inhaber der Domain (Registrant)
Ein Registrant ist die natürliche oder juristische Person (Organisation, Unternehmen, etc.), die einen Domainnamen registriert hat und somit der Inhaber bzw. Rechteinhaber dieser Domain ist.
Rechte, Pflichten und Verantwortung des Domaininhabers:
- Das Recht, die Domain für seine Website, E-Mail-Adressen, etc. zu nutzen.
- Die Pflicht, die Registrierungsgebühr zu bezahlen, um die Domain aktiv zu halten.
- Die Verantwortung, die bei der Registrierung angegebenen Kontaktinformationen aktuell zu halten.
Der Registrant (Domainhalter) registriert die Domain über den Domain-Registrar (Vermittler) bei der Registry (Registrierungsstelle).
EPP (Extensible Provisioning Protocol)
Die EPP-Schnittstelle als standardisiertes Kommunikationsprotokoll
Die EPP-Schnittstelle ist ein standardisiertes Kommunikationsprotokoll bzw. eine spezielle Sprache, um mit den Systemen der Domain-Verwaltungsstellen (Registries) zu kommunizieren. Das Protokoll basiert auf den technischen Spezifikationen (RFCs – Request for Comments) der Internet Engineering Task Force (IETF).
Die wichtigsten RFCs für das Extensible Provisioning Protocol (EPP) sind:
- RFC 5730: Extensible Provisioning Protocol (EPP)
Dies ist das Basisprotokoll und beschreibt die grundlegende Struktur und Funktionsweise von EPP. - RFC 5731: Extensible Provisioning Protocol (EPP) Domain Name Mapping
Beschreibt, wie Domain-Namen über EPP verwaltet werden. - RFC 5732: Extensible Provisioning Protocol (EPP) Host Mapping
Definiert das Mapping für die Verwaltung von Host-Objekten (Nameservern). - RFC 5733: Extensible Provisioning Protocol (EPP) Contact Mapping
Beschreibt, wie Kontaktinformationen (für Domaininhaber etc.) über EPP verwaltet werden. - RFC 5734: Extensible Provisioning Protocol (EPP) Transport over TCP
Legt fest, wie EPP über das TCP-Protokoll transportiert wird.
Jede Registry (z.B. für .com, .de, .swiss, ...) kann eigene spezifische Erweiterungen und Dokumentationen für ihre EPP-Schnittstelle haben.
Der EPP-Client zur Kommunikation mit der Registry
Der EPP-Client ist eine Softwareanwendung, welche die EPP-Sprache beherrscht, um so mit dem System der Registry zu kommunizieren und die Domains zu verwalten.
Registrare als Vermittler zwischen dem Registrant (Domain-Halter) und der Registry (Registrierungsstelle) verwenden in der Regel einen solchen EPP-Client.
Die Actra AG als Registrar
Da wir Websites für unsere Kunden entwickeln und betreuen, haben wir immer auch mit deren Domains zu tun. Folgende Vorteile sehen wir darin, die Domains unserer Kunden selbst zu verwalten:
- Direkte Kontrolle und Flexibilität
- Langfristige Kosteneinsparungen
- Unabhängigkeit von Drittanbietern
- Tiefes technisches Verständnis und Expertise
Die Hürden für die Akkreditierung als Registrar sind erheblich und umfassen finanzielle Stabilität, technische Kompetenz und die Einhaltung strenger Richtlinien.
Kurz: Eine spannende Herausforderung!
Unser Angebot als Registrar
Unseren bestehenden Kunden möchten wir ein attraktives Zusatzangebot bieten, ihre Domains über uns zu verwalten und sehen dies auch als ein Mittel der Kundenbindung.
Wir gehen nur mit jenen Registries eine direkte Vertragsbeziehung ein, wo dies vom Volumen her auch sinnvoll ist. Für andere TLDs weichen wir auf das Reselling-Angebot von anderen Anbietern aus.
Wir distanzieren uns dabei ausdrücklich vom reinen Domain-Geschäft.
EPP-Client: Eigenentwicklung oder bestehende EPP-Client-Bibliothek?
Das Senden von EPP-Befehlen mit PHP an einen EPP-Server erfordert in der Regel die Implementierung einer EPP-Client-Bibliothek oder die direkte Handhabung der Socket-Verbindung und des XML-basierten EPP-Protokolls.
Bestehende EPP-Client-Bibliotheken
Es gibt bereits viele fertige EPP-Client-Bibliotheken, die in Reife und Funktionsumfang stark variieren. Leider gibt es jedoch keine standardmässige, weit verbreitete PHP-Bibliothek, die alle Aspekte des EPP-Protokolls abdeckt.
Bereits existierende EPP-Client-Bibliotheken sind meistens sehr umfangreich, basieren auf sehr veraltetem Code (da sich das Protokoll in den letzten 20 Jahren nicht wesentlich verändert hat) und haben wiederum mehrere Abhängigkeiten zu anderen Bibliotheken mit deren eigenen Vor- und Nachteilen.
Unsere Beweggründe für die Eigenentwicklung
Dieser Ansatz ist komplexer und erfordert ein tiefes Verständnis des EPP-Protokolls (RFC 5730 und zugehörige RFCs).
Aus den nachfolgenden Beweggründen haben wir uns dazu entschieden, unseren eigenen EPP-Client zu entwickeln:
Aktueller schlanker Code
Wir verfolgen immer das Ziel, eine Aufgabe mit möglichst schlankem und aktuellem Code zu lösen. Durch die Neuentwicklung nach heutigen Standards können wir in der aktuellen PHP-Version 8.4 genau die Funktionalitäten programmieren, welche wir für unseren konkreten Anwendungsfall auch benötigen.
Keine externen Abhängigkeiten
Wir haben volle Kontrolle über den kompletten EPP-Client, ohne Abhängigkeit zu externen Bibliotheken oder Entwicklern.
Enormer Lerneffekt (unbezahlbar)
Ein grosser Vorteil der Eigenentwicklung ist der damit verbundene Lerneffekt. Während der Programmierung lernt man im Detail, wie die ganze Schnittstelle im Hintergrund funktioniert und kann so bei allfälligen Problemen sehr viel schneller reagieren und Fehler beheben bzw. Neuerungen implementieren.
Unser EPP-Client
Unser EPP-Client bietet die grundlegendsten Funktionalitäten zur Verwaltung von Domains, Kontakten (contacts) und Nameservern (hosts) über die EPP-Schnittstelle:
- Socket öffnen
Aufbau einer Socket-Verbindung zur Registrierungsstelle (Registry) mittels PHP-Socket-Funktionen (socket_create, socket_connect, stream_socket_client). EPP verwendet typischerweise TCP auf Port 700. TLS/SSL-Verschlüsselung mit dem Präfix tls:// oder ssl://. - EPP-XML-Befehl erstellen
Erstellung des gewünschten EPP-Befehls als wohlgeformtes XML-Dokument entsprechend der EPP-Protokollspezifikation. Dies beinhaltet die korrekten XML-Namespaces und die Struktur der EPP-Elemente (z.B. <epp>, <command>, <login>, <clID>, <pw>, ...). - EPP-Frame senden
EPP-Nachrichten werden in einem Frame übertragen, der die Länge der XML-Nachricht als vorangestellten Binärwert (4 Bytes, Netzwerk-Byte-Reihenfolge) enthält, gefolgt von der XML-Nachricht selbst. - EPP-Antwort empfangen
Die Antwort wird vom Socket gelesen. Sie beginnt ebenfalls mit einem 4-Byte-Längenfeld. - EPP-Antwort parsen
Das empfangene XML-Dokument wird verarbeitet, um den Status des Befehls und alle zurückgegebenen Daten zu extrahieren. - Verbindung schliessen
Der Socket wird zum Schluss wieder geschlossen.
Fazit
Die Domain gilt als Basis für Websites und die Kommunikation per E-Mail. Es gibt verschiedene Domain-Arten (gTLDs, ccTLDs, sTLDs, …) und in deren Verwaltung sind mehrere Akteure (Registry, Registrar und Registrant) involviert.
Die Sprache zur Kommunikation mit der Registry ist in RFCs (Request for comment) für das EPP (Extensible Provisioning Protocol) geregelt.
Die selbstständige Verwaltung von Domains als Registrar mit einem selbst entwickelten EPP-Client erfordert sehr viel technisches Know-How und bietet aber auch mehrere Vorteile.
Fragen? Kommentare? Zusammenarbeit?
Bei weiteren Fragen oder Kommentaren zu diesem Thema oder falls du Unterstützung in dem Bereich benötigst, freuen wir uns über deine Kontaktaufnahme.
Bei Interesse geben wir gerne auch einen direkten Einblick in den PHP-Code unseres EPP-Clients.