最近在工作中接触到了RDAP协议,然而关于这个协议的中文资料并不多。因此,简单研究了相关内容完成了一个简单的分享,希望能对读者有所帮助。
Whois与RDAP
要谈RDAP,离不开Whois协议。作为互联网早期的一种协议,Whois在获取域名和IP地址注册信息方面发挥了重要作用。然而,随着互联网的发展,我们发现Whois协议存在一些明显的缺陷:
- 查询和响应格式不统一:这使得数据解析变得困难。
- 缺乏用户身份验证或访问控制:这意味着无法实现差异化访问,从而在一定程度上影响了数据的安全性。
- 不支持国际化:Whois无法支持国际化域名 (IDN)
为了解决这些问题,Registration Data Access Protocol (RDAP) 协议应运而生。RDAP协议是一种用于获取域名和IP地址注册信息的新协议,旨在取代传统的WHOIS协议,提供更加标准化、结构化和安全的注册数据访问方式。
与Whois对应,RDAP协议具有以下特点:
- 结构化数据:RDAP返回的数据以JSON格式呈现,相比于WHOIS的文本格式,更易于解析和处理。
- 统一的查询语法:RDAP使用统一的查询语法,使得查询语句在不同的注册机构之间具有一致性。
- 访问控制和安全性:RDAP支持访问控制和身份验证机制,可以提供更安全的注册数据访问。
- 国际化支持:RDAP支持国际化域名和多语言字符集,可以更好地处理多语言环境下的域名查询。
协议细节
在没有更多资料的情况下,一个合适的了解协议的方式是从RFC入手,容易搜到,和RDAP协议相关的RFC有RFC 7480-7484共五份文档。这五份文档详细地描述了RDAP协议的各个方面。
第一份协议草案 RFC7480 HTTP Usage in the Registration Data Access Protocol (RDAP) 是RDAP协议的基础,描述了RDAP的基本交互方式。RDAP协议主要是借用了相对成熟的HTTP协议来进行数据交互,放弃了Whois协议的专有协议类型。
第二份协议草案 RFC7481 Security Services for the Registration Data Access Protocol (RDAP) 主要关注了RDAP协议的安全性,包括身份验证、访问控制和数据保护等。这些都是Whois协议所缺乏的。在设计RDAP协议时,开发者直接复用了HTTP/HTTPS标准的能力,以实现访问控制、可用性、数据完整性等功能。
第三份协议草案 RFC7482 Registration Data Access Protocol (RDAP) Query Format 定义了RDAP的完整交互方式,包括IP、ASN、域名、实体等查询格式。此外,RFC 7482 还引入了搜索的能力,并考虑了国际化域名(IDN)的支持。
具体来说:IP、ASN、域名、实体等查询格式如下:
1 | <server>/ip/<IP address> or ip/<CIDR prefix>/<CIDR length> |
请求有了,接下来是响应,第四份协议草案 RFC7483 Registration Data Access Protocol (RDAP) Query Format 定义了RDAP的响应格式,给出了相对标准的JSON定义与数据实体定义。
然而,在使用RDAP协议时,我们可能会遇到一个问题:我们应该向哪个服务器发送查询请求?这是因为存在多个RDAP服务器。例如,如果我们向亚太地区的服务器请求欧洲地区的IP,显然是得不到回应的。为了解决这个问题,RFC7484 Finding the Authoritative Registration Data (RDAP) Service 提出了 bootstrap 标准,会对响应做自动跳转。
例如请求 https://rdap-bootstrap.arin.net/bootstrap/ip/1.1.1.1 会自动跳转到 https://rdap.apnic.net/ip/1.1.1.1 。
总的来说,RFC 7480-7484 五份文档从协议蓝图到安全性考虑、请求与响应、工程实现给出了详细的描述,对于理解RDAP协议非常有帮助。
协议使用
如果想在命令行中使用RDAP协议,可以使用开源组织提供的工具,如 https://github.com/openrdap/rdap 。
如果需要在项目中集成RDAP协议,可以参考pypi的库,如 https://github.com/20c/rdap 。
如果只是想简单地使用RDAP协议,可以在浏览器中直接输入查询URL,如 https://rdap.apnic.net/ip/1.1.1.1 。
参考链接
[1] Registration Data Access Protocol (RDAP): https://www.icann.org/rdap
[2] RFC7480 HTTP Usage in the Registration Data Access Protocol (RDAP): https://datatracker.ietf.org/doc/html/rfc7480
[3] RFC7481 Security Services for the Registration Data Access Protocol (RDAP): https://datatracker.ietf.org/doc/html/rfc7481
[4] RFC7482 Registration Data Access Protocol (RDAP) Query Format: https://datatracker.ietf.org/doc/html/rfc7482
[5] RFC7483 Registration Data Access Protocol (RDAP) Query Format: https://datatracker.ietf.org/doc/html/rfc7483
[6] RFC7484 Finding the Authoritative Registration Data (RDAP) Service: https://datatracker.ietf.org/doc/html/rfc7484