複数のクライアントの複数のドメインで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ライブラリはこれを少し処理します別の方法で...
この問題が発生しないように、証明書またはサーバーを適切に設定するにはどうすればよいですか?
一部のテスト(スワックなど)がSNIルックアップを強制していないようです...
「SNIルックアップ」はありません。クライアントは、TLSハンドシェイクでSNIを使用して、server_name
拡張子を介してターゲットホスト名を指定するかどうかを決定します。ただし、一般に、SMTPでのSNIの使用は実際には一般的ではなく、サポートはまちまちです。これには、通常、同じIPアドレスで複数の証明書をサポートしないメールサーバーや、SNIを使用するものと使用しないものがあるメールクライアントが含まれます。
少なくとも現時点では、SMTPのSNIに依存しないことをお勧めします。これは、サブジェクト代替名を介してすべての可能な名前をカバーする1つの証明書を持っているか、異なる証明書に対して異なるIPアドレスを持っていることを意味します。