PMailServer2にDKIM署名を設定

はじめに

PMailServer2の機能にメール送信時のメールヘッダーに電子署名(DKIM署名)を施す機能が実装されておりこれを有効にしてみた。
設定に伴い,秘密鍵と公開鍵が必要となる。
OpenSSLで秘密鍵を発行できるが,Apacheの秘密鍵が既にあるのでそれを利用してみる。
Apacheの秘密鍵は,以前の記事にも書いたがインストールフォルダーの「\md\domains\ドメイン名」に「privkey.pem」のファイル名で保存されている。
このファイルはPMailServer2では扱えない形式(PKCS#8)のためPKCS#1に変換後,公開鍵を発行する。

PKCS#1に変換

コマンドプロンプトを立ち上げてApacheの証明書フォルダーに移動後,Apacheの秘密鍵をOpenSSLコマンドでPKCS#1に変換する。

cd /D "D:\Program Files\Apache24\md\domains\ドメイン名"

openssl pkey -in privkey.pem -traditional > privkey_PKCS#1.pem

Apacheの証明書フォルダー「\md\domains\ドメイン名」に「privkey_PKCS#1.pem」の秘密鍵が作成される。

公開鍵の発行

上記の秘密鍵「privkey_PKCS#1.pem」から公開鍵「public_PKCS#1.pem」を発行する。

openssl rsa -in privkey_PKCS#1.pem -out public_PKCS#1.pem -pubout -traditional

Apacheの証明書フォルダー「\md\domains\ドメイン名」に「public_PKCS#1.pem」の公開鍵が作成される。

公開鍵の編集

上記で作成された公開鍵「public_PKCS#1.pem」をメモ帳等のエディタで開いて不要箇所を削除する。
削除箇所
・先頭行「—–BEGIN PUBLIC KEY—–」と最終行「——END PUBLIC KEY—–」を削除
・改行を削除して1行で保存する。

上記の9行を下記のように1行に編集する。
(登録するDNSサーバー仕様で255文字/1行のケースあり)

DNSサーバーへ公開鍵登録

DNSサーバーへ登録する際にセレクタという任意の文字列を指定する。
このセレクタは,複数のDKIM設定時に秘密鍵と公開鍵を紐づける目的で使用される。
セレクタを含めたFQDNは「セレクタ._domainkey.ドメイン名」で表す。
下記はセレクタを「default」とした時の設定例でセレクタに続けて「_domainkey」とドメイン名を記載する。
完全修飾ドメイン名(FQDN)「default._domainkey.na-3.com」
エイリアス名「default._domainkey」

Mydnsの設定例

Hostname : default._domainkey
Type : TXT
Content : v=DKIM1;k=rsa;p=MIIBI........... 公開鍵.............

バッチファイルで作成

あまり必要性は無いかもしれないが,2ステップ分を自働作成できるバッチファイルを作ってみた。構成が同じ複数のサーバー運用をしている分には多少時間節約になる。ただし公開鍵の編集は必要。

rem  Apacheサーバー証明書を変換してスDKIM署名用証明書作成    dkimcreate.bat

cd /D "D:\Program Files\Apache24\md\domains\ドメイン名"

rem Apacheの秘密鍵(PKCS#8)をPKCS#1に変換
openssl pkey -in privkey.pem -traditional > privkey_PKCS#1.pem

timeout /t 5 /nobreak

rem 秘密鍵から公開鍵を発行
openssl rsa -in privkey_PKCS#1.pem -out public_PKCS#1.pem -pubout -traditional

timeout /t 5 /nobreak

作成されるファイル
秘密鍵 privkey_PKCS#1.pem
公開鍵 public_PKCS#1.pem   編集必要

PMailServer2の設定

基本設定

DKIM署名を行う・正規化(simple/simple)・署名アルゴリズム(rsa-sha256)・追加処理(ピリオドエスケープ)・署名Body長(0)・署名に含めるヘッダ(from,to,subject,date)・追加ヘッダ(タイムスタンプを付与)

ドメイン別設定

ドメイン設定 ドメイン名(hoge.com)・セレクタ(任意の文字列 例:default)・プライベートキー(pem)へのフルパス(D:\Program Files\Apache24\md\domains\ドメイン名\privkey_PKCS#1.pem)

署名テスト

考察

googleのDKIMチェックは管理コンソールから有効にしないとワーニングが消えないようだが,gmailには届くので様子見とする。

参考

  • DKIM Record Checker(DKIMレコードの登録・パラメーター確認)
  • DKIMCore(DKIMレコードの登録・有効性確認)