BLOG ベアメールブログ
2025.01.23 (木)
HowToガイドDKIMレコードの書き方は? 設定・確認方法や失敗例も解説
DKIM(DomainKeys Identified Mail)とは、電子署名によってメール送信者を認証し、メールの改ざんやなりすましを防ぐ技術です。DKIMレコードは、このDKIM認証に必要な公開鍵を登録するための重要なレコードです。
本記事では、DKIMレコードの構成要素の説明と書き方から、実際の設定手順と確認方法、よくある失敗例まで詳しく解説します。
目次
DKIMレコードとは
DKIM認証は、電子署名を利用して、メールが作成時点から改ざんされていないことを検証する仕組みです。
送信メールサーバーにおいて秘密鍵を使用してメールに電子署名を付与し、受信メールサーバーは当該のドメインのDNSから公開鍵を取得して署名を検証します。
DKIMレコードは、DKIMの電子署名を検証するために必要な公開鍵を登録するDNSレコードです。DKIM認証を成功させるには、DKIMレコードを正しく設定する必要があります。
DKIMについて詳しくは以下の記事をご覧ください。
DKIMを導入するには? 仕組みや設定方法を解説|ベアメールブログ
DKIMレコードの書き方
DKIMレコードはTXTレコードとしてDNSに設定します。DKIMレコードの例は次のとおりです。
ホスト名 レコードタイプ TTL レコードの値 default._domainkey.example.com. TXT 3600 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr6Ax…
ホスト名
DKIMレコードを設定するホスト名は以下の形式をとります。
[セレクタ名]._domainkey.[ドメイン名]
セレクタ名とは、公開鍵を識別するために使われる値で、送信メールサーバーが付与する電子署名(DKIM-Signatureヘッダ)のsタグで指定したラベルを設定します。異なるセレクタを使用することで、1つのドメインに対して複数の公開鍵を運用することができます。
レコードタイプ
レコードタイプはTXTレコードを使用します。
TTL
Time to Liveの略で、このレコードがキャッシュに保持される時間(秒単位で計測)を指定します。一般的には3600秒(1時間)程度が推奨されています。
レコードの値
公開鍵情報を含め、DKIM認証に必要な詳細情報を設定します。DKIMレコードの値はタグを使用して定義します。
DKIMレコードの値で使用するタグの内容は以下のとおりです。
タグ 指定する値 概要 v
※推奨 DKIM1 DKIMのバージョンを示す。RFCにおいては必須ではないとされているが、レコードの最初に記載することが推奨されている。 k
※推奨rsa 電子署名の鍵の形式を示す。現在はRSA形式のみがサポートされているため「k=rsa」と記す。省略時はRSAが適用される。 p
※必須公開鍵データ 公開鍵のデータを保持するタグのため、必須。鍵データはBase64でエンコードする。 h
※推奨 sha256 DKIMで使用するハッシュの方式を限定するためのオプションタグ。省略時は全てのハッシュ方式を許容する。DKIMでは現在SHA1とSHA256がサポートされているが、セキュリティ上SHA1は非推奨となっているため、明示的にSHA256を指定することが推奨されている。 t y / s 運用モードを指定するためのフラグ示すオプションタグ。指定できるフラグには「y」と「s」があり、省略時は何も適用されない。
「y」はテストモードであることを示し、認証成功の可否はメールの処理に反映されない。
「s」は厳格一致モードを示し、メール送信者のドメインとDKIM署名のd=タグで指定されたドメインが一致する必要がある。
また、コロン(:)で区切ることで双方を指定することもできる。g * /指定したいローカルパート 電子署名の対象とするメールアドレスのローカルパートを指定するためのオプションタグ。この鍵を利用できる送信者のアドレスを限定したい場合のみ利用する。全てを対象とするワイルドカード文字「*」を指定でき、省略時は「*」が適用される。 n 任意のテキスト 管理者向けの注釈を記載するためのオプションタグ。署名検証や動作には影響を与えないが、DNSレコードのサイズの増大を防ぐためにも不要な情報の記載は避けるべき。省略時には何も設定されない。 s * / email 当該の公開鍵が有効なサービスを指定するオプションタグ。現時点で指定できるサービスは「*」(全てのサービス)と「email」(電子メール)の2つがある。省略時は「*」が適用される。メール以外の用途でも活用できる可能性を残すために設計されているが、他の用途は事実上未定義であり普及もしていない。
DKIMレコードの設定方法
DKIMレコードの設定は、以下のような手順で行います。
自社でDNSサーバーを運用している場合
1. 公開鍵をDKIMレコードの形式に整形する
2. DNSサーバーにアクセスする
3. ゾーンファイルを開き、レコードを追加する
4. ゾーンファイルのシリアル番号を更新する
5. DNSサーバをリロードしもしくは再起動する
6. 確認コマンドやツールで、反映されているか確認する(反映まで数分〜数時間)
7. メールを送信し、DKIM認証が成功するか確認する
DNSサービスで設定する場合
1. 公開鍵をDKIMレコードの形式に整形する
2. 利用しているDNSサービスの管理画面にログインする
3. ドメインを選択する
4. DNSレコードの編集画面で、DKIMレコードを追加して保存する
5. 確認コマンドやツールで、反映されているか確認する(反映まで数秒〜数分)
6. メールを送信し、DKIM認証が成功するか確認する
DNSの設定を行なってから反映されるまでの伝播時間は、DNSサーバーの更新プロセスに左右されるため、高速な分散システムを採用しているクラウドDNSサービスの方が速く反映されます。
よく使われているDNSサービスである「お名前.com」と「Amazon Route53」でDKIMレコードを設定する手順については、以下の記事で詳しく解説しています。
お名前.comでSPF・DKIM・DMARCのDNSレコードを設定する | ベアメールブログ
Amazon Route 53でSPF・DKIM・DMARCのDNSレコードを設定する | ベアメールブログ
DKIMレコードの確認方法
DKIMレコードが正しく設定されているかを確認するためには、以下のようなオンラインツールを利用すると便利です。
今回は「MxToolbox DKIM Record Lookup」(https://mxtoolbox.com/dkim.aspx)を使ってDKIMを確認する方法を紹介します。
1. 「Domain Name」に送信者ドメインを、Selectorにセレクタ名を入力する
2. 「DKIM Lookup」をクリックする
DKIMの設定に不備や誤りがあった場合は、レコードの内容を見直し、修正しましょう。
DKIMレコードの失敗例
最後に、DKIMレコードの設定時によくある具体的な失敗例を解説します。いずれも受信側サーバーがレコードを正しく認識できず、認証に失敗する原因となります。
誤ったFQDNで公開している
DKIMレコードを設定するFQDN(Fully Qualified Domain Name:完全修飾ドメイン名)を誤った形式で公開してしまうケースです。たとえば次のような例があります。
例1
DKIM用のサブドメインを指定せず、ドメイン名に直接DKIMレコードを設定しているケースです。失敗例 | example.co.jp IN TXT “v=DKIM1; k=rsa; p=…”; |
---|---|
修正例 | default._example.co.jp IN TXT “v=DKIM1; k=rsa; p=…”; |
例2
セレクタを指定せずにDKIMレコードを設定しているケースです。
失敗例 _domainkey.example.co.jp IN TXT “v=DKIM1; k=rsa; p=…” 修正例 default._domainkey.example.co.jp IN TXT “v=DKIM1; k=rsa; p=…”
公開鍵のフォーマットエラー
公開鍵に不要なスペースや改行などが含まれ、正しくBase64エンコードされていない場合など、エラーとなり認証が失敗します。
失敗例 default._domainkey.example.com. IN TXT “v=DKIM1; k=rsa; p=MIIBIjA NBkg…” 修正例 default._domainkey.example.com. IN TXT “v=DKIM1; k=rsa; p=MIIBIjANBkg…”
タグ間のセミコロンが欠けている
タグの指定に必要なセミコロンが欠けていると、正しくレコードが認識されずエラーの要因となります。
失敗例 v=DKIM1; k=rsa p=MIIBIjANBgkqh…; 修正例 v=DKIM1; k=rsa; p=MIIBIjANBgkqh…;
タグの記載順序を誤っている
DKIMレコード内のタグを正しい順序で記述していないケースです。
失敗例 default._domainkey.example.com. IN TXT “k=rsa; v=DKIM1; p=MIIBIjANBgkqhki…” 修正例 default._domainkey.example.com. IN TXT “v=DKIM1; k=rsa; p=MIIBIjANBgkqhki…”
Keyレコードのバージョン番号を指定する場合は、v=タグをレコードの最初に記述しなければなりません。
使用するDNSサービスが公開鍵の長さに対応していない
一部のDNSサービスの仕様では、TXTレコードの長さが制限されているため2048ビットの公開鍵を登録できない場合があります。この場合、DKIMレコードの値を複数の文字列に分割して引用符(“ ”)で囲むことで登録できることがあります。
1. DKIMレコードの値(テキスト)を、255文字以下になるように分割する
2. 分割したテキストをそれぞれ引用符(“ ”)で囲む
3. DNSのTXTレコードの値フィールドに順番に入力する
ホスト名 レコードタイプ レコードの値 default._domainkey.example.com. TXT “v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFA”“AOCAQ8AMIIBCgKCAQEAr6Ax…”
ただし、この方法でも登録ができないDNSサービスもあるため、その場合は1024ビットの鍵を使用するか、他のDNSサービスの利用を検討してください。
まとめ
メールの信頼性を高めるDKIMを活用するには、DKIMレコードを正しく設定する必要があります。DKIMレコードの構造は複雑ではありませんが、ちょっとした設定ミスでも認証が失敗する要因となります。今回ご紹介した構成要素やよくある失敗例を参考に、正しくDKIMレコードを設定してみてください。
また、ベアメール メールリレーサービスのSMTP DKIMオプションを利用すると、自社システムにDKIM認証の仕組みを導入しなくても、ベアメール上で手軽にDKIM対応を実現できます。DKIMの設定・運用に不安を感じている場合は、ぜひ検討してみてください。