エラーメッセージ
dkim=permerror
別の表記
- dkim=neutral (signature syntax error)
OpenDKIM は、理由を付けずに `dkim=permerror` だけを記録します(`bh=` のない署名、`v=2`、不明な `a=`、`d=` の外にある `i=` で再現)。mailauth は構文の問題を `dkim=neutral` として報告し、問題を示すコメントを付けます。問題を特定できない場合は「signature syntax error」となります。
このエラーの意味
DKIM 署名をまったく評価できず、再試行しても解決しません。`DKIM-Signature` ヘッダーの構文が壊れているか、RFC 6376 の規則に違反している(`bh=` や `b=` などの必須タグがない、不明なバージョン、サポートされていないアルゴリズム、`d=` のドメインの外にある `i=` の識別子、署名対象のヘッダーに `From` が含まれていない)か、公開鍵のレコードが使用できない状態です。RFC 8601 はこれを恒久的なエラー(permanent error)と呼んでいます。DMARC では pass として扱われません。
発生する理由
形式が不正な、または途中で切れた DKIM-Signature
よくあるタグを省略する自作の署名コード、長いヘッダーを誤って折り返したり切り詰めたりする中継サーバー、または署名ヘッダーを再エンコードして壊してしまうメールクライアントが原因です。
検証者がサポートしていないアルゴリズム
ときどき`a=rsa-sha1`(RFC 8301 で非推奨)、または古い受信側での `ed25519-sha256` が該当します。RSA-SHA256 と Ed25519 の両方で署名すれば、すべての受信側に対応できます。
署名ドメインの外にある i=
ときどきエージェント識別子 `i=` は、`d=` のドメインかそのサブドメインに属していなければなりません。`d=example.com; i=@example.org` は無効です。
From ヘッダーが署名されていない
ときどきRFC 6376 では、`h=` に `From` を含めることが必須です。独自のヘッダーリストを設定した署名者がこれを除外すると、受信側が拒否する署名が生成されます。
修正方法
- 1.
署名のタグを一覧表示する
ヘッダーの折り返しを解除し、必須タグとその値を確認してください。DKIM デバッガーはこの作業を行い、問題のあるタグを示します。
bash # Show the DKIM-Signature as one line and list its tags awk '/^DKIM-Signature:/{p=1} p&&/^[^ \t]/&&!/^DKIM-Signature:/{p=0} p' message.eml | tr -d '\r\n\t' | tr ';' '\n' # required: v=1 a= b= bh= d= h= (containing "from") s= - 2.
標準的な署名設定を使う
RSA-SHA256(必要に応じて Ed25519 も併用)、`From` の署名(およびオーバーサイン)、そして自作のコードではなくメンテナンスされている署名実装です。
text # OpenDKIM signer: standard algorithm, From always signed SignatureAlgorithm rsa-sha256 OversignHeaders From Canonicalization relaxed/simple
関連するエラー
dkim=fail reason="signature verification failed"OpenDKIM (Authentication-Results header added by the opendkim milter); mailauth reports the same as "bad signature"dkim=fail reason="key not found in DNS"OpenDKIM (Authentication-Results); mailauth reports it as dkim=neutral (no key)dkim=fail (body hash did not verify)DKIM verifiers (Gmail, mailauth, Rspamd…)