我正在使用Maria JDBC驱动程序创建与Amazon Aurora DB的连接 我想创建一个安全的连接,所以我读了here
使用MySQL实用程序
连接到具有SSL的数据库集群从中下载Amazon RDS签名证书的公钥 https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem。 请注意,这将下载名为rds-combined-ca-bundle.pem。
的文件
第一个问题:如何确保安全 - 任何人都可以从pem
下载此Amazon AWS
文件?
我做了一些研究我应该如何使用公钥连接到Aurora数据库 我找到了这两个链接First,Second
所以我的代码很简单:
Class.forName("org.mariadb.jdbc.Driver");
Properties prop = new Properties();
prop.setProperty("javax.net.ssl.trustStore","C:\\temp\\rds-combined-ca-bundle.pem");
prop.setProperty("user",jdbcDetails.username);
prop.setProperty("password",jdbcDetails.getSensitiveData());
java.sql.Connection conne = DriverManager.getConnection(jdbcDetails.connectionString, prop);
try (Statement stmt1 = conne.createStatement()) {
// Execute all but the rest
ResultSet rs = stmt1.executeQuery("Select 98765 from dual limit 2");
while(rs.next()) {
rs.getLong(1);
}
}
conne.close();
第二个问题:如何让public key file
与加密相关?
以上信息与Oracle Java information相提并论:
如果客户端想要验证服务器,那么客户端的信任存储必须包含服务器的证书
第三个问题:根据我的理解,如果客户信任服务器,则不要求他使用此文件
第四个问题:我正在检查与Wireshark的连接创建
有和没有这个public key file
i的情况都能够创建连接,并且Wireshark中的两个案例都出现了加密
看起来像这样的东西:
Encrypted Application Data:
eb:62:45:fb:10:50:f7:8c............:b9:0a:52:e7:97:1d:34
答案 0 :(得分:1)
基于this answer我了解公钥使用方法:
首先, 亚马逊AWS Azure文档似乎有误导性 - 它仅与连接特定工具 MySQL实用程序
相关First&的答案第二&第三个问题:
" Java绝对可以在没有客户端的情况下建立SSL连接 验证服务器的证书链。"
进行密钥交换以确保它所连接的服务器确实是它所期望的服务器(即非可疑服务器) 这意味着它仍然是相同的SSL连接,但是使用verifyServerCertificate = false它不会验证它是否是预期的服务器
回答第四个问题: Currect,代码在Java中 - 并且传递SSL参数使其加密。
因此,使用这些参数可以满足要求
?trustServerCertificate=true&useSSL=true&requireSSL=true&verifyServerCertificate=false