前回と
前前回MTA-STSを設定したので、今回はDANEを設定してみます。
ドメイン取得はDNSサーバを提供していて、最初からDNSSECが設定されているGoogle Domainsを使います(DNSSEC分からなくても、何もしなくて良いのは助かります)。
※提供しているDNSサーバによってはTLSAレコードを設定出来なかったりするので、他で取得する時は事前に確認が必要です。
※タイムリーな事にGoogle Domainsやめるってよ、な話が出てて、移行先でもDNSSECが最初から有効かは、分かりません。
TLS証明書は、前前回のLet’s Encryptを使い回します。いつものようにexample.comを使います。
TLSAレコード作成(danetool)
TLSAレコードの作成には、opensslを使ったやり方が幾つも見つかるのですが、
- 殆どがopenssl 0.9のやり方で書いてあって、違う値を出力していた(これは後で分かった)
- CertUsage, Selector, MatchingTypeによって書き方が何通りも有り、ミスに気を使う
といった点で(特に一番目の理由が最初分からず)一旦挫折したのですが、色々と調べた結果それを含めた面倒を見てくれるdanetoolが有ったのでそれで解決します。
dnf install gnutls-utils
danetool --tlsa-rr --host example.com --load-certificate /etc/letsencrypt/live/example.com/cert.pem --starttls-proto=smtp
_25._tcp.example.com. IN TLSA ( 03 01 01 [hash値]) のように出力がされるのでTLSAレコードには、
03 01 01 [hash値]を3 1 1 [hash値]に修正して入れます。
またstarttls-proto=httpsにすると、_25._tcpが_443._tcpにだけ変わりますが、他のオプションを変えなければhash値等は変わらないので、確認をする意味以外では出力する必要は有りません。
Google Domains
取得したドメインに、先ほど生成したTLSAレコードを設定します。DNS>カスタムレコードの管理で編集画面を出し、以下のように設定します。
- サブドメイン _25._tcp と、ついでにWeb用に_443._tcpも追加する
- TLSAを選択
- TTLは失敗を考慮して短めに設定
- 先ほど生成したTLSAレコード値を入力
最後に保存を押して、レコードが追加されるのを確認します。
ついでに下の方でDNSSECが有効になっているのを確認しておきます。
Postfix
サーバ側(smtpd)は前々回やったLet’s Encryptを使ったTLSの設定をしておけば、特に何もしなくてもVerifyは通ります。
SMTPクライアント (smtpd_でなくsmtp_) は試していないので、追加設定が必要になるかも知れません。
確認
確認もdanetoolで出来ます。
danetool --check example.com --proto tcp --starttls-proto=smtp --load-certificate /etc/letsencrypt/live/example.com/cert.pem
TLSAレコードが出力され、最後にVerification: Certificate matches.が出ればOKです。
Webについてもhttps接続が正常に出来ればOKになる筈です。
その他色々
Let’s Encrypt
短い間に更新をするLet’s Encryptでは、TLSAレコードで、3 0 1, 3 0 2のようにSelector=0(FullCertificate) を避けるように言っています。
また証明書の更新でpubkeyが変わり、TLSAレコードが無効になってしまうのに対して/etc/letsencrypt/cli.iniに reuse-key = true を入れる案が出ています。
Postfix
Postfixでは、CertUsageの01は不可、2はオプションで、3を推奨しているようです。
PostfixとLet’s Encryptの事情を考慮すると、TLSAには、3 1 1 を使うのが良いようです。
Openssl
TLSA作成用に書いてあるオプションがopenssl 0.9用になっていて通らなかった件ですが、Webで幾ら探しても分からず、postfixのパッケージに含まれていたTLS_READMEに書いてあったのを偶然見つけて漸く分かりました。
そんなわけでopensslでTLSAが 3 1 1の場合、以下のようにすればdanetoolと同じhash値を出しました。
openssl x509 -in /etc/letsencrypt/live/example.com/cert.pem -pubkey -noout | openssl pkey -pubin -outform der | sha256sum
Selector=0の場合はまた違いますので、注意が必要です。
この投稿は 2023年6月16日 金曜日 11:55 に 未分類 カテゴリーに公開されました。 この投稿へのコメントは RSS 2.0 フィードで購読することができます。
このページの一番下でコメントを残すことができます。トラックバック / ピンバックは現在受け付けていません。