sexta-feira, 25 de dezembro de 2015

Habilitar conexão SSL no servidor MySQL com Windows 10


1) Instalar openssl para windows para gerar os certificados: http://slproweb.com/products/Win32OpenSSL.html

2) Criar uma pasta qualquer para armazanar os certificados, ex: "d:\MySqlCerts".

3) Gerar os certificados, depois de muitas tentativas a única forma que deu certo foi seguindo essas instruções http://askubuntu.com/questions/194074/enabling-ssl-in-mysql. Veja a resposta do usuário user262116, ele explica o porque dessa maneira funcionar (tem um lance de converter o certificado SHA1 do formato PKCS #8 para PKCS#1).

# Generate a CA key and certificate with SHA1 digest
openssl genrsa 2048 > ca-key.pem
openssl req -sha1 -new -x509 -nodes -days 3650 -key ca-key.pem > ca-cert.pem

# Create server key and certficate with SHA1 digest, sign it and convert
# the RSA key from PKCS #8 (OpenSSL 1.0 and newer) to the old PKCS #1 format
openssl req -sha1 -newkey rsa:2048 -days 730 -nodes -keyout server-key.pem > server-req.pem
openssl x509 -sha1 -req -in server-req.pem -days 730  -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
openssl rsa -in server-key.pem -out server-key.pem

# Create client key and certificate with SHA digest, sign it and convert
# the RSA key from PKCS #8 (OpenSSL 1.0 and newer) to the old PKCS #1 format
openssl req -sha1 -newkey rsa:2048 -days 730 -nodes -keyout client-key.pem > client-req.pem
openssl x509 -sha1 -req -in client-req.pem -days 730 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
openssl rsa -in client-key.pem -out client-key.pem
Obs. 1: para conseguir chamar o openssl a partir da pasta que você criou, precisa acrescentar a pasta do openssl no path do windows (Variáveis do sistema/path).
Obs. 2: durante a geração dos certificados algumas perguntas serão feitas, pode apertar enter e ir passando por todas. Não sei pra que servem...

4) Alterar o arquivo my.ini. Esse arquivo também tem um macete, ele fica na pasta "C:\ProgramData\MySQL\MySQL Server 5.7", e não na "C:\ProgramFiles\MySQL\MySQL Server 5.7" como mencionado em vários sites e creio que inclusive no manual do MySql.
Acrescentar as seguintes linhas na parte [mysqld] do arquivo:
ssl-ca = "D:/MySqlCerts/ca-cert.pem"
ssl-cert = "D:/MySqlCerts/server-cert.pem"
ssl-key = "D:/MySqlCerts/server-key.pem"

5) Depois disso basta reiniciar o servico MySql. É para o SSL estar habilitado, como mostrado no console do MySql abaixo:

mysql> show variables like '%ssl%';
+---------------+-------------------------------+
| Variable_name | Value                         |
+---------------+-------------------------------+
| have_openssl  | YES                           |
| have_ssl      | YES                           |
| ssl_ca        | D:/MySqlCerts/ca-cert.pem     |
| ssl_capath    |                               |
| ssl_cert      | D:/MySqlCerts/server-cert.pem |
| ssl_cipher    |                               |
| ssl_crl       |                               |
| ssl_crlpath   |                               |
| ssl_key       | D:/MySqlCerts/server-key.pem  |
+---------------+-------------------------------+
9 rows in set, 1 warning (0.00 sec)

6) Pelo MySQL Workbench editar uma conexão e na aba SSL deixar como o seguinte:

7) Falta descobrir como fazer a conexão do vb usar SSL numa aplicação desktop.

2 comentários: