MySQLサーバーのCA証明書がすでに設定されていると仮定すると(Amazon RDSを使用する場合)、これを機能させるためのいくつかの手順があります。
まず、キーツール
、JDKに付属しています。この場合のKeyStoreには、信頼するすべてのCA証明書が含まれます。 Amazon RDSの場合、CA証明書はmysql-ssl-ca-cert.pem
を使用 作業ディレクトリで、次のコマンドを実行できます。
keytool -import -alias mysqlServerCACert -file mysql-ssl-ca-cert.pem -keystore truststore.jks
これにより、truststore.jks
という新しいJavaKeyStoreファイルが作成されます。 KeyStoreパスワードの入力を求められ、証明書を信頼するかどうかを尋ねられた後(はい、そうです)。すでにトラストストアファイルがある場合は、同じコマンドを実行して、truststore.jks
を置き換えることができます。 既存のKeyStoreへのパスを使用します(代わりに、既存のKeyStoreのパスワードの入力を求められます)。私は通常truststore.jks
を配置します 私のconf
ディレクトリ。
次に、application.conf
で データベースURLにいくつかのJDBCURLパラメータを追加する必要があります:
verifyServerCertificate=true
-ホスト証明書を確認できない場合は、接続を拒否します。
useSSL=true
-SSLを使用して接続します。
requireSSL=true
-MySQLサーバーがSSLをサポートしていない場合は、接続を拒否します。
たとえば、現在のデータベースURLが次の場合:
db.default.url="jdbc:mysql://url.to.database/test_db"
次に、次のようになります。
db.default.url="jdbc:mysql://url.to.database/test_db?verifyServerCertificate=true&useSSL=true&requireSSL=true"
最後に、MySQL-Connector/Jが使用するトラストストアを構成するためにPlayサーバーを起動するときに渡す必要のあるコマンドラインオプションがいくつかあります。私のtruststore.jks
を想定しています ファイルはconf
にあります ディレクトリであり、パスワードはpassword
、次のようにサーバーを(開発モードで)起動します:
activator run -Djavax.net.ssl.trustStore="conf/truststore.jks" -Djavax.net.ssl.trustStorePassword="password"
これに加えて、オプションがアプリケーションレベルで混乱した場合に備えて、SSLを使用せずにデータベースに接続できないようにすることも望んでいます。たとえば、db.default.user=root
の場合 、root
としてログインした場合 MySQLサーバーで、次のクエリを実行します。
GRANT USAGE ON *.* TO 'root'@'%' REQUIRE SSL;
FLUSH PRIVILEGES;