【问题标题】:Connecting a springboot application with mysql server over ssl通过 ssl 将 springboot 应用程序与 mysql 服务器连接起来
【发布时间】:2020-12-28 20:13:02
【问题描述】:

我需要将我的 Spring Boot 应用程序与位于 ssl 上的远程我的 sql 服务器连接起来。我在我的应用程序中使用 JPA。我已阅读有关 ssl 和所需证书的信息,并且我需要 MySql Conector/J 来建立连接。我只是想知道我应该选择什么样的方法,因为我是一个完整的初学者并且无法通过互联网找到有效的 tuuriol。任何解释将不胜感激。

【问题讨论】:

    标签: java mysql spring-boot ssl


    【解决方案1】:

    参考在这里:https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-configuration-properties.html(向下滚动到安全部分)

    基本上,您需要应用程序证书和服务器 CA 证书的 PKCS12 / JKS 格式。然后将其添加到 JDBC URL 中。

    示例:在 application.yml 中,假设我们使用 PKCS12 格式,使用 SSL 并验证服务器 CA。假设客户端(app)证书文件名为client-cert.p12,CA证书文件名为server-ca.p12

    spring:
      datasource:
        url: >
          jdbc:mysql://{DATABASE_IP}/{DATABASE_NAME}?
          useSSL=true&
          requireSSL=true&
          clientCertificateKeyStoreUrl=file://{SOME_DIRECTORY}/client-cert.p12&
          clientCertificateKeyStoreType=PKCS12&
          clientCertificateKeyStorePassword={KEY_STORE_PASSWORD}
          verifyServerCertificate=true&
          trustCertificateKeyStoreUrl=file://{SOME_DIRECTORY}/server-ca.p12&
          trustCertificateKeyStoreType=PKCS12&
          trustCertificateKeyStorePassword={KEY_STORE_PASSWORD}
        username: {USERNAME}
        password: {PASSWORD}
    

    如果使用JKS,文件格式通常为jks,类型为JKS。如果您不需要验证 CA,请设置 verifyServerCertificate = false 并且您不需要 trustCertificateKeyStore 的东西(最后 3 行)

    【讨论】:

    • 我想我必须发送某种获取服务器 CA 证书的请求,然后我可以使用它进行配置。如何申请该证书以及如何将其存储在我们的商店中?
    • 您需要向服务器的所有者/管理员索取证书文件。数据库服务器也应该存储相同的密钥文件。是我们人类手动复制密钥文件。
    • 如果所有者将证书存储在某个在线目录中,我可以在证书的应用程序属性中传递“URL”吗?
    • 我觉得只要把file://改成http://就好了,不过我之前没试过
    【解决方案2】:

    如果您已成功获得客户端证书,则以下表达式中的 clientkeystore.jks 您可以提供以下作为 url 并可以连接:

    spring.datasource.url=jdbc:mysql://XXXX:3306/mydatabase?useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&verifyServerCertificate=true&useSSL=true&requireSSL=true&clientCertificateKeyStoreUrl=file:/opt/clientkeystore.jks&clientCertificateKeyStorePassword=mypass&trustCertificateKeyStoreUrl=file:/opt/truststore.jks&trustCertificateKeyStorePassword=mypass
    

    【讨论】:

    • 那么如何与服务器通信以获取客户端证书、密钥存储以及获取该证书后存储在何处以及如何存储?
    • 获得证书后,您有多种选择:1) 将服务器证书导入 jdk 中 $JAVA_HOME/lib/security/cacerts 中的 cacerts 2) 或将其作为参数提供给您的 java使用 -Djavax.net.ssl.trustStore= -Djavax.net.ssl.trustStorePassword= 的程序
    猜你喜欢
    • 2019-03-10
    • 2010-09-24
    • 2011-05-16
    • 2020-01-07
    • 2013-08-03
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多