RDAP - der Nachfolger von Whois
Die WHOIS-Datenbanken im Internet waren lange Zeit eine Datenbank mit den Kontaktpersonen zu bestimmten IP-Netzwerken und Domänen. Gerade in der Anfangszeit des Internet war es hilfreich zu wissen, wen man bei Problemen ansprechen kann. Damals hat niemand damit gerechnet, dass Privatpersonen einmal eine Domain besitzen wollten und eine DSGVO gab es auch nicht. Heute ist WHOIS ohne Schutz und Authentifizierung eigentlich unbrauchbar, weil viele Registrare die Inhaberdaten entfernt haben und nur bei einer berechtigen Rückfrage ausliefern. Aber mit RDAP gibt es einen Nachfolger, der diese Daten an legitimierte Fragesteller wieder ausliefert. Aber auch anonym liefern die Services erste Informationen.
data.iana.org
Es gibt immer einen Anfang und das ist hier die IANA. Das Protokoll ist einfach HTTP/HTTPS mit entsprechenden URLs, die dann JSON-Daten zurück liefern. Wir starten einfach mal hier
https://data.iana.org/rdap/
Allein in Browser bekommen wir schon fünf Links zum Anklicken.
Allerdings macht es nicht viel Spaß die dann vom Browser angezeigten JSON-Dateien manuell zu lesen. Daher wechseln wir mal besser direkt zur PowerShell.
- Bootstrap Service Registry for Domain
Name Space
https://www.iana.org/assignments/rdap-dns/rdap-dns.xhtml
RDAP Technical Implementation Guide
https://www.icann.org/en/system/files/files/rdap-technical-implementation-guide-31jul18-en.pdf
dns.json
Interessant finde ich erst einmal die dns.json-Datei, die mit 93k aber auch ziemlich groß ist. Ein einfacher Invoke-RestMethod liefert noch nicht so viel:
PS C:>invoke-RestMethod https://data.iana.org/rdap/dns.json description publication services ----------- ----------- -------- RDAP bootstrap file for Domain Name System registrations 10.09.2019 20:00:01 {System.Object[] System.Object[], System.…
Also sollte ich mit das Property "Serivces" mal genauer anschauen. Ich bekomme hier aber 825 Zeilen zurück. Hier daher nur eine Auswahl
PS C:> $dnsjson = (invoke-RestMethod https://data.iana.org/rdap/dns.json) PS C:> $dnsjson.services.Count 825 PS C:> $dnsjson.services |ft Length LongLength Rank SyncRoot IsReadOnly IsFixedSize IsSynchro nized ------ ---------- ---- -------- ---------- ----------- --------- 1 1 1 {telefonica} False True False 1 1 1 {http://rdap.nic.telefonica/} False True False 1 1 1 {tz} False True False 1 1 1 {http://whois.tznic.or.tz/rdap/} False True False 1 1 1 {moscow} False True False 1 1 1 {https://flexireg.net/moscow/rdap/} False True False 1 1 1 {xn--80adxhks} False True False 1 1 1 {https://flexireg.net/xn--80adxhks/rdap/} False True False ... 26 26 1 {audio, auto, blackfriday, car…} False True False 1 1 1 {https://whois.uniregistry.net/rdap/} False True False ... 1 1 1 {app} False True False 1 1 1 {https://www.registry.google/rdap/} False True False
Sie sollten die Datei natürlich nicht jedes Mal herunterladen. Bitte nutzen Sie einen Cache oder speichern Sie die Daten in einer Variable. Da sich diese Daten nicht oft ändern, reicht es diese z.B. alle 24h zu laden. Ich habe dann mal eine Suche nach "NET" gemacht.
PS C:\> $dnsjson.services | where {$_[0] -eq "net"} Length : 1 LongLength : 1 Rank : 1 SyncRoot : {net} IsReadOnly : False IsFixedSize : True IsSynchronized : False Count : 1 Length : 1 LongLength : 1 Rank : 1 SyncRoot : {https://rdap.verisign.com/net/v1/} IsReadOnly : False IsFixedSize : True IsSynchronized : False Count : 1
Anscheinend ist Verisign der Registrar für die ".net"-TLD. Leider geht es unter der URL nicht weiter, zu der ich verwiesen werde.
Für die Top-Level Domain "de" gibt es noch gar keinen Eintrag. Es könnte natürlich auch an einer fehlenden Authentifizierung liegen. Interessanterweise hat ein Versuch direkt eine Antwort geliefert.
PS C:\> Invoke-RestMethod https://rdap.denic.de/domain/msxfaq.de rdapConformance : {rdap_level_0, denic_version_0} notices : {@{title=Terms and Conditions of Use; description=System.Object[]}} ldhName : msxfaq.de status : {active} nameservers : {@{ldhName=ns1121.ui-dns.biz.; objectClassName=nameserver}, @{ldhName=ns1121.ui-dns.com.; objectClassName=nameserver}, @{ldhName=ns1121.ui-dns.de.; objectClassName=nameserver}, @{ldhName=ns1121.ui-dns.org.; objectClassName=nameserver}} events : {@{eventAction=last changed; eventDate=12.08.2018 15:14:29}} entities : {} objectClassName : domain
Anscheinend betreibt das DENIC schon einen RDAP-Service, der auch Daten liefert. Allerdings nicht mehr Daten, als das DENIC auch über die Webseite bereitstellt oder per NSLOOKUP ermittelt werden kann.
Vermutlich liefert der Service mehr Daten, wenn ich mich entsprechende authentifiziert hätte.
Der Versuch eine Domain über eine falsche Datenbank abzufragen, lieferte z.B. bei mir eben den Fehler, dass dies nicht möglich ist:
PS C:\> Invoke-RestMethod https://rdap.db.ripe.net/domain/msxfaq.de { "links" : [ { "value" : "http://www.ripe.net/data-tools/support/documentation/terms", "rel" : "copyright", "href" : "http://www.ripe.net/data-tools/support/documentation/terms" } ], "rdapConformance" : [ "rdap_level_0" ], "notices" : [ { "title" : "Terms and Conditions", "description" : [ "This is the RIPE Database query service. The objects are in RDAP format." ], "links" : [ { "rel" : "terms-of-service", "href" : "http://www.ripe.net/db/support/db-terms-conditions.pdf", "type" : "application/pdf" } ] } ], "port43" : "whois.ripe.net", "errorCode" : 404, "title" : "RIPE NCC does not support forward domain queries." }
Sie müssen also schon selbst sich durch die Instanzen hangeln.
ipv4.json
Auch die Abfragen nach IP-Adressen ist sehr schnell möglich. Die IANA liefert erst einmal nur die Liste der Top-IP-Adressen.
PS C:\>$ipv4=(invoke-RestMethod https://data.iana.org/rdap/ipv4.json) PS C:\> $ipv4.services | ft Length LongLength Rank SyncRoot IsReadOnly IsFixedSize IsSynch ronized ------ ---------- ---- -------- ---------- ----------- ------- 6 6 1 {41.0.0.0/8, 102.0.0.0/8, 105.0.0.0/8, 154.0.0.0/8…} False True False 2 2 1 {https://rdap.afrinic.net/rdap/, http://rdap.afrinic.net/rdap/} False True False 51 51 1 {1.0.0.0/8, 14.0.0.0/8, 27.0.0.0/8, 36.0.0.0/8…} False True False 1 1 1 {https://rdap.apnic.net/} False True False 111 111 1 {3.0.0.0/8, 4.0.0.0/8, 6.0.0.0/8, 7.0.0.0/8…} False True False 2 2 1 {https://rdap.arin.net/registry/, http://rdap.arin.net/registry/} False True False 43 43 1 {2.0.0.0/8, 5.0.0.0/8, 25.0.0.0/8, 31.0.0.0/8…} False True False 1 1 1 {https://rdap.db.ripe.net/} False True False 10 10 1 {177.0.0.0/8, 179.0.0.0/8, 181.0.0.0/8, 186.0.0.0/8…} False True False 1 1 1 {https://rdap.lacnic.net/rdap/} False True False
Hier sehe ich, welche IP-Adressen von welchem RIPE verwaltet werden. Die IANA verweist mich also weiter. Dann schaue ich doch mal, was ich zur IP-Adresse von Net at Work finde, die mit 80.66.20.x anfängt.
PS C:\> $ipv4.services[3] 2.0.0.0/8 5.0.0.0/8 ... 80.0.0.0/8 ... 217.0.0.0/8 https://rdap.db.ripe.net/
Im vierten Eintrag finde ich die 80, die auf das RIPE.NET verweist. Über eine passende Anfrage bekomme ich dann direkt die Antwort
PS C:\> Invoke-RestMethod https://rdap.db.ripe.net/ip/80.66.20.16 handle : 80.66.20.16 - 80.66.20.31 startAddress : 80.66.20.16 endAddress : 80.66.20.31 ipVersion : v4 name : netatwork-net type : ASSIGNED PA country : DE parentHandle : DE-EWETEL-20010515 entities : {@{handle=ETH1-RIPE; vcardArray=System.Object[]; roles=System.Object[]; entities=System.Object[]; objectClassName=entity}} remarks : {@{description=System.Object[]}} links : {@{value=https://rdap.db.ripe.net/ip/80.66.20.16; rel=self; href=https://rdap.db.ripe.net/ip/80.66.20.16}, @{value=http://www.ripe.net/data-tools/support/documentation/terms; rel=copyright; href=http://www.ripe.net/data-tools/support/documentation/terms}} events : {@{eventAction=last changed; eventDate=13.07.2006 11:09:13}} rdapConformance : {rdap_level_0} notices : {@{title=Filtered; description=System.Object[]}, @{title=Source; description=System.Object[]}, @{title=Terms and Conditions; description=System.Object[]; links=System.Object[]}} port43 : whois.ripe.net objectClassName : ip network
Das ist zwar nicht arg viel mehr, als man per WHOIS auch erhalten hat, aber per HTTPS geht das natürlich sehr viel einfacher.
Zwischenstand
RDP liefert aktuell nicht mehr Daten als WHOIS. Der Wechsel auf HTTPS und REST ist aber eine gute Basis, um zukünftig auch Authentifizierungen und Berechtigungen mit einzubauen und so den Zugriff auf die Daten einfacher zu gestalten. Allerdings sollten Sie nicht davon ausgehen, dass nun über diesen Weg wieder Daten erreicht werden, die dank DSGVO im Whois verschwunden sind. Vermutlich läuft es nun darauf hinaus, dass Strafverfolgungsbehörden, Geheimdienste und Co den Zugriff auf die Daten fordern und sicher auch erhalten werden. Das konnten Sie mit Whois auch schon. Für den normalen Administrator verbessert sich hier aber wohl nichts. Bei Problemen mit dem Mailversand oder Empfang wird man wieder darauf hoffen, dass es auch eine Webseite mit Impressum gibt und die Kontaktadressen auch die Verbindung zu einem qualifizierten Ansprechpartner herstellen. Schon die Bereitstellung von "Postmaster@<domain>" hat ja sehr stark abgenommen.
Andere Informationen wie z.B. Zertifikate für eine sichere Kommunikation oder andere zu sichernde Informationen wie dies mit DNSSEC kommen könnten, sind leider auch nicht enthalten.
Insofern ist diese Schnittstelle "nett" aber ob sie wirklich genutzt wird, müssen wir abwarten
Weitere Links
- DNSSEC
- IP Location Service
- RFC7480 - HTTP Usage in the Registration Data Access Protocol (RDAP)
- RFC7481 -Security Services for the Registration Data Access Protocol (RDAP)
- RFC7482 - Registration Data Access Protocol (RDAP) Query Format
- RFC7483 - JSON Responses for the Registration Data Access Protocol (RDAP)
- RFC7484 - Finding the Authoritative Registration Data (RDAP) Service
- RFC8056 - Extensible Provisioning Protocol (EPP) and Registration Data Access Protocol (RDAP) Status Mapping
- Bootstrap Service Registry for Domain
Name Space
https://www.iana.org/assignments/rdap-dns/rdap-dns.xhtml - RDAP Technical Implementation Guide
https://www.icann.org/en/system/files/files/rdap-technical-implementation-guide-31jul18-en.pdf