假设您已经为MysqL服务器设置了CA证书(使用Amazon RDS时就是这种情况),那么需要执行一些步骤来完成这项工作。
首先,应使用JDK随附的keytool将CA证书导入到Java 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
提示您输入KeyStore密码并询问您是否要信任证书后,它将创建一个新的Java KeyStore文件(是,您愿意)。如果您已经有一个信任库文件,则可以运行相同的命令,替换truststore.jks
为现有密钥库的路径(然后,系统将提示您输入现有密钥库的密码)。我通常将truststore.jks
我的conf
目录。
其次,application.conf
您需要在数据库URL中添加一些JDBC URL参数:
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"
最后,启动Play服务器以配置mysql-connector / J将使用的信任库时,需要传递一些命令行选项。假设我的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;