MySql Conexão SSL com JAVA

12/08/2017

2

Prezados,

Gostaria de um código exemplo de como posso usar uma conexão SSL à um banco de dados MySql usando arquivos .pem para conexão, pois estou com um banco de dados que só aceita este tipo de conexão.

Atenciosamente.
João.
Responder

Post mais votado

14/08/2017

Olá João, tudo bem?

Acredito que a maior dificuldade nesse processo seja a geração das chaves, mas como um todo não é uma tarefa difícil. Você vai precisar do keytool, que vem na instalação do JDK e pode ser encontrado na pasta bin, além do openssl, que você terá que instalar. Visitando a documentação do MySQL eu resumi os passos na receita abaixo.

Geração do .pem:

keytool -import -alias mysqlServerCACert -file cacert.pem -keystore truststore


Conversão para DER:

openssl x509 -outform DER -in client-cert.pem -out client.cert


Importação do certificado:

keytool -import -file client.cert -keystore keystore -alias mysqlClientCertificate


Geração do certificado cliente/chave RSA:

keytool -genkey -keyalg rsa -alias mysqlClientCertificate -keystore keystore


No programa você informa a localização e senha dos arquivos:

System.setProperty("javax.net.ssl.keyStore","path_to_keystore_file");
System.setProperty("javax.net.ssl.keyStorePassword","password");
System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file");
System.setProperty("javax.net.ssl.trustStorePassword","password");


Ou parametriza a inicialização da JVM:

-Djavax.net.ssl.keyStore=path_to_keystore_file
-Djavax.net.ssl.keyStorePassword=password
-Djavax.net.ssl.trustStore=path_to_truststore_file
-Djavax.net.ssl.trustStorePassword=password


Além dos parâmetros usuais, você vai precisar da propriedade useSSL=true para o driver manager:

Properties properties = new Properties();
...
properties.setProperty("useSSL", "true");
...
Connection conn = DriverManager.getConnection(url, properties);


Espero que isso ajude ^^

Um abraço.
Responder