Jfinal如何使用ssl连接mysql服务

使用DruidPlugin如何配置客户端的ssl的ca证书,哪位大神可以解惑。


已搞定,现分享方案如下:

 感谢詹总的答复,问题已经解决了好久,没有来结帖,大概说一下mysq如何l使用ssl的方式链接服务希望能帮到需要的人;
首先mysql服务端要支持ssl,支持ssl需要以下条件:
1. 创建ssl证书和密钥--生成ca.pem server-cert.pem client-cert.pem 文件
mysql提供两种方式
一种方式用openssl编译的mysql版本可以在启动时生成(参考链接:https://dev.mysql.com/doc/refman/5.7/en/creating-ssl-rsa-files-using-mysql.html);
第二种方式用openssl生成(采用的方式),(参考链接:https://dev.mysql.com/doc/refman/5.7/en/creating-ssl-files-using-openssl.html)


2. 配置服务器支持(参考链接:https://dev.mysql.com/doc/refman/5.7/en/using-encrypted-connections.html)
主要时需要在my.cnf中需要添加以下配置,文件路径自行修改;还可以指定某个用户必须使用ssl链接等,详情参考官方的链接
[mysqld]
ssl-ca=ca.pem
ssl-cert=server-cert.pem
ssl-key=server-key.pem
require_secure_transport=ON

客户端链接需要以下几个步骤
1. 需要将服务端的pem证书转换成java支持的JKS证书,得到keystore.jks和truststore.jks:
参考链接1:(可用)https://biteeniu.github.io/ssl/convert_pem_to_jks/
参考链接2:(官方但连不上不知道什么原因)https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-using-ssl.html
2. 修改mysql链接,指定链接方式为ssl
jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&verifyServerCertificate=true&useSSL=true&requireSSL=true
3. 加载生成的jks证书和密码到系统属性,要在ActiveRecordPlugin之前
// keystore.jks和truststore.jks所在的路径,及创建时的密码
System.setProperty("javax.net.ssl.keyStore", "path/keystore.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "password");
System.setProperty("javax.net.ssl.trustStore","path/truststore.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "password");

然后正常启动就OK了

评论区

JFinal

2019-04-28 16:50

通过下面的代码获取到 druid 的数据源 DruidDataSource 对象:
DruidDataSource ds = DruidPlugin.getDataSource()
然后找找 druid 的官方文档,对这个 DruidDataSource 对象进行一些配置

或者直接使用 druid ,对其配置好 ssl,然后这样传递给 ActiveRecordPlugin
arp = new ActiveRecordPlugin(druidDataSource)

因为 ActiveRecordPlugin 是可以直接接受任何 DataSource 实现类的

Fcmmy

2019-09-17 11:08

@JFinal 感谢詹总的答复,问题已经解决了好久,没有来结帖,大概说一下mysq如何l使用ssl的方式链接服务希望能帮到需要的人;
首先mysql服务端要支持ssl,支持ssl需要以下条件:
1. 创建ssl证书和密钥--生成ca.pem server-cert.pem client-cert.pem 文件
mysql提供两种方式
一种方式用openssl编译的mysql版本可以在启动时生成(参考链接:https://dev.mysql.com/doc/refman/5.7/en/creating-ssl-rsa-files-using-mysql.html);
第二种方式用openssl生成(采用的方式),(参考链接:https://dev.mysql.com/doc/refman/5.7/en/creating-ssl-files-using-openssl.html)
2. 配置服务器支持(参考链接:https://dev.mysql.com/doc/refman/5.7/en/using-encrypted-connections.html)
主要时需要在my.cnf中需要添加以下配置,文件路径自行修改;还可以指定某个用户必须使用ssl链接等,详情参考官方的链接
[mysqld]
ssl-ca=ca.pem
ssl-cert=server-cert.pem
ssl-key=server-key.pem
require_secure_transport=ON

客户端链接需要以下几个步骤
1. 需要将服务端的pem证书转换成java支持的JKS证书,得到keystore.jks和truststore.jks:
参考链接1:(可用)https://biteeniu.github.io/ssl/convert_pem_to_jks/
参考链接2:(官方但连不上不知道什么原因)https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-using-ssl.html
2. 修改mysql链接,指定链接方式为ssl
jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&verifyServerCertificate=true&useSSL=true&requireSSL=true
3. 加载生成的jks证书和密码到系统属性,要在ActiveRecordPlugin之前
// keystore.jks和truststore.jks所在的路径,及创建时的密码
System.setProperty("javax.net.ssl.keyStore", "path/keystore.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "password");
System.setProperty("javax.net.ssl.trustStore","path/truststore.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "password");

然后正常启动就OK了

JFinal

2019-09-17 11:11

@Fcmmy 非常详细的方案,已点赞 + 收藏,赞

热门反馈

扫码入社