Skip to content

letticia/UPKI_Check_MPIC

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 

Repository files navigation

check_mpic.sh スクリプトマニュアル

概要

check_mpic.sh は、指定されたFQDN(完全修飾ドメイン名)に対して、証明書発行に必要となる CAAレコード と関連する CNAMEレコード の設定状況をDNSを遡りながら確認し、さらに複数のパブリックDNSからの名前解決結果を照合することで MPIC (Multi-Perspective Issuance Corroboration) の要件を満たしているかを自動的にチェックするシェルスクリプトです。

各種SSL/TLSサーバー証明書の発行に際して、CAAレコードの不備や意図しないCNAMEチェーン、GeoIP制限やスプリットホライズン等に起因するMPIC検証エラー(海外からの名前解決失敗など)のトラブルシューティング・事前確認に役立ちます。


主な機能と挙動

  1. 基本のレコード確認 対象のFQDNについて、CAA レコードと CNAME レコードを引き、その内容を出力します。

    • CAAレコードが見つからない場合は「CAAレコードがありません」と出力されます。
    • CNAMEレコードが見つからない場合は「CNAMEレコードがありません」と出力されます。
  2. CNAMEの自動追跡(チェーン解決) 対象のFQDNにCNAMEレコードが設定されている場合、その**参照先(CNAME先のFQDN)**に対しても自動的にCAAとCNAMEの確認を行います。 この処理は、最終的にCNAMEの参照先がなくなる(Aレコード等の実体ドメインに落ち着く)まで繰り返されます。 (※ 無限ループを防ぐため、一度確認したFQDNに再度アクセスした場合はループを自動で検知し追跡を停止します)

  3. 名前解決の可否判定 dig コマンドにおいて NXDOMAIN(ドメインが存在しない)または SERVFAIL(DNSサーバー側のエラー)のステータスが返ってきた場合、指定されたドメインは「名前解決ができません。DNSの設定を修正しないと証明書発行が抑制されます。また、エラー338の原因になる可能性があります。」というエラーを出力し、それ以上の確認を中断します。

  4. 特定CA(認証局)の許可チェック 取得したCAAレコードの内容に secomtrust.net という文字列が含まれていない場合、「CAAレコードが存在しますが、 secomtrust.net が含まれません。発行が抑制され、エラー338の原因になる可能性があります。」という警告を出力し、発行元認証局の制限にひっかかる可能性を示唆します。

  5. eTLD+1への遡り(Public Suffix List連携) 各種レコードの有無にかかわらず、サブドメイン(例: sub.example.co.jp)が指定された場合、そのドメインの所属するゾーンの頂点・ベースドメイン(eTLD+1 相当、例: example.co.jp)に到達するまで、ドメインラベルを1つずつ削りながら親ドメイン側へと遡って確認を繰り返します。

    • ※ 遡りの終点(eTLD+1)を正確に判定するため、初回実行時に Mozilla の Public Suffix List (public_suffix_list.dat) を公式から自動でダウンロードします。
  6. 代替DNSサーバー(8.8.8.8 / 1.1.1.1)での確認とMPIC判定 ローカル(デフォルト)のDNSサーバーでの一連の確認(遡り処理含む)が完了した後、指定された最初の「ターゲットFQDN」に対してのみ、以下のパブリックDNSサーバーを用いた検証を再度単独で実行します。

    • Google Public DNS (8.8.8.8)
    • Cloudflare DNS (1.1.1.1) これにより、DNSキャッシュの浸透状況や、GeoIP制限(海外からの名前解決失敗)、スプリットホライズン(内部/外部でのレコード不一致)などを検出し、MPICの要件を満たすかどうかを自動判定します。

仕組みと動作要件

動作要件

  • OS: Linux / macOS などのUNIX系OS
  • 必須コマンド: bash, dig (bind-utils/dnsutils), curl, awk, grep, sed
  • ネットワーク接続: DNSクエリ(ポート53)、および初回のみPSLダウンロードのためのインターネット接続(HTTPS)

Public Suffix List (PSL) について

ドメインは単純に「最後のドットから数個」だけで頂点を判断することができません(例: .com は1つ前が頂点だが、.co.jp.ac.jp は2つ前が頂点になるため)。 本スクリプトは正確な判定を行うため、スクリプトと同じディレクトリに public_suffix_list.dat というリストファイルを要求します。存在しない場合は curl で自動的にダウンロードして使用します。


使用方法

1. 実行権限の付与(初回のみ)

ターミナルを開き、スクリプトに対して実行権限を付与します。

chmod +x check_mpic.sh

2. スクリプトの実行

引数として、確認したい対象のFQDNを指定して実行します。

./check_mpic.sh <FQDN>

実行例

./check_mpic.sh certs.nii.ac.jp

3. 出力の見方(サンプル)

実行すると、以下のような形式で情報が順に出力されます。実行過程でどのように判定を行っているかがログとして表示されます。

--> Public Suffix Listを元に算出された頂点ドメイン(eTLD+1): nii.ac.jp

==================================================
対象FQDNと上位ドメイン(デフォルトDNS)の確認
==================================================
=== [certs.nii.ac.jp] の確認 ===
CAAレコードがありません (certs.nii.ac.jp)
CNAMEレコードがありません (certs.nii.ac.jp)

--- 上位FQDN (nii.ac.jp) へ遡ります ---
=== [nii.ac.jp] の確認 ===
CAAレコードがありません (nii.ac.jp)
CNAMEレコードがありません (nii.ac.jp)

--> 頂点ドメイン(eTLD+1: nii.ac.jp) に到達しました。上位への遡りを終了します。

==================================================
指定DNSでの確認 (8.8.8.8)
==================================================
=== [certs.nii.ac.jp] をDNSサーバ 8.8.8.8 で確認 ===
CAAレコードがありません (certs.nii.ac.jp)
CNAMEレコードがありません (certs.nii.ac.jp)

==================================================
指定DNSでの確認 (1.1.1.1)
==================================================
=== [certs.nii.ac.jp] をDNSサーバ 1.1.1.1 で確認 ===
CAAレコードがありません (certs.nii.ac.jp)
CNAMEレコードがありません (certs.nii.ac.jp)

==================================================
【MPIC判定結果】 (Multi-Perspective Issuance Corroboration)
==================================================
判定結果: ✅ パスする可能性が高いです。
複数のDNS拠点からの応答(ステータス、CAA、CNAME)が一致しています。

エラーや警告が出た場合は、DNS側の設定(CAAレコードの追加修正やCNAMEの記述ミス)を見直してください。

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages