web-dev-qa-db-ja.com

証明書のCNとSNIによるSMTPの問題?

複数のクライアントの複数のドメインでSMTP用の共有メールサーバー(cPanel)を使用しているシナリオがあります。 RubyのOpenSSLライブラリがhostname "smtp.domain2.tld" does not match the server certificateと文句を言う問題が発生しました。

この場合、問題は、証明書のメインCNが「domain2.tld」であり、「mail.domain2.tld」が受け入れられたDNS SANであるのに、メインCNではなく、SNIが要求されない場合は失敗することだと思います。 .。。

例:「servername」ディレクティブなしでopensslに接続した場合、返される証明書はサーバー自体のものです。server.main-domain.tld:

$ openssl s_client -connect mail.domain2.tld:587 -starttls smtp -showcerts | grep CN=

depth=2 C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = COMODO RSA Certification Authority
verify error:num=20:unable to get local issuer certificate
verify return:0
250 HELP
0 s:/OU=Domain Control Validated/OU=PositiveSSL/CN=server.main-domain.tld
i:/C=US/ST=TX/L=Houston/O=cPanel, Inc./CN=cPanel, Inc. Certification Authority
1 s:/C=US/ST=TX/L=Houston/O=cPanel, Inc./CN=cPanel, Inc. Certification Authority
i:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority
2 s:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority
i:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
subject=/OU=Domain Control Validated/OU=PositiveSSL/CN=server.main-domain.tld
issuer=/C=US/ST=TX/L=Houston/O=cPanel, Inc./CN=cPanel, Inc. Certification Authority

証明書は、server.main-domain.tldまたはdomain2.tldではなくmail.domain2.tld用であることに注意してください。

ただし、SNI名を-servernameで指定すると、次のようになります。

$ openssl s_client -connect server.main-domain.tld:587 -servername mail.domain2.tld -starttls smtp -showcerts | grep CN=

depth=2 C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = COMODO RSA Certification Authority
verify error:num=20:unable to get local issuer certificate
verify return:0
250 HELP
0 s:/CN=domain2.tld
i:/C=US/ST=TX/L=Houston/O=cPanel, Inc./CN=cPanel, Inc. Certification Authority
1 s:/C=US/ST=TX/L=Houston/O=cPanel, Inc./CN=cPanel, Inc. Certification Authority
i:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority
2 s:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority
i:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
subject=/CN=domain2.tld
issuer=/C=US/ST=TX/L=Houston/O=cPanel, Inc./CN=cPanel, Inc. Certification Authority

一部のテスト( swaks など)はSNIルックアップを強制していないようです(したがって、SMTP経由で電子メールを正常に送信します)が、おそらくRubyのOpenSSLライブラリはこれを少し処理します別の方法で...

この問題が発生しないように、証明書またはサーバーを適切に設定するにはどうすればよいですか?

1
ylluminate

一部のテスト(スワックなど)がSNIルックアップを強制していないようです...

「SNIルックアップ」はありません。クライアントは、TLSハンドシェイクでSNIを使用して、server_name拡張子を介してターゲットホスト名を指定するかどうかを決定します。ただし、一般に、SMTPでのSNIの使用は実際には一般的ではなく、サポートはまちまちです。これには、通常、同じIPアドレスで複数の証明書をサポートしないメールサーバーや、SNIを使用するものと使用しないものがあるメールクライアントが含まれます。

少なくとも現時点では、SMTPのSNIに依存しないことをお勧めします。これは、サブジェクト代替名を介してすべての可能な名前をカバーする1つの証明書を持っているか、異なる証明書に対して異なるIPアドレスを持っていることを意味します。

3
Steffen Ullrich