我有一个Java应用程序(休眠(,我正在尝试在带有Google Cloud SQL + Compute Engine的项目中使用,但没有成功。
Google Cloud SQL要求我通过SSL连接到数据库,使用server-ca.pem
,client-cert.pem
和client-key.pem
。
在此之前,我使用属性连接到我的数据库:
hibernate.connection.driver_class=com.mysql.cj.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost/dbname?autoReconnect=true&useSSL=false
hibernate.connection.username=root
hibernate.connection.password=pass
hibernate.dialect=org.hibernate.dialect.MySQLDialect
我如何更改它以使用 SSL?
谢谢!
[编辑]
尝试了Pooja Aggarwal的答案,但没有奏效。
使用-Djavax.net.debug=all
我得到异常:
Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
[编辑2]
我为生成证书而运行的命令:
openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem
-name "mysqldb" -passout pass:MYPASS -out client-keystore.p12
keytool -importkeystore -srckeystore client-keystore.p12 -srcstoretype pkcs12
-srcstorepass MYPASS -destkeystore keystore -deststoretype JKS -deststorepass MYPASS
然后执行:
java -Djavax.net.ssl.keyStore=/home/user/cert/keystore -Djavax.net.ssl.keyStorePassword=MYPASS -jar MyApp.jar
附注: 我可以使用以下方法连接:
mysql -uroot -p -h 192.00.00.00
--ssl-ca=server-ca.pem --ssl-cert=client-cert.pem
--ssl-key=client-key.pem
按照此链接中提到的步骤操作。 https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-using-ssl.html
您需要将 useSSL 标记为 true,并在 JDK 中导入证书,其步骤在上面的链接中提到。然后,您需要设置系统属性。
System.setProperty("javax.net.ssl.keyStore","path_to_keystore_file");
System.setProperty("javax.net.ssl.keyStorePassword","mypassword");
使用此链接中提到的步骤导入证书:如何将.cer证书导入 java 密钥库?