🚀 はじめに

ICANNのレジストラ認定(RAA)の基本を押さえつつ、RDAPで登録情報を安全に確認する具体手順をまとめます。この記事を終える頃には、認定レジストラの見分け方有効期限の自動チェックまで実装できるようになります。

前提のキーワード(超要約)

  • レジストラ:ドメインを利用者に販売・管理する事業者(ICANNがgTLD領域で認定)
  • レジストリ:TLD(.com等)を運用する主体
  • ICANN:インターネットの識別子調整団体
  • RDAP:WHOISの後継プロトコル(JSON/HTTPS、差別化アクセス)

💡 概要:RAA・認定レジストラ・RDAPの要点

  • ICANN認定レジストラ:gTLDの登録業務を行うためICANNに認められた会社。公式の「List of Accredited Registrars」で検索・照合できます。
  • RAA(Registrar Accreditation Agreement):レジストラの義務・運用を規定する契約。2024年4月5日付のグローバル改訂が発効し、DNS Abuse対策義務などの明確化が行われました。
  • RDAP:WHOISの後継。2025年1月28日以降、gTLDではWHOISがサンセット(提供義務終了)し、RDAPが正規の提供手段となりました。
  • ICANN Lookup:RDAPベースの公式検索サイト(lookup.icann.org)。

📱 Step 1:準備(コマンド環境と公式リンク)

コマンド環境の整備

操作whois(参考)/ curl / jq を導入する
目的:RDAPのJSON応答を加工し、レジストラ名や有効期限を取得可能にする

# Debian/Ubuntu
sudo apt update && sudo apt install -y whois curl jq

# Fedora/RHEL
sudo dnf install -y whois curl jq

# macOS (Homebrew)
brew install whois curl jq

結果curl --versionjq --version が表示されれば準備OK

補足:今後はRDAP中心の運用に移行します(WHOISは義務が終了)。

公式サイトをブックマーク

操作:以下を開けるようにしておく
目的認定照合RDAP検索を迅速に行う

  • ICANN Accredited Registrars(認定レジストラ一覧・検索・CSV)
  • ICANN Lookup(RDAPベースの検索)

結果:レジストラ名/IANA番号の確認やRDAP検索が即実行できる

注意:.jp 等のccTLDは別体系。gTLD向けの認定・ポリシーと混同しない。JPRSのRDAPガイドも参考に。


⚙️ Step 2:RDAPで登録情報を確認する

認定レジストラの照合(最優先の安全策)

操作:ICANNの「List of Accredited Registrars」で社名/IANA番号を検索
目的:「認定ロゴ風の偽装」を排除し、正規レジストラと取引する
結果:公的リストで一致が取れれば安全性が高い

補足:CSVダウンロードやフィルタでの一覧精査も可能です。

WHOISの参考確認(必要に応じて)

操作:テキストWHOISで現状を把握(将来的には併存縮小)
目的:既存ツール依存の環境での状況確認(RDAP移行の足がかり

# 例:まだ応答するTLDもあるが、RDAP前提に切替えること
whois example.com

結果:テキストで登録情報が返る(マスクや非公開に注意)

注意2025-01-28 以降、gTLDではWHOIS提供義務が終了。自動化はRDAPへ。

RDAPでJSONを取得(推奨)

操作:rdap.org 経由でドメインを照会し、jq で抽出
目的レジストラ名有効期限を構造化データから取得する

# 代表的な照会(example.com)
curl -s https://rdap.org/domain/example.com | jq '.'

# レジストラ名(vCardのfn)を抽出
curl -s https://rdap.org/domain/example.com \
| jq -r '.entities[]? | select(.roles[]?=="registrar") | .vcardArray[1][]? | select(.[0]=="fn") | .[3]'

# 有効期限(events.expiration)を抽出
curl -s https://rdap.org/domain/example.com \
| jq -r '.events[]? | select(.eventAction=="expiration") | .eventDate'

結果Registrar名Expirationが得られる → 認定リストとクロスチェック可能

補足:rdap.org は権威サーバ自動発見のブートストラップ的役割を提供し、クライアント実装の簡素化に有用。

ブラウザでRDAP(ICANN Lookup)

操作https://lookup.icann.org/ にドメインを入力
目的:CLIがない環境でもRDAPベースの結果を確認する
結果:Webで登録情報・レジストラ情報などが表示される

注意:非公開データはRDRSや各レジストラの開示手続きに従います。


🛠️ Step 3:実用例(期限監視・認定照合の自動化)

例A:複数ドメインのレジストラ名と期限を一括取得(Shell)

操作domains.txt を用意してループ処理
目的期限管理/認定照合の下準備を自動で行う

# domains.txt に監視対象のドメインを列挙(例)
# example.com
# example.net

while read -r d; do
  exp=$(curl -s https://rdap.org/domain/"$d" \
    | jq -r '.events[]? | select(.eventAction=="expiration") | .eventDate' 2>/dev/null)
  reg=$(curl -s https://rdap.org/domain/"$d" \
    | jq -r '.entities[]? | select(.roles[]?=="registrar") | .vcardArray[1][]? | select(.[0]=="fn") | .[3]' 2>/dev/null)

  printf "%-30s  Registrar: %-30s  Expiration: %s\n" "$d" "${reg:-N/A}" "${exp:-N/A}"
done < domains.txt

# 出力された Registrar を ICANN の認定リストで照合
# https://www.icann.org/en/accredited-registrars

結果:各ドメインのRegistrar名/Expirationが一覧で得られ、認定リスト照合に使える

注意:レジストラとリセラは混同しやすい。Sponsoring Registrarを基準に判断すること。

例B:PythonでRDAPを呼び出して主要項目を出力

操作:標準ライブラリでRDAPのJSONを取得・整形
目的作成日/有効期限/ステータス等をプログラムから取得する

# 目的:RDAPからレジストラ名・作成日・有効期限・ステータスを取得
import json, sys, urllib.request

def rdap_domain(domain):
    url = f"https://rdap.org/domain/{domain}"
    with urllib.request.urlopen(url, timeout=10) as r:
        return json.loads(r.read().decode("utf-8"))

def get_registrar(entities):
    for e in entities or []:
        if "registrar" in (e.get("roles") or []):
            v = e.get("vcardArray") or []
            if len(v) >= 2:
                for item in v[1]:
                    if item and item[0] == "fn":
                        return item[3]
    return None

def get_event(events, action):
    for ev in events or []:
        if ev.get("eventAction") == action:
            return ev.get("eventDate")
    return None

if __name__ == "__main__":
    domain = sys.argv[1] if len(sys.argv) > 1 else "example.com"
    data = rdap_domain(domain)
    registrar = get_registrar(data.get("entities"))
    created   = get_event(data.get("events"), "registration")
    expires   = get_event(data.get("events"), "expiration")
    status    = ", ".join(data.get("status") or [])
    print(f"Domain     : {domain}")
    print(f"Registrar  : {registrar or 'N/A'}")
    print(f"Created    : {created or 'N/A'}")
    print(f"Expiration : {expires or 'N/A'}")
    print(f"Status     : {status or 'N/A'}")
    print("Accredited Registrars: https://www.icann.org/en/accredited-registrars")

結果:CLI引数のドメインについて主要項目が出力される

補足:Webhook/ジョブ化で期限アラート整合性監視(レジストラ名≠認定一覧の不一致検知)へ展開できます。


⚠️ よくある落とし穴と最新注意点

  • WHOISサンセットを見落とす2025-01-28以降、gTLDでのWHOIS提供義務は終了。RDAPへの移行前提で実装すること。
  • RAAの改訂点を把握しない2024年4月5日発効のグローバル改訂でDNS Abuse対応義務の明確化などが進みました。運用ポリシーを最新に。
  • ccTLDをgTLDと同列に扱う:.jp等は各レジストリの方針で運用。JPRSの日本語ガイドでRDAP表示の違いを確認。
  • 個人情報の期待値:GDPR等で既定マスク。非公開データはRDRSやレジストラ経由の開示に従う。
  • メール検証の失念:RAAに基づく連絡先検証の不履行でサスペンドされ得る(運用上の実装に依存)。

✅ つまずきポイント(チェックリスト)

  • 「認定ロゴ風」表示だけで判断しない必ず公式リストで社名/IANA番号を照合した。
  • リセラとレジストラを区別:RDAPのSponsoring Registrarで最終判断を行った。
  • WHOIS前提の自動化を撤廃:**RDAP(JSON/HTTPS)**へ移行した。
  • 期限管理を自動化events.expiration を取得し、通知/ダッシュボードに連携した。
  • ccTLDの扱いを別管理:.jp 等のルール差を認識し、JPRS等の資料を参照した。

📚 参考リンク(公式中心)


🔧 拡張案:次にやると良いこと

  • 期限ダッシュボード:Prometheus/GrafanaやスプレッドシートにExpirationを定期集計
  • 認定照合の機械化:ICANNリスト(CSV)とSponsoring Registrarの一致監視
  • 通知運用:Slack/Teams/メールで30/14/7日前リマインド

🎯 まとめ

  • ICANN認定レジストラ公式リスト照合が基本。
  • **RAA改訂(2024-04-05)**でDNS Abuse対応などの義務が明確化。運用もアップデートを。
  • RDAPが標準2025-01-28 WHOISサンセット)。自動化はJSON/HTTPS前提で設計。
  • 実践curl+jq/Pythonでレジストラ名・期限を取得→認定リスト照合で安全性を担保。