假设您已经为 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
这将创建一个新的 Java KeyStore 文件,在提示您输入 KeyStore 密码并询问您是否要信任该证书(是的,您愿意)之后调用该文件。如果您已经有一个信任库文件,则可以运行相同的命令,替换为现有密钥库的路径(然后系统将提示您输入现有密钥库的密码)。我通常放在我的目录中。truststore.jks
truststore.jks
truststore.jks
conf
其次,您需要向数据库URL添加一些JDBC URL参数:application.conf
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的情况下不可能连接到数据库,以防万一选项在应用程序级别以某种方式搞砸了。例如,如果 ,则在 MySQL 服务器中登录时,运行以下查询:db.default.user=root
root
GRANT USAGE ON *.* TO 'root'@'%' REQUIRE SSL;
FLUSH PRIVILEGES;