sql >> データベース >  >> RDS >> Mysql

Play Frameworkを使用してSSL経由でリモートMySQLデータベースに接続するにはどうすればよいですか?

    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;
    


    1. Accessでデータベースドキュメンテーションを使用する方法

    2. SQLFiddleは壊れていますか? Oracle、SQL Server、...のエラー

    3. パターンに一致する値を含むオブジェクトのJSON配列を検索します

    4. 挿入または更新時に完全なMySQLクエリ文字列を取得する