A consulta de dados de nomes de domínios e endereços de IP é feita normalmente através do protocolo WHOIS, podendo em alguns casos ser feita também através de páginas web ou outras ferramentas que se conectam a esse protocolo.
Apesar de ser utilizado por praticamente todas as Registries responsáveis por domínios de topo, nos últimos anos as desvantagens do protocolo WHOIS têm sido cada vez mais evidentes, incluíndo a falta de um modelo padrão para apresentação dos dados que seja similar a todos os servidores WHOIS, a falta de suporte à internacionalização (Domínios IDN) e a impossibilidade de pedidos autenticados de forma a fornecer dados diferentes a cada tipo de utilizador.
Em 2012 foi criado pela IETF (Internet Engineering Task Force) um grupo de trabalho denominado de WEIRDS (Web Extensible Internet Registration Data Service) para determinar as necessidades da comunidade Internet relativamente a este assunto, tendo originado a publicação de vários RFCs que levaram à criação de um novo protocolo padronizado para substituir o WHOIS, o RDAP – Registry Data Access Protocol.
O protocolo RDAP irá funcionar através de HTTP(S) e a informação será devolvida em formato JSON, sendo opcional para as Registries e Registrars fornecerem o output dos dados em outros formatos.
Abaixo poderá verificar um exemplo de um pedido <> resposta entre um cliente e servidor RDAP conforme definido pelo rfc7480:
< pre>An example of an RDAP client and server exchange: Client: <TCP connect to rdap.example.com port 80> GET /rdap/ip/203.0.113.0/24 HTTP/1.1 Host: rdap.example.com Accept: application/rdap+json rdap.example.com: HTTP/1.1 301 Moved Permanently Location: http://rdap-ip.example.com/rdap/ip/203.0.113.0/24 Content-Length: 0 Content-Type: application/rdap+json <TCP disconnect> Client: <TCP connect to rdap-ip.example.com port 80> GET /rdap/ip/203.0.113.0/24 HTTP/1.1 Host: rdap-ip.example.com Accept: application/rdap+json rdap-ip.example.com: HTTP/1.1 200 OK Content-Type: application/rdap+json Content-Length: 9001 { ... } <TCP disconnect>
Adicionalmente existe um RFC (rfc7481) que define os Serviços de Segurança do protocolo RDAP, acrescentando funcionalidades que não existiam no protocolo WHOIS, tais como controlo de acessos, autenticação, autorização, disponibilidade, confidencialidade de dados e integridade dos dados.
Neste momento o protocolo WHOIS funciona e responde de forma igual a qualquer pedido que seja semelhante, independentemente de quem o faz. Com o protocolo RDAP existirão funcionalidades que permitirão identificar quem está a efectuar o pedido de informação, autenticar esse pedido através de credenciais de autenticação, autorizar ou não o pedido e permitir controlar o acesso à informação que cada cliente poderá consultar.
Desta forma os Registries e Registrars poderão limitar o tipo de informação relativamente ao titular do nome de domínio que uma consulta RDAP devolve dependendo de quem a requisita, protegendo a identidade dos registrants e garantindo a sua privacidade.
A estrutura de dados do RDAP permite aos servidores fornecerem ainda um estado para os blocos de dados devolvidos indicando se os dados foram tornados privados de forma total ou parcial, editados/alterados ou ofuscados.
Os dados das entidades associadas a um nome de domínio são fornecidos em jCard, uma versão do vCard em formato JSON.
Através do rfc7482 é definido o formato dos URLs para os pedidos feitos aos servidores RDAP, tendo em conta que os mesmos deverão fornecer informações não só de nomes de domínios, mas também outros objectos, tais como:
Redes através de Endereços de IPv4 ou IPv6
Directoria “ip” utilizada para identificar redes de IP e dados associados utilizando endereços IPv4 ou IPv6.
Formato:
- ip/<Endereço de IP> ou ip/<Prefixo da CIDR>/<Tamanho da CIDR>
Exemplos:
- IPv4: https://rdap-server-example.rdap/rdap/ip/185.118.112.1
- GamaIPv4: https://rdap-server-example.rdap/rdap/ip/185.118.112.0/24
- IPv6: https://rdap-server-example.rdap/rdap/ip/2a03:6420::0
- Gama IPv6: https://rdap-server-example.rdap/rdap/ip/2a03:6420::/32
Autonomous System (AS Numbers) pelo número
Directoria “autnum” utilizada para identificar registos de AS (Autonomous System) Numbers utilizando o número do AS no formato asplain.
Formato:
- autnum/<Número AS>
Exemplos:
- AS Number: https://rdap-server-example.rdap/rdap/autnum/65538
Nomes de Domínios
Directoria “domain” utilizada para obter informações referentes a FQDN (fully qualified domain names) nas zonas in-addr.arpa e ip6.arpa para servidores mantidos por RIRs (Regional Internet Registries) e informações relativas a domínios FQDN nas zonas administradas para servidores de DNR (Domain Name Registries).
Formato:
- domain/<nome do domínio>
Exemplos:
- rDNS IPv4: https://rdap-server-example.rdap/rdap/domain/112.118.185.in-addr.arpa
- rDNS IPv6: https://rdap-server-example.rdap/rdap/domain/1.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa
- Domínio: https://rdap-server-example.rdap/rdap/domain/oseudominio.com
- Domínio IDN: https://rdap-server-example.rdap/rdap/domain/xn--oseudomnio-q8a.pt
Nameservers
Directoria “nameserver” utilizada para obter dados referentes a nameservers. Também suporta nameservers em domínios IDN, sendo feita a consulta com o punycode do domínio.
Formato:
- nameserver/<nome do nameserver>
Exemplo:
- Nameserver: https://rdap-server-example.rdap/rdap/nameserver/ns1.wtservers.com
Entidades (como contactos) por um identificador
Directoria “entity” utilizada para obter informações relacionadas com as diversas entidades, como por exemplo contactos de um domínio (Nic-Handle de registrant) ou Registrar.
Formato:
- entity/<id da entidade>
Exemplo:
- Entidade: https://rdap-server-example.rdap/rdap/entity/ABCXYZ123
Existem ainda outros parâmetros de URL que poderão ser implementados, tais como “help” e “search”, permitindo a que seja possível aceder à documentação de ajuda e pesquisar recursos no servidor RDAP.
JSON Responses for the Registration Data Access Protocol (RDAP)
No rfc7483 encontramos a estrutura de dados da representação da informação do protocolo RDAP em JSON. Deixamos abaixo alguns exemplos, dependendo do objecto que se pretende.
Entidades
Os objectos referente a uma Entidade (Entity) utiliza jCard para representar a informação de um contacto, como morada, código-postal, endereços de e-mail e contactos telefónicos.
{ "objectClassName" : "entity", "handle":"XXXX", "vcardArray":[ "vcard", [ ["version", {}, "text", "4.0"], ["fn", {}, "text", "Jon Snow"], ["kind", {}, "text", "individual"], ["lang", { "pref":"1" }, "language-tag", "pt-pt"], ["lang", { "pref":"2" }, "language-tag", "en"], ["org", { "type":"work" }, "text", "Example"], ["title", {}, "text", "Research Scientist"], ["role", {}, "text", "Project Lead"], ["adr", { "type":"work" }, "text", [ "", "Rua da Alegria", "123", "Braga", "4700-007", "Portugal" ] ], ["tel", { "type":["work", "voice"], "pref":"1" }, "uri", "tel:+1-555-555-1234;ext=102" ], ["email", { "type":"work" }, "text", "jon.snow@oseudominio.pt" ] ] ], "status":[ "validated", "locked" ], "remarks":[ { "description":[ "She sells sea shells down by the sea shore.", "Originally written by Terry Sullivan." ] } ], "links":[ { "value":"http://rdap-server-example.rdap/entity/XXXX", "rel":"self", "href":"http://rdap-server-example.rdap/entity/XXXX", "type":"application/rdap+json" } ], "port43":"whois.example.net", "events":[ { "eventAction":"registration", "eventDate":"1990-12-31T23:59:59Z" }, { "eventAction":"last changed", "eventDate":"1991-12-31T23:59:59Z", "eventActor":"jon.snow@oseudominio.pt" } ] }
Nameservers
{ "objectClassName" : "nameserver", "handle" : "XXXX", "ldhName" : "ns1.xn--fo-5ja.example", "unicodeName" : "ns1.foo.example", "status" : [ "active" ], "ipAddresses" : { "v4": [ "192.0.2.1", "192.0.2.2" ], "v6": [ "2001:db8::123" ] }, "remarks" : [ { "description" : [ "She sells sea shells down by the sea shore.", "Originally written by Terry Sullivan." ] } ], "links" : [ { "value" : "http://example.net/nameserver/xxxx", "rel" : "self", "href" : "http://example.net/nameserver/xxxx", "type" : "application/rdap+json" } ], "port43" : "whois.example.net", "events" : [ { "eventAction" : "registration", "eventDate" : "1990-12-31T23:59:59Z" }, { "eventAction" : "last changed", "eventDate" : "1991-12-31T23:59:59Z", "eventActor" : "joe@example.com" } ] }
Nomes de Domínios
{ "objectClassName" : "domain", "handle" : "XXXX", "ldhName" : "0.2.192.in-addr.arpa", "nameservers" : [ { "objectClassName" : "nameserver", "ldhName" : "ns1.rir.example" }, { "objectClassName" : "nameserver", "ldhName" : "ns2.rir.example" } ], "secureDNS": { "delegationSigned": true, "dsData": [ { "keyTag": 12345, "algorithm": 3, "digestType": 1, "digest": "49FD46E6C4B45C55D4AC" } ] }, "remarks" : [ { "description" : [ "She sells sea shells down by the sea shore.", "Originally written by Terry Sullivan." ] } ], "links" : [ { "value": "http://example.net/domain/XXXX", "rel" : "self", "href" : "http://example.net/domain/XXXXX", "type" : "application/rdap+json" } ], "events" : [ { "eventAction" : "registration", "eventDate" : "1990-12-31T23:59:59Z" }, { "eventAction" : "last changed", "eventDate" : "1991-12-31T23:59:59Z", "eventActor" : "joe@example.com" } ], "entities" : [ { "objectClassName" : "entity", "handle" : "XXXX", "vcardArray":[ "vcard", [ ["version", {}, "text", "4.0"], ["fn", {}, "text", "Joe User"], ["kind", {}, "text", "individual"], ["lang", { "pref":"1" }, "language-tag", "fr"], ["lang", { "pref":"2" }, "language-tag", "en"], ["org", { "type":"work" }, "text", "Example"], ["title", {}, "text", "Research Scientist"], ["role", {}, "text", "Project Lead"], ["adr", { "type":"work" }, "text", [ "", "Suite 1234", "4321 Rue Somewhere", "Quebec", "QC", "G1V 2M2", "Canada" ] ], ["tel", { "type":["work", "voice"], "pref":"1" }, "uri", "tel:+1-555-555-1234;ext=102" ], ["email", { "type":"work" }, "text", "joe.user@example.com" ] ] ], "roles" : [ "registrant" ], "remarks" : [ { "description" : [ "She sells sea shells down by the sea shore.", "Originally written by Terry Sullivan." ] } ], "links" : [ { "value": "http://example.net/entity/xxxx", "rel" : "self", "href" : "http://example.net/entity/xxxx", "type" : "application/rdap+json" } ], "events" : [ { "eventAction" : "registration", "eventDate" : "1990-12-31T23:59:59Z" }, { "eventAction" : "last changed", "eventDate" : "1991-12-31T23:59:59Z", "eventActor" : "joe@example.com" } ] } ], "network" : { "objectClassName" : "ip network", "handle" : "XXXX-RIR", "startAddress" : "192.0.2.0", "endAddress" : "192.0.2.255", "ipVersion" : "v6", "name": "NET-RTR-1", "type" : "DIRECT ALLOCATION", "country" : "AU", "parentHandle" : "YYYY-RIR", "status" : [ "active" ] } }
Como sempre, a raiz para consulta da informação será a IANA, podendo ser obtido posteriormente o servidor RDAP autoritário navegando até ao servidor responsável.
- Endereços IPv4: http://data.iana.org/rdap/ipv4.json
- Endereços IPv6: http://data.iana.org/rdap/ipv6.json
- Nomes de Domínios: http://data.iana.org/rdap/dns.json
- AS Numbers: http://data.iana.org/rdap/asn.json
Deixamos abaixo alguns exemplos para respostas autoritárias de servidores RDAP fornecidos por RIRs e DNRs que já implementaram este protocolo:
- Endereço IPv4: https://rdap.db.ripe.net/ip/185.118.112.0
- Endereços IPv6: https://rdap.db.ripe.net/ip/2a03:6420::0
- Nome de Domínio: https://rdap.nic.cz/domain/nic.cz
- AS Number: https://rdap.db.ripe.net/autnum/3243
Resumimos aqui algumas das novidades e vantagens da que a implementação deste protocolo vai trazer. Se está curioso e pretende conhecer melhor este novo protocolo, deixamos alguns links de interesse abaixo:
- RDAP Operational Profile for gTLD Registries and Registrars
- 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)
Este protocolo deverá começar a ser utilizado pelas Registries a partir de Fevereiro de 2017, pelo que possivelmente até lá, muita mais informação e documentação técnica será divulgada.