当前位置: 首页 > 面试题库 >

如何使用Play Framework通过SSL连接到远程MySQL数据库?

劳灵均
2023-03-14
问题内容

我在由远程MySQL数据库支持的分布式环境中部署Play应用程序。具体来说,应用程序托管在heroku上,数据库位于Amazon
RDS上(尽管这实际上适用于任何远程数据库连接)。由于数据库不仅位于本地主机上,为了安全起见,我更希望通过SSL建立远程MySQL连接。

给定要信任的CA证书,只有可以验证主机证书的情况下,如何配置Play应用程序以通过SSL连接到MySQL服务器?

假定这是当前数据库配置:

db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://url.to.database/test_db"
db.default.user=root 
db.default.password="...."

问题答案:

假设您已经为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;


 类似资料:
  • 问题内容: 如何从Java应用程序通过SSH连接到远程MySQL数据库?小代码示例对我有所帮助,对此我将不胜感激。 问题答案: 我的理解是,您想访问在远程计算机上运行的mysql服务器,并通过SSH隧道侦听端口3306。 要使用命令行ssh客户端从本地计算机上的端口1234到远程计算机上的端口3306的隧道,您可以从本地计算机上键入以下命令: 要从Java执行相同的操作,可以使用JSch(SSH2

  • “无法确定数据库类型None的嵌入式数据库驱动程序类” 我应该给Application.Properties中的spring.datasource.url值什么?或者其他建议?谢了。

  • 问题内容: 我正在尝试使用mysql_connect从PHP通过SSL连接到远程MySQL服务器: 并得到最严重的错误: 我在my.cnf中添加了以下参数: 所以我可以使用终端从终端成功连接到远程mysql 因此,到mysql服务器的连接正常工作,据我了解,问题出在php / mysql合作中。可能我缺少一些参数。 不幸的是我不能使用mysqli lib,因为pdo_mysql有太多可用的适配器。

  • 问题内容: 我刚刚在网络托管服务上设置了MySQL数据库,并尝试使用以下php远程连接至该数据库: 我对php和MySQL还是很陌生,我不了解几件事。我已将上面的代码保存在文件中(称为demo.html),并尝试在Web浏览器中查看它(当前它不显示任何内容)。 我的托管公司告诉我,应该使用数据库连接 我以为我需要包括IP地址(使用PhPMyAdmin登录时看到的地址),因此我也添加了该地址。但是,

  • 问题内容: 我正在尝试在Java项目中通过SSH连接到远程MySQL服务器。如何将SSH连接与JPA集成在一起? 我正在使用Netbeans 6.9.1,JPA,MySQL 5.2。 问题答案: 我假设您想隧道传输到仅侦听localhost(或已防火墙)的远程mysql 那么最简单的方法是 在运行应用程序服务器的帐户之间建立信任关系,以便将JPA服务提供给您的应用程序 创建隧道使用来创建隧道,该隧

  • 请知道,我对数据库很陌生。我能够正确安装mySQL和java连接器驱动程序。但每当我在eclipse中运行程序并尝试从我创建的数据库中检索信息时,我都会收到以下消息:“需要SSL连接,但服务器不支持”。下面是我要使用安全SSL连接运行的代码: `公共静态void main(字符串[]参数){