mail.btcontract.com
用に発行されたComodo PositiveSSL証明書を持っています。PostfixとDovecotが次の方法で動作するように設定しました。
Postfix main.cf:
smtpd_tls_cert_file = /etc/ssl/mail/mail_btcontract_com.crt
smtpd_tls_key_file = /etc/ssl/mail/mail_btcontract_com.key
smtpd_tls_CAfile = /etc/ssl/mail/AddTrustExternalCARoot.crt
smtp_tls_CAfile = /etc/ssl/mail/AddTrustExternalCARoot.crt
dovecot.conf:
ssl_cert =< /etc/ssl/mail/mail_btcontract_com.pem
ssl_key =< /etc/ssl/mail/mail_btcontract_com.key
このチュートリアルに従って、pem
からcrt
を生成しました: http://blog.wong42.com/2011/05/converting-a-ssl-certificate-from- crt-format-to-pem /
問題は、Thunderbirdメールクライアントからサーバーに接続しようとすると、次のエラーが表示されることです。
同時に/var/log/mail.log
でこれが表示されます:
Nov 16 12:15:57 BTContractTest postfix/smtpd[22870]: connect from 51-28-134-95.pool.ukrtel.net[95.134.28.51]
Nov 16 12:15:58 BTContractTest postfix/smtpd[22870]: Anonymous TLS connection established from 51-28-134-95.pool.ukrtel.net[95.134.28.51]: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
Nov 16 12:15:58 BTContractTest postfix/smtpd[22870]: warning: TLS library problem: 22870:error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca:s3_pkt.c:1258:SSL alert number 48:
Nov 16 12:15:58 BTContractTest postfix/smtpd[22870]: lost connection after STARTTLS from 51-28-134-95.pool.ukrtel.net[95.134.28.51]
openssl s_client -connect mail.btcontract.com:143 -starttls imap
を試してみると、最初にこれが表示されます。
CONNECTED(00000003)
depth=0 OU = Domain Control Validated, OU = PositiveSSL, CN = mail.btcontract.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 OU = Domain Control Validated, OU = PositiveSSL, CN = mail.btcontract.com
verify error:num=27:certificate not trusted
verify return:1
depth=0 OU = Domain Control Validated, OU = PositiveSSL, CN = mail.btcontract.com
verify error:num=21:unable to verify the first certificate
verify return:1
何が起こっているのですか、これをすべて修正するにはどうすればよいですか?
また、これらは認証局から取得したすべてのファイルです。
中間証明書をどこでも使用していませんが、それが問題の原因になるのでしょうか?
[〜#〜]更新[〜#〜]
Thomas Porninのアドバイスに従って、次のことを行いました。
cat mail_btcontract_com.crt COMODORSAAddTrustCA.crt COMODORSADomainValidationSecureServerCA.crt > full.crt
そしてPostfix main.cfで:
smtpd_tls_cert_file = /etc/ssl/mail/full.crt
smtpd_tls_key_file = /etc/ssl/mail/mail_btcontract_com.key
smtpd_tls_CAfile = /etc/ssl/mail/AddTrustExternalCARoot.crt
smtp_tls_CAfile = /etc/ssl/mail/AddTrustExternalCARoot.crt
dovecot.conf:
ssl_cert =< /etc/ssl/mail/full.crt
そして今、私は別のエラーを得ています:
Nov 16 13:28:09 BTContractTest postfix/smtpd[23921]: warning: cannot get RSA private key from file /etc/ssl/mail/mail_btcontract_com.key: disabling TLS support
Nov 16 13:28:09 BTContractTest postfix/smtpd[23921]: warning: TLS library problem: 23921:error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch:x509_cmp.c:330:
私は連結された証明書の場所を切り替えてみました、またこのようにルートCAを含めることを試みました:
cat AddTrustExternalCARoot.crt mail_btcontract_com.crt COMODORSAAddTrustCA.crt COMODORSADomainValidationSecureServerCA.crt > full.crt
しかし、今のところ運はありません。
SSL/TLSでは、サーバーは証明書を送信するだけでなく、ルートからサーバーの証明書までの完全なチェーンを送信することになっています(ルート自体は省略できますが、中間CAを送信する必要があります)。サーバーが完全なチェーンを送信しない場合、それを完了することを試みるのはクライアント次第です。不足している証明書をダウンロードすることにより、SSL/TLSクライアントがその点で何らかの努力をすることは必須ではありません。クライアントは、不完全なチェーンをすぐに拒否する場合があります。
smtpd_tls_cert_file
オプションは、チェーンを含むファイルを指す必要があります。つまり、PEM形式のすべての証明書がチェーン順で連結されます(サーバーの証明書から開始)。 ドキュメント を参照してください。 PEM形式は、証明書がBase64でエンコードされ、明示的な-----BEGIN CERTIFICATE-----
ヘッダー。バイナリ形式の証明書がある場合は、次のようにしてPEMに変換できます。
openssl x509 -inform DER -in cert.crt -out cert.pem
まず、テキストエディター(または単純なmore
コマンド)で開き、証明書がバイナリであるか、PEMで既に存在するかを確認する必要があります。次に、Postfixのドキュメントで説明されているように、PEM証明書を単一のテキストファイルに連結します。
UbuntuのPostfixとDovecotで非常によく似た問題がありました。私はComodoから基本的なSSL証明書を購入しましたが、サーバーの種類として「その他」を選択したため、上記の投稿のとおり、4つの証明書ファイルが含まれたZipファイルができました。
クライアントでセキュリティ例外が発生していませんでした。私の場合、Thunderbirdで正しいポートを選択しているにもかかわらず、Thunderbirdでのアカウントのセットアップとサーバーの検出をすり抜けることができませんでした。サーバーのシステムログで、上記のように不明なCAに関するSSL接続中止エラーが発生しました。
テキストエディターを使用して4つの証明書すべてを1つのファイルに連結することで、これを正常に修正しました。最初に自分の証明書、次に2つの中間証明書、最後に最後のCA証明書を使用します。次に、PostfixとDovecotの両方の設定をこの結合されたファイルにポイントすると、Thunderbirdが接続でき、電子メールを送受信できました。
キーがパスフレーズで保護されていないことを確認してください。 Postfixはパスフレーズで保護されたキーをサポートしていませんが、opensslコマンドを使用してキーからパスフレーズを削除できます
openssl rsa -in passphrase.key -out nopassphrase.key
cAバンドルにCAルートが含まれていない場合は、ルートCAを含める必要はありません。追加できます。
cat /etc/ssl/mail/AddTrustExternalCARoot.crt >> /etc/ssl/certs/ca-bundle.crt
そして、この行を変更します:
smtpd_tls_CAfile = /etc/ssl/mail/AddTrustExternalCARoot.crt
これのために
smtpd_tls_CAfile = /etc/ssl/certs/ca-bundle.crt