如何配置 Spring Boot 应用程序以在 MySQL 上使用 SSL/TLS?
Posted
技术标签:
【中文标题】如何配置 Spring Boot 应用程序以在 MySQL 上使用 SSL/TLS?【英文标题】:How to configure spring boot application to use SSL/TLS over MySQL? 【发布时间】:2017-09-23 22:19:58 【问题描述】:我在我的 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 实现什么吗? 我的 Spring Boot 应用程序需要以安全模式连接到数据库才能对应用程序中使用的数据进行操作(选择、插入、更新等)。我的问题是如何配置证书以允许mysql服务器接受spring applciation的请求? 没有 ssl 也能正常工作数据源在 spring 配置文件中正确 sed,现在我的目标是添加 SSL ***.com/questions/14265115/… 【参考方案1】:查看我的答案:https://***.com/a/51879119/173149
我不喜欢污染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
记录在案:
https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-using-ssl.html【讨论】:
这是更理想的答案,可以在生产应用程序中使用,而无需更改整个 JVM 的信任库。 有没有办法像这样提供时使用 jasypt 加密信任库密码 @stackMan10 您可以构建 jdbc 链接以编程方式提供解密值的密码,Spring YAML 配置和云配置与jasypt
以占位符语法 ENC()
的形式集成:client-secret: ENC(S/KaF.....)
它,【参考方案2】:
您需要在 keystore 中添加 "*.pem" 文件(证书和密钥),在 "truststore" 中添加 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
【讨论】:
有没有办法以编程方式做到这一点?以上是关于如何配置 Spring Boot 应用程序以在 MySQL 上使用 SSL/TLS?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Spring Boot 修改 HttpServletResponse 以在 json 中包含一些标准属性? [复制]
为独立的 Spring Boot 应用程序设置 MySQL 数据库以在另一个设备中使用
如何在 Angular、spring-boot、maven 项目中配置项目以自动重新加载浏览器