DKIM DNSレコードジェネレーター

セレクター名と公開鍵(PEM形式)を入力するだけで、DKIM署名用のDNS TXTレコード(v=DKIM1; k=rsa; p=...)を自動生成します。255文字を超える長い公開鍵はBINDゾーンファイル形式で自動的に分割表記します。

DKIM用のDNSレコードを組み立てる

セレクター名と PEM 形式の公開鍵を入れると、DKIM 署名の検証に使う DNS の TXT レコード(`v=DKIM1; k=rsa; p=...`)を組み立てます。置き場所は `セレクター._domainkey.ドメイン` です。

**ここで必ず引っかかるのが、DNS の TXT は1つの文字列あたり255文字までという制限です。** RSA 2048ビットの公開鍵は Base64 で約390文字あるため、**そのままでは1つの文字列に収まりません。** ゾーンファイルでは括弧で囲んで複数の文字列に分けて書き、**受信側はそれらを連結して1つの値として読みます。** このツールはその分割まで行います。**もう一つ、絶対に間違えてはいけないのが、DNS に置くのは公開鍵だということです。** 秘密鍵は署名する側のサーバーにだけ置き、外へ出してはいけません。

使い方

  1. ドメインとセレクター名を入れる セレクターは任意の名前で、鍵を入れ替える際に新しい名前を使います。
  2. 公開鍵をPEM形式で貼り付ける **`-----BEGIN PUBLIC KEY-----` で始まる公開鍵です。秘密鍵ではありません。**
  3. 生成されたレコードを確認する **255文字を超える場合は、括弧で分割した形で出力されます。**
  4. DNSへ登録する `セレクター._domainkey.ドメイン` に TXT レコードとして置きます。

使いこなすためのヒント

  • 公開鍵はopendkim-genkeyやOpenSSLの openssl genrsa → openssl rsa -pubout で生成したPEMファイルの中身をそのまま貼り付けられます。改行やヘッダー行は自動的に除去されます。
  • テストモード(t=y)を有効にすると、DKIM検証に失敗した受信側サーバーが強く拒否せず様子見してくれる場合があります。本番運用へ切り替える前の検証期間に使うと安全です。
  • 生成したレコードをDNSに登録した後は、本サイトのメール配信診断ツール(SPF/DKIM/DMARC診断)で実際に反映されているか確認することをおすすめします。
  • 鍵長は1024bit・2048bitが一般的ですが、2048bit鍵は公開鍵の文字列が長くなり255文字を超えて複数の文字列に分割されるのが通常です。分割自体はエラーではありません。
  • セレクター名は自由に決められますが、同じドメインで複数のメール配信サービスを使う場合は「google」「mailgun」のようにサービス名を含めると管理しやすくなります。

活用シーン

DKIMを新しく導入する

**鍵を作ったあと、DNSへどう書けばよいかが分かります。**

鍵をローテーションする

**新しいセレクターでレコードを足し、切り替え後に古いほうを消します。**

分割の書式を確かめる

長い鍵をどう分けるかは、手で書くと間違えやすい箇所です。

配信サービスの指示を検証する

**外部サービスから渡されたレコードが正しい形かを確かめられます。**

DKIMの用語

セレクター
鍵を識別する名前です。**`selector._domainkey.example.com` の先頭にあたり、鍵ごとに別の名前を付けます。**
公開鍵
**DNSに置くほうの鍵です。** 受信側がこれで署名を検証します。
秘密鍵
署名を作るための鍵です。**送信サーバーにだけ置き、決して公開してはいけません。**
255文字の制限
**TXTレコードの1文字列あたりの上限です。** 超える場合は複数の文字列に分けて書きます。
v=DKIM1
レコードの版を示すタグです。先頭に置きます。
k=rsa
鍵の種類です。RSA のほか、より短い Ed25519 を使う方式もあります。

よくある質問

同じドメインで複数のDKIM鍵を使い分けるための識別子です。DNS上では「セレクター._domainkey.ドメイン」という名前でレコードが公開され、送信メールのDKIM-Signatureヘッダーに記載された s= タグの値と一致するセレクターの公開鍵で署名が検証されます。

DNSのTXTレコードは1つの文字列(character-string)が255バイトまでという制限があるため、超える分は複数の引用符付き文字列に分割し、隙間なく連結して1つのTXTレコードとして登録します。本ツールが生成するBIND形式の表記はこの分割にすでに対応しています。

いいえ。本ツールはDNSに公開するレコードを組み立てるだけで、秘密鍵の生成は行いません。秘密鍵はopendkim-genkeyやOpenSSL等、信頼できるツールを使い自分の環境内で安全に生成・保管してください。

DKIM導入直後、実際の送信環境で正しく署名・検証できているかを確認する期間に使います。一部の受信側はt=yが付いたドメインからのDKIM検証失敗を通常より緩やかに扱うため、本番運用への移行前の安全弁として機能します。

現時点では対応する送受信サーバーが幅広いRSA(k=rsa)が実務上の標準です。Ed25519(k=ed25519、RFC 8463)は鍵長が短く署名も高速ですが、対応していないメールサーバーも存在するため、双方の環境で動作確認できる場合にのみ採用を検討してください。
ツールくん

余談ですが ― 公開鍵暗号がメールの「なりすまし」を防ぐ仕組み

DKIM(DomainKeys Identified Mail)は2004年にYahoo!とCiscoが個別に開発していた技術(DomainKeysとIdentified Internet Mail)を統合する形で標準化されました。仕組みの核心は公開鍵暗号です。送信側はメールのヘッダーと本文の一部から計算したハッシュ値を秘密鍵で暗号化し、DKIM-Signatureヘッダーに添付します。受信側はDNSで公開されている公開鍵でこの署名を検証し、鍵ペアが正しく対応していれば「送信後に内容が改ざんされていない」ことを数学的に確認できます。

SPFが送信元IPアドレスというネットワークレベルの正当性を検証するのに対し、DKIMはメールの内容そのものに電子署名を施す点が本質的に異なります。そのためメールが正規の中継サーバーを何度も転送された場合でも(SPFはこの種の転送に弱いことが知られています)、DKIM署名は本文が変更されない限り有効性を保ちます。この特性から、DKIMはメーリングリストなど転送を伴う配信経路でもSPFより信頼性の高い認証手段として評価されています。

セレクターという仕組みも実務上重要です。1つのドメインが複数のメール配信サービス(自社サーバー・Gmail・SendGridなど)を併用する場合、それぞれに別々の鍵ペアとセレクター名を割り当てることで、サービスごとに独立して鍵を無効化・更新できます。1つの鍵が漏えいしても他のセレクターには影響しないという運用上の柔軟性が、DKIMがDNSレコード1本の単純な仕組みでありながら大規模なメールインフラで長く使われ続けている理由の一つです。