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.

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:\Users\fcarius> 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
  • 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