DKIMは送信ドメイン認証の一つで、メールに電子署名を付与することで、改ざんされていないことを検証する技術です。メールの信頼性を担保するために重要な仕組みですが、「正しく設定したはずなのにfailになる」といったケースに直面することもあるでしょう。本記事では、DKIMの基本的な仕組みから認証結果の見方、認証に失敗する主な原因と確認ポイントまで詳しく解説します。
DKIMは「DomainKeys Identified Mail」の略称で、電子メールにおける送信ドメイン認証技術の一つです。メールに電子署名を付与し、送信途中で内容が改ざんされていないかを検証します。
DKIMの概要や導入方法については、以下の記事で詳しく解説しています。
DKIMとは? 仕組みから導入方法までわかる入門ガイド|ベアメールブログ
DKIMでは、送信側がメールに電子署名を付与し、受信側が署名を検証することで認証が行われます。具体的な流れは、以下の通りです。
DKIMを設定していても、正しく認証されるとは限りません。まずはメールヘッダを確認し、DKIM認証の結果を把握することが重要です。本章では、認証結果の確認方法と、その種類や意味について解説します。
DKIMの認証結果は、メールヘッダから確認できます。
例えばGmailでは、メールを開いて右上のメニューから「メッセージのソースを表示」をクリックすると、「PASS」「FAIL」などの認証結果の概要が表示されます。
より詳細な情報を確認したい場合は、メールヘッダ内の「Authentication-Results」を確認します。「dkim=******」となっている箇所が認証結果を示しています。ブラウザの機能で「dkim」と検索すると、該当箇所を見つけやすくなります。
メールヘッダの内容や確認方法については、以下の記事で詳しく解説しています。
メールヘッダの解析方法とは? 各項目の見方とツール活用法を徹底解説|ベアメールブログ
メールヘッダのAuthentication-Resultsで表示されるDKIMの認証結果は、以下の通りです。
| 認証結果 | 意味 | 考えられる要因 |
|---|---|---|
| Pass | 認証に合格した | – |
| None | DKIM署名がない | DKIMを導入していない、DKIM-Signatureが付与されていない |
| Fail | 署名の検証に失敗した | メール本文やヘッダが配送途中で変更された、公開鍵と秘密鍵が一致していないなどの可能性 |
| Neutral | DKIM署名は存在するが、認証結果を判定できなかった | 署名の形式に問題がある、または検証に必要な情報が不足している可能性 |
| Temperror | DKIM認証において一時的なエラーが発生した | 何らかの理由でDNSから公開鍵を入手できなかったなど、一時的と考えられる不具合 |
| Permerror | DKIM認証において永続的なエラーが発生した | 認証に必要なDKIM-Signatureのフィールドが欠落しているなど、永続的な不具合 |
| Policy(※一部の受信環境で表示される可能性がある) | DKIM署名は存在するが、受信側のローカルポリシーにより無効と判断された | 受信側のローカルポリシー(鍵長の制限など)によって検証が拒否された |
なお、認証結果は検証を行う受信メールサーバーのポリシーによって異なる場合があり、ある受信サーバーでは「Fail」と判定されたメールが、別の受信サーバーでは「Neutral」として扱われるといったケースもあります。
Authentication-ResultsのDKIM認証結果の後には、()やreason=の形式で補足情報が付与されることがあります。認証に失敗した場合は、これらの情報から原因の手がかりを把握することができます。
主なメッセージの例は以下の通りです。
| メッセージ | 意味 |
|---|---|
| dkim=fail(signature did not verify) | 署名の検証に失敗した |
| dkim=fail(body hash did not verify) | ボディハッシュが一致しない(本文が改変されている可能性) |
| dkim=neutral(bad version) | DNSのバージョン(v=タグ)が不正 |
| dkim=temperror(dns unavailable) | DNSに接続できない |
| dkim=temperror(key query timeout) | 公開鍵の取得時にDNSクエリがタイムアウトした |
| dkim=permerror(no key for signature) | DNSに公開鍵が存在しない |
| dkim=permerror(invalid public key) | 公開鍵の形式が不正 |
| dkim=permerror(bad key) | 公開鍵の内容が不正 |
| dkim=permerror(0-bit key) | 公開鍵の鍵長が0など異常な値 |
| dkim=permerror(key too long) | 公開鍵データが長すぎる |
| dkim=permerror(signature syntax error) | 署名の構文に誤りがある |
| dkim=permerror(signing time is in the future) | 署名時刻(t=タグ)が未来 |
DKIMがfailになる場合は、原因を特定して適切に対処する必要があります。認証エラーが続くと、受信側で迷惑メールと判定されたり、拒否されたりする可能性があります。
本章では、DKIM認証に失敗する主な原因を解説します。
メールヘッダの認証結果に「dkim=none」と表示されている場合、そのメールにはDKIM署名が付与されていないか、検証対象の署名が存在しないことを意味します。主な原因は、送信側でDKIM署名が有効になっていないことです。
よくある原因
DKIMレコードの設定に不備があると、受信側サーバーが公開鍵を正しく取得できず、認証エラーとなります。
よくある設定ミス
送信側で使用している秘密鍵と、DNSに公開されている公開鍵が一致しない場合、署名の検証結果が不一致となり、認証に失敗します。秘密鍵や公開鍵の一部が欠落していたり、設定に誤りがあったりするケースが考えられます。
よくある原因
DNSサーバーに接続できない、または応答が得られない場合、DKIM認証に必要な公開鍵を受信側が取得することができず、認証ができません。このケースでは、認証結果は「dkim=temperror」などとして表示されます。DNSサーバーのメンテナンスや障害、外部からの攻撃など、さまざまな原因が考えられます。
メール配送途中に内容が変更されると、受信側でDKIM署名の検証に失敗します。この場合、メールヘッダのDKIM認証結果に「body hash did not verify」などと表示されます。
よくある原因
DKIM認証に失敗した場合は、設定や配信環境に問題がないかを確認し、適切に対処することが重要です。本章では、押さえておきたい主な確認ポイントを解説します。
まず、メールにDKIM署名が正しく付与されているかを確認します。メールヘッダの認証結果が「dkim=none」となっている場合、署名自体が付与されていない可能性があります。
送信メールサーバーやメール配信サービスでDKIMが有効化されているか、サブドメインを含め設定漏れがないかを確認しましょう。複数の送信経路を利用している場合は、それぞれの経路でDKIMが有効になっているかを確認することも重要です。
DNSに登録したDKIMレコード(公開鍵)が正しく取得できるかを確認します。MX toolboxのDKIM Record Lookup(https://mxtoolbox.com/dkim.aspx)などのツールを利用すると確認できます。レコードのFQDNやタグの記述に誤りがないか、公開鍵(p=)が正しく設定されているかをチェックしましょう。
また、2048ビットのDKIM鍵を使用している場合は、TXTレコードの文字数制限(1つの文字列あたり255文字)により値を分割して登録する必要があります。分割時は、各文字列を引用符(””)で囲み、順番に連結して設定します。
DKIMレコードの書き方については、以下の記事で詳しく解説しています。
DKIMレコードの書き方は? 設定・確認方法や失敗例も解説|ベアメールブログ
送信側で使用している秘密鍵と、DNSに公開されている公開鍵が一致しているかを確認します。一致しない場合、認証結果は「dkim=fail」となります。
鍵を変更した際に秘密鍵と公開鍵のいずれかのみが更新されていないケースや、セレクタの設定が一致していないケースがないかを確認しましょう。複数の送信サーバーを利用している場合は、すべてのサーバーで同じ鍵が使用されているかを確認することも重要です。
DKIM-Signatureヘッダの内容に誤りがないかを確認します。署名が付与されていても、フォーマットや値に不備があると検証エラーの原因になります。送信メールサーバーで署名を行うDKIMソフトウェア(OpenDKIMなど)の設定や動作状況を確認しましょう。
確認すべきポイントは以下の通りです。
DKIM-Signatureには、主に以下のタグが含まれます。これらの値に誤りがないか確認しましょう。
| タグ | 値の例 | 説明 |
|---|---|---|
| v= | 1 | DKIMのバージョン |
| d= | sample.com | 署名に使用するドメイン名 |
| a= | rsa-sha256 | 署名アルゴリズム |
| s= | selector | DKIMセレクタ名 |
| h= | From:To:Subject:Date: | 署名対象のヘッダ |
| b= | ausD31EomLFAwdDvBK2O… | 電子署名データ(Base64) |
| bh= | 3a98jY=;BKusD3oAMdDvM… | 本文のハッシュ値(Base64) |
メールヘッダのDKIM認証結果に「body hash did not verify」と表示されている場合、配送途中で本文やヘッダが変更されている可能性があります。
中継サーバーやセキュリティ製品、スパムフィルターなどによってメールが書き換えられていないかを確認しましょう。メールヘッダをチェックすることで、どの時点で変更が発生しているかを特定できます。
DNSサーバーに接続できない、または応答が得られない場合、公開鍵を取得できず、DKIM認証は一時的に失敗(temperror)となります。
DNSサーバーの障害やメンテナンスの影響が出ていないかを確認し、必要に応じて冗長化や信頼性の高いDNSサービスの利用を検討しましょう。
ベアメールの「迷惑メールスコアリング」では、テストメールを送信するだけで、DKIMをはじめSPF・DMARCの認証結果を確認できます。
さらに、送信元IPアドレスの評価、ブラックリストの登録状況、メール本文の内容、キャリアごとの到達度なども総合的に分析し、迷惑メールと判定されるリスクを可視化することが可能です。
メールの認証状況や配信環境の状態をひと目で確認できるため、認証エラーの原因特定や改善ポイントの把握に役立ちます。
「DKIM認証がエラーになる原因を知りたい」「メールの配信状況を確認したい」といった場合は、ぜひお気軽にご相談ください。
DKIMがfailになる原因は、署名の未付与やDNS設定ミス、鍵の不一致、配信途中の改変などさまざまです。認証エラーが発生した場合は、本記事で紹介した確認ポイントを参考に、設定や配信環境を見直してみてください。