从外部应用程序通过ssl连接到CloudSQL Mysql

从外部应用程序通过ssl连接到CloudSQL Mysql,mysql,ssl,google-cloud-sql,Mysql,Ssl,Google Cloud Sql,我正在尝试获取一个示例java应用程序,以连接到GCP中的Mysql gen2实例。我使用SSL,ip地址是白名单。我已经使用mysql命令行确认了与实例的连接,并传入了client-cert.pem、client-key.pem和server-ca.pem。现在,为了从spring boot java应用程序连接到它,我执行了以下操作: 从客户端证书和密钥创建了一个p12文件,并将其添加到keystore.jks 使用server-ca.pem文件创建了信任库 在创建连接之前在main中添加了

我正在尝试获取一个示例java应用程序,以连接到GCP中的Mysql gen2实例。我使用SSL,ip地址是白名单。我已经使用mysql命令行确认了与实例的连接,并传入了client-cert.pem、client-key.pem和server-ca.pem。现在,为了从spring boot java应用程序连接到它,我执行了以下操作:

  • 从客户端证书和密钥创建了一个p12文件,并将其添加到keystore.jks
  • 使用server-ca.pem文件创建了信任库
  • 在创建连接之前在main中添加了以下代码:

    System.setProperty("javax.net.debug", "all");
    System.setProperty("javax.net.ssl.trustStore", TRUST_STORE_PATH);
    System.setProperty("javax.net.ssl.trustStorePassword", "fake_password");
    System.setProperty("javax.net.ssl.keyStore", KEY_STORE_PATH);
    System.setProperty("javax.net.ssl.keyStorePassword", "fake_password");
    
  • 对于jdbc url,我使用了:
    jdbc:mysql://1.1.1.1:3306/sampledb?useSSL=true&requireSSL=true

  • 但是,我无法连接到实例并从java ssl调试中看到此错误:

    restartedMain, RECV TLSv1.1 ALERT:  fatal, unknown_ca
    %% Invalidated:  [Session-2, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA]
    restartedMain, called closeSocket()
    restartedMain, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: unknown_ca
    restartedMain, called close()
    restartedMain, called closeInternal(true)
    
    我也试着跑

    openssl verify -CAfile server-ca.pem client-cert.pem`
    
    得到了这个输出:

    error 20 at 0 depth lookup:unable to get local issuer certificate`
    

    关于我可能做错了什么有什么想法吗?

    检查此帖子是否涉及类似问题。在本例中,我从google cloud sql实例页面获取ca和客户端证书。所以我认为他们应该被正确地签署。如果没有,这就是我希望听到谷歌云sql的人的原因。也许这是他们方面的文档更新。