MySQL と Confluence の Java 11 との組み合わせで Confluence が開始しない

お困りですか?

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

コミュニティに質問

プラットフォームについて: Server と Data Center のみ - この記事は、サーバーおよびデータセンター プラットフォームのアトラシアン製品にのみ適用されます。

要約

Confluence で Java 11 を使用しており、MySQL データベースに接続している。Confluence を開始すると、MySQL の TLS のサポート対象バージョンに関連し、JDBC URL 経由で渡されるプロトコルとして適切ではない旨の、次のエラーが表示される。

2021-04-26 03:16:06,441 ERROR [Catalina-utility-1] [confluence.impl.setup.DefaultBootstrapDatabaseAccessor] getBootstrapData Unable to open database connection during bootstrap.
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet successfully received from the server was 41 milliseconds ago.  The last packet sent successfully to the server was 30 milliseconds ago.
...
Caused by: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)

環境

  • Confluence を Java 11 で実行している
  • MySQL 5.7
  • MySQL ドライバ バージョン 5.1.4

診断

このエラーは MySQL と TLS プロトコルに関連しているように見受けられ、「MySQL :: MySQL Connector/J 8.0 Developer Guide :: 16 Known Issues and Limitations」で次のように言及されています。

Connector/J では、上位の TLS バージョンを使用するためにコネクションを制限するサーバーに接続するときの互換性の問題のため、デフォルトでは TLS v1.2 以降とのコネクションを有効化しません。com.mysql.cj.exceptions.CJCommunicationsException: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate) が発生する可能性があります。enabledTLSProtocols コネクション プロパティを使用して TLS v1.2 以降のバージョンとのコネクションを有効化する必要があります。詳細についてはセクション 6.8、「Connecting Securely Using SSL」をご確認ください。

Java 11 には、上位レベルのセキュリティと最新の TLS バージョンが同梱します。 

サーバー側では、tls_version システム変数により、MySQL サーバーが暗号化された接続のために許可する TLS プロトコルが定義されます。tls_version の値は、クライアントからの接続と、ソース/レプリカ レプリケーションを使用しているレプリカ サーバーからの接続に適用されます。変数の値は、この一覧から利用できる、1 つ以上のコンマ区切りのプロトコル バージョンです (大文字と小文字は区別されません)。TLSv1、TLSv1.1、TLSv1.2。デフォルトでは、この変数の一覧には、MySQL のコンパイルに使われる、SSL ライブラリでサポートされるすべてのプロトコル (OpenSSL の場合は TLSv1,TLSv1.1,TLSv1.2、yaSSL の場合は TLSv1,TLSv1.1) が含まれます。実行中に tls_version の値を確認するには、次のステートメントを使用します。

SHOW GLOBAL VARIABLES LIKE '%ssl%';
SHOW GLOBAL VARIABLES LIKE '%tls%';

ソリューション

tls_version の値を変更するには、サーバーのスタートアップで設定します。たとえば、TLSv1. 1または TLS 1.2 プロトコルを使用するコネクションは許可するが、安全性が比較的低い TLSv1 プロトコルは拒否したい場合、サーバーの my.cnf ファイルで次の行を使用します。

[mysqld]
tls_version=TLSv1.1,TLSv1.2

Alternatively, we can pass different TLS versions in the JDBC connection URL using enabledTLSProtocols property, like below:

<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/confluencedb?enabledTLSProtocols=TLSv1,TLSv1.1,TLSv1.2</property>

Or Just pass the useSSL=false in the connection string like below to disable SSL on the database connection:

<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/confluencedb?useSSL=false</property>

Or edit my.cnf and add in skip_ssl

[mysqld]
...
skip_ssl
最終更新日 2021 年 11 月 30 日

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

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