TLS による、Confluence のメール サーバーのセットアップの問題

お困りですか?

アトラシアン コミュニティをご利用ください。

コミュニティに質問

問題

Confluence が、TLS が有効化された状態でセキュアなポート (587) 経由でのメール サーバーへの接続に失敗する。次のエラーが返される。

An error has occurred with sending the test email:
com.atlassian.mail.MailException: javax.mail.MessagingException: Could not convert socket to TLS;
nested exception is:
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
at com.atlassian.confluence.jmx.JmxSMTPMailServer.doSendWithMessageIdSupport(JmxSMTPMailServer.java:120)
at com.atlassian.confluence.jmx.JmxSMTPMailServer.send(JmxSMTPMailServer.java:79)
at com.atlassian.confluence.admin.actions.mail.SendTestEmailAction.execute(SendTestEmailAction.java:57)

診断

環境

  • Java 8 で実行されている Confluence サーバー

Diagnostic Steps

メールのデバッグと SSL のデバッグ ロギングを次のように有効化します。

  1. Confluence を停止します。
  2. CATALINA_OPTS-Dmail.debug=true-Djavax.net.debug=ssl:handshake パラメーターを含めることでデバッグ ロギングを有効化します。「システム プロパティの構成」をご確認ください。これらのパラメーターにより、メール プロトコルの詳細のログが catalina.log に印刷されます。 

    1. catalina.out ログに詳細が表示されない場合はパラメーターに空白が含まれていないかどうかをご確認ください。

    2. プロパティ ファイルでパラメーターを追加する際に、パラメーター間に add を含めないでください。

  3. Confluence を再起動します。
  4. テスト メールを再送します。結果は次のようになります (catalina.log 内に出力)

STARTTLS
220 TLS go ahead
Allow unsafe renegotiation: false
Allow legacy hello messages: true
Is initial handshake: true
Is secure renegotiation: false
Ignoring unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 for TLSv1
.
.
http-nio-17000-exec-7, handling exception: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
http-nio-17000-exec-7, SEND TLSv1.2 ALERT:  fatal, description = unexpected_message
http-nio-17000-exec-7, WRITE: TLSv1.2 Alert, length = 2
http-nio-17000-exec-7, called closeSocket()

上記のシナリオでは、Confluence と SMTP メール サーバーとの間の SSL ハンドシェイクが失敗しています。SSL ハンドシェイクに成功するには、Catalina.out ログ内のログ エントリが次のようになる必要があります。

server Finished handshake message

Followed by..

client Finished handshake message

原因

この問題は、誤った TLS バージョンが利用されているために発生します。これは、別の TLS バージョンを利用して以降の OpenSSL コマンドを実行することでも確認できます。適切な TLS バージョンの場合はメール サーバーの公開証明書が返されます。

openssl s_client -connect mail.example.com:587 -tls1 -starttls smtp 
openssl s_client -connect mail.example.com:587 -tls1_1 -starttls smtp
openssl s_client -connect mail.example.com:587 -tls1_2 -starttls smtp

回避策

サポート対象の TLS バージョンを確認したら、Java で利用される TLS バージョンを強制する必要があります。

例: TLSv1.2 プロトコルを強制するには、「システム プロパティの構成」に従って次のパラメーターを追加します。

CATALINA_OPTS="-Dmail.smtp.starttls.enable=true -Dmail.smtp.ssl.protocols=TLSv1.2 ${CATALINA_OPTS}"
Last modified on Mar 10, 2021

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.