CertPathValidatorException Java пытается подключиться к базе данных сервера с помощью SSL - PullRequest
0 голосов
/ 15 октября 2018

У меня есть приложение 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?

Спасибо!

[EDIT]

Пробовал Пуджа Аггарвал ответить, но не сделалработа.

Использование -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

PS: я могу подключиться, используя:

 mysql -uroot -p -h 192.00.00.00 \
    --ssl-ca=server-ca.pem --ssl-cert=client-cert.pem \
    --ssl-key=client-key.pem

1 Ответ

0 голосов
/ 15 октября 2018

Выполните действия, указанные в этой ссылке.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?

...