如何配置Spring Boot应用程序以在MySQL上使用SSL/TLS?

5
我在MySQL服务器上设置了SSL。 我生成了几个证书,包括CA(ca.pem、ca-key.pem)、客户端(client-cert.pem、client-key.pem)和服务器端(server-cert.pem、server-key.pem)的证书。
在Spring Boot配置文件中,application.yml文件定义了连接到MySQL的链接,链接如下: jdbc:mysql://host:3306/bdd_name?useUnicode=true&characterEncoding=utf8&useSSL=true&requireSSL=true 我使用openssl verify验证我的证书,并使用mysql客户端建立连接进行验证。
如何将Spring Boot应用程序链接到我的证书(*.pem文件)来完成我的配置?

你能解释一下你想让Spring Boot实现什么吗? - PaulNUK
1
我的Spring Boot应用程序需要以安全模式连接到数据库,以执行应用程序中使用的数据的操作(选择、插入、更新等)。我的问题是如何配置证书以允许mysql服务器接受Spring应用程序的请求? - Youssouf Maiga
它在没有SSL的情况下运行良好。数据源已在Spring配置文件中正确设置,现在我的目标是添加SSL。 - Youssouf Maiga
https://dev59.com/3mYq5IYBdhLWcg3wtCvO - PaulNUK
2个回答

13

查看我的答案:https://dev59.com/2FsV5IYBdhLWcg3w-iwC#51879119

我不喜欢污染java选项或系统属性,这些在任何情况下都无用于应用程序容器...

您可以使用以下方式编程设置MySQL连接的SSL证书:

jdbc:mysql://example.com:3306/MYDB?verifyServerCertificate=true&useSSL=true&requireSSL=true&clientCertificateKeyStoreUrl=file:cert/keystore.jks&clientCertificateKeyStorePassword=123456&trustCertificateKeyStoreUrl=file:cert/truststore.jks&trustCertificateKeyStorePassword=123456

它已经有文档记录:


1
这是更理想的答案,可以在生产应用中使用,而无需更改整个JVM的信任存储。 - vijay
有没有一种方法可以在像这样提供时使用Jasypt加密信任存储密码? - stackMan10
@stackMan10 你可以通过编程方式构建jdbc链接,从解密后的值中提供密码。Spring YAML配置和Cloud Config与jasypt集成,采用占位符语法ENC()client-secret: ENC(S/KaF.....) 搜索一下即可。 - gavenkoa

8
您需要将证书和密钥的*.pem文件添加到密钥库中,将CA添加到信任库中。

本链接说明了如何创建自己的密钥库信任库[链接]http://roopindersingh.com/programming/converting-pem-certificates-and-private-keys-to-jks/

然后您必须将其添加到JVM参数中。

-Djavax.net.ssl.keyStore=/path/to/keystore/keystore.jks
-Djavax.net.ssl.keyStorePassword=password
-Djavax.net.ssl.trustStore=/path/to/keystore/truststore.jks
-Djavax.net.ssl.trustStorePassword=password

4
有没有程序化的方法可以实现这个? - alexmherrmann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接