Postfix(RHEL6のバージョン2.6.6)を使用して、内部ネットワークのメールリレーに接続し、メールリレーでメールを送信しようとしています。ポート25でSTARTTLSに接続したい(このサーバーではポート465は使用できません)。メールリレーは自己署名SSL/TLS証明書を使用するため、認証局を使用した証明書の検証をスキップする必要がありました。トラストチェーンや有効期限などをチェックしない smtp_tls_security_level = fingerprint
を発見しました。代わりに、証明書のフィンガープリントを使用して確認します。
これは完璧な解決策だと思ったのですが、メールを送信しようとすると、/var/log/maillog
にpostfix/smtp[15182]: certificate verification failed for xxxxxxxxxxxx[zz.zz.zz.zz]:25: untrusted issuer
というエラーが表示されます。
fingerprint
セキュリティレベルの要点は、証明書の検証をスキップすることだと思いました。このオプションのポイントを誤解していますか?他に設定する必要があるものはありますか?
main.cf
の関連する行を次に示します。
relayhost = [xxx.xxx.xxx]
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl-passwords
smtp_sasl_security_options=
smtp_generic_maps = hash:/etc/postfix/generic
smtp_use_tls = yes
smtp_tls_security_level = fingerprint
smtp_tls_fingerprint_digest = sha1
# fingerprint changed for ServerFault. just an example.
smtp_tls_fingerprint_cert_match = c1:d3:54:12:00:r0:ef:fa:42:48:10:ff:ac:1e:75:13:dd:ad:af:3e
smtp_tls_note_starttls_offer = yes
編集:太字を追加
ここで私自身の質問に答えます。 fingerprint
検証を正常に機能させることができませんでしたが、証明書検証なしでTLSを取得する方法を発見しました。 manual から:
必須のTLS暗号化は、「smtp_tls_security_level = encrypt」を設定することで構成できます。 TLS暗号化は常に使用されますが、サーバー証明書が信頼されていないか、間違った名前が付けられていても、メール配信は続行されます。
私はある時点でこれを試しましたが、すべての正しいオプションを有効にしていたはずはありません。しかし、上記の設定を使用して、私はsmtp_tls_security_level
からencrypt
まで。正常に動作します。
Postfixはchroot(デフォルトではDebian) "/etc/postfix/master.cf"を有効にしているので:
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtp unix - - - - - smtp
変数のデフォルト値smtp_tls_CAfileは空であり、証明書ファイルの場所を内部に設定するためのソリューションパスde chroot:
「/etc/postfix/main.cf」で:
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt