web-dev-qa-db-ja.com

Postfix SMTPクライアントがtls_append_default_CAでシステム全体のCA証明書を検証しない

Debian Wheezyを実行しているインターネットに接続しているPostfix SMTPサーバーで、いくつかの既知のサーバーとの安全な接続を確立したいと思います。いくつかは私自身のものであり、私自身のPKI/CAを実行しています。いくつかはGoogleのGmailサーバーのようなパブリックSMTPサーバーです。自分で実行しているサーバーの証明書を確認するために、

smtp_tls_CAfile = /usr/local/share/ca-certificates/Gert_van_Dijk_Root_CA_2014.crt

公開サーバーも組み込みのシステム証明書ストアに対して検証できることを確認するために、明示的に指定しました

tls_append_default_CA = yes

Postfixが証明書を適切に検証することを確認するために、グローバルなTLSセキュリティレベルを「セキュア」に設定しました。ここで説明されているこの問題のデバッグが完了したら、smtp_tls_policy_mapsの一部のドメインでsecureに「may」に戻します。

smtp_tls_security_level = secure

それは私の自身のサーバーをうまく検証します!これらはすべて、Gert_van_Dijk_Root_CA_2014.crtによって署名された証明書で実行されています。ただし、GoogleのSMTPサーバーにメールを配信しようとしたときに、SMTPクライアントが実際にtls_append_default_CA設定によって証明書を追加していないようです。 Debianの/etc/ssl/certsからのものを追加すると期待します。

postfix/smtp[32271]: effective TLS level: secure
[...]
postfix/smtp[32271]: < alt1.gmail-smtp-in.l.google.com[64.233.164.26]:25: 220 2.0.0 Ready to start TLS
[...]
postfix/smtp[32271]: DE6D0403EB: Server certificate not verified

これが私が試したものです:

  • 次のように、smtpクライアントのmaster.cfでchrootを無効にします。

    smtp      unix  -       -       n      -       -       smtp
    

    助けにはならなかった。

  • 詳細なログを追加します。上記の行に-vを追加しました。 rsyslogレート制限を無効にする必要がありましたが、何も改善されませんでした。 TLS検証について言及している1行はDE6D0403EB: Server certificate not verified行です。

  • プロセスを追跡して、CA証明書へのアクセスに問題が発生していないか確認します。 SMTPクライアントは、配信の試行ごとに新しいプロセスとして生成されるようです。これは一般的なstrace -p <PID>を不可能にします。

  • 同様の問題を検索します。私は これと非常によく似た問題 を見つけるだけのようですが、それはsmtp_tls_CAfile設定を指定しているのではなくではありませんsmtp_tls_CAfileを設定すると、システム全体のCA証明書が実際にappendされるはずです。

  • smtp_tls_security_level = secureを除いて、すべてDebianのデフォルトに戻します。同じエラーでGoogleへの配信も失敗します。 DebianのPostfixのバグは?

  • 上記と同様に、SMTPクライアントのchrootを無効にしてから、smtp_tls_CApath = /etc/ssl/certsを明示的に設定します。それでも証明書の検証に失敗します。

  • TLSデバッグレベルを追加します。ショー:

    postfix/tlsmgr[17486]: write smtp TLS cache entry smtp:64.233.164.26:25:mx.google.com&p=1&c=aNULL:-aNULL:ALL:!EXPORT:!LOW:+RC4:@STRENGTH:!aNULL&l=268439647: time=1421622891 [data 1975 bytes]
    postfix/smtp[17485]: alt1.gmail-smtp-in.l.google.com[64.233.164.26]:25: subject_CN=mx.google.com, issuer_CN=Google Internet Authority G2, fingerprint 88:C0:85:C8:CB:96:29:8F:4E:15:11:80:C5:9A:89:0D, pkey_fingerprint=E0:32:29:21:69:38:EA:F9:B6:0C:F6:BD:86:12:16:B9
    postfix/smtp[17485]: Untrusted TLS connection established to alt1.gmail-smtp-in.l.google.com[64.233.164.26]:25: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
    postfix/smtp[17485]: DE6D0403EB: Server certificate not trusted
    
  • 同じシステムでのOpenSSLによる手動検証では、すべてが本当に問題ないはずです。

    $ openssl s_client -connect 64.233.164.26:25 -starttls smtp
    CONNECTED(00000003)
    depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
    verify error:num=20:unable to get local issuer certificate
    verify return:0
    
  • Tlsmgrのchrootも無効にして、最終的にTrusted TLS connection establishedを取得しましたが、Postfixはまだ接続が安全でないと考えています(Server certificate not verified):

    postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: certificate verification depth=3 verify=1 subject=/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
    postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: certificate verification depth=2 verify=1 subject=/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
    postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: certificate verification depth=1 verify=1 subject=/C=US/O=Google Inc/CN=Google Internet Authority G2
    postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: certificate verification depth=0 verify=1 subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=mx.google.com
    postfix/smtp[27198]: SSL_connect:SSLv3 read server certificate A
    postfix/smtp[27198]: SSL_connect:SSLv3 read server key exchange A
    postfix/smtp[27198]: SSL_connect:SSLv3 read server done A
    postfix/smtp[27198]: SSL_connect:SSLv3 write client key exchange A
    postfix/smtp[27198]: SSL_connect:SSLv3 write change cipher spec A
    postfix/smtp[27198]: SSL_connect:SSLv3 write finished A
    postfix/smtp[27198]: SSL_connect:SSLv3 flush data
    postfix/smtp[27198]: SSL_connect:SSLv3 read server session ticket A
    postfix/smtp[27198]: SSL_connect:SSLv3 read finished A
    postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: aspmx.l.google.com
    postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: alt1.aspmx.l.google.com
    postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: alt2.aspmx.l.google.com
    postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: alt3.aspmx.l.google.com
    postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: alt4.aspmx.l.google.com
    postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: gmail-smtp-in.l.google.com
    postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: alt1.gmail-smtp-in.l.google.com
    postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: alt2.gmail-smtp-in.l.google.com
    postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: alt3.gmail-smtp-in.l.google.com
    postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: alt4.gmail-smtp-in.l.google.com
    postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: gmr-smtp-in.l.google.com
    postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: alt1.gmr-smtp-in.l.google.com
    postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: alt2.gmr-smtp-in.l.google.com
    postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: alt3.gmr-smtp-in.l.google.com
    postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: alt4.gmr-smtp-in.l.google.com
    postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: mx.google.com
    postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: aspmx2.googlemail.com
    postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: aspmx3.googlemail.com
    postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: aspmx4.googlemail.com
    postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subjectAltName: aspmx5.googlemail.com
    postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25 CommonName mx.google.com
    postfix/smtp[27198]: gmail-smtp-in.l.google.com[173.194.67.26]:25: subject_CN=aspmx.l.google.com, issuer_CN=Google Internet Authority G2, fingerprint 88:C0:85:C8:CB:96:29:8F:4E:15:11:80:C5:9A:89:0D, pkey_fingerprint=E0:32:29:21:69:38:EA:F9:B6:0C:F6:BD:86:12:16:B9
    postfix/smtp[27198]: Trusted TLS connection established to gmail-smtp-in.l.google.com[173.194.67.26]:25: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
    postfix/smtp[27198]: DE6D0403EB: Server certificate not verified
    

フォアグラウンドで実行されているPostfixでSMTPclientをデバッグする方法はありますか?すべてのデバッグは、smtpdプロセスに関連しているようです。 :-(

関連する追加構成:

# postconf -n | grep -E "^(smtp_|tls_)"
smtp_tls_CAfile = /usr/local/share/ca-certificates/Gert_van_Dijk_Root_CA_2014.crt
smtp_tls_security_level = secure
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
tls_append_default_CA = yes

# /etc/postfix/master.cf:
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
smtp      unix  -       -       n       -       -       smtp -v
6
gertvdijk

smtp_tls_security_level = secureおよびsmtp_tls_secure_cert_matchのデフォルト値(smtp_tls_secure_cert_match = nexthop、dot-nexthop)を使用すると、postfixはMXレコードからの結果を信頼しません。言い換えると、postfixはトランスポートテーブルのような内部テーブルから取得したネクストホップを使用します。

それがPostfixがまだサーバー証明書が検証されていないと述べている理由です。 Postfixドキュメント は、

検証済み(信頼できるCAによって署名されたピア証明書と検証済みのピア名、または:予期される公開鍵または証明書のフィンガープリントを持つピア証明書)

Postfix SMTPクライアント:リモートSMTPサーバーの証明書は、Postfix SMTPクライアントが信頼するCAによって署名されており、証明書名は宛先またはサーバー名と一致します( s)。 Postfix SMTPクライアントは検証された名前を要求するように設定されました、そうでなければ検証ステータスは単に「信頼された」でしょう。

smtp_tls_security_levelverifiedに減らすことで、postfixがMXレコードの結果を信頼し、それを使用して検証プロセスを行うことができます。別の方法は postfix documentation で説明されています。

  • Transport(5)テーブルオーバーライドのないセキュアチャネルTLS

    Postfixはsmtp_tls_policy_mapsを使用して検証プロセスを実行します。

  • Transport(5)テーブルでのセキュアチャネルTLSのオーバーライド:

    この場合、example.comおよびその関連ドメインへのトラフィックは単一の論理ゲートウェイに送信されます(単一障害点を回避するために、その名前は1つ以上のロードバランサーアドレス、または複数の物理ホストの結合アドレスに解決される場合があります)。ゲートウェイのIPアドレスを介して到達可能なすべての物理ホストは、証明書にリストされている論理ゲートウェイ名を持っています。

5
masegaloeh