entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

realizar encriptado SSL MySQL

Hola, tengo dudas sobre la configuración para encriptar SSL en conexiones de vb.net a mysql server, quiero que sea un certificado "casero" pero no entiendo como configurar, ya leí unos tutoriales pero no loro hacer la encriptación si me podrían ayudar me urge amigos

0voto

white comentado

Hola @rodrigo, lo que deseas es generar certificados en openssl y usarlo en mysql? tienes ya instalado openssl en tu equipo para generar los 3 certificados?

PD: puedes verificar si tienes ssl activo? realiza esta consulta:

SHOW VARIABLES LIKE 'have_ssl';

si esta activo te debería devolver YES

1 Respuesta

2votos

white Puntos75880

Haciendo de cuenta que usas openssl. los certificados a generar son los siguientes:

  • certificado cliente
  • certificado servidor
  • certificado CA

para poder generarlos se debe tener instalado openssl en el equipo, el siguiente enlace contiene el instalador, elegir de acuerdo a la arquitectura:

http://slproweb.com/products/Win32OpenSSL.html


una vez instalado openssl y agregado al PATH, abrimos un prompt.

crearemos una carpeta para los certificados a crear, yo tomare el directorio "C:\certificados", puedes cambiarlo si deseas.

linea de comandos:
> mkdir C:\certificados\
> cd C:\certificados\

Ahora usaremos openssl para generar los certificados, en la página de Mysql esta la documentación respectiva.

http://dev.mysql.com/doc/refman/5.0/en/creating-ssl-certs.html

Certificado CA

linea de comandos:
> openssl genrsa 2048 > ca-key.pem
> openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca-cert.pem

Certificado servidor

linea de comandos:
> openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem
> openssl rsa -in server-key.pem -out server-key.pem
> openssl x509 -req -in server-req.pem -days 3600 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem

Certificado cliente

linea de comandos:
> openssl req -newkey rsa:2048 -days 3600 -nodes -keyout client-key.pem -out client-req.pem
> openssl rsa -in client-key.pem -out client-key.pem
> openssl x509 -req -in client-req.pem -days 3600 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem

Te pedirá llenar los datos para generar el certificado tanto en el certificado cliente como en el servidor.

Nota: recuerda ingresar datos distintos para el certificado cliente y el servidor.

Testeamos que los certificados esten correctos:

> openssl verify -CAfile ca-cert.pem server-cert.pem client-cert.pem

deberia devolver:

server-cert.pem: OK
client-cert.pem: OK

Lo siguiente es agregar los certificados al archivo de configuracion de mysql, generalmente se encuentra en la carpeta ProgramData.

por ejemplo:

C:\ProgramData\MySQL\MySQL Server 5.6

abre el archivo my.ini

debajo de la linea que contenga: [mysql] agrega esto:

# certificados ssl
ssl-ca="C:/certificados/ca-cert.pem"
ssl-cert="C:/certificados/client-cert.pem"
ssl-key="C:/certificados/client-key.pem"

y también debajo de la linea que contenga: [client] agrega el codigo de arriba tal cual.


Como paso final reinicia el servicio mysql, en ocasiones llamado MYSQL56 por default

linea de comandos:

> net stop MYSQL56
> net start MYSQL56

verifica que ssl este activo ahora con la consulta:

mysql> SHOW VARIABLES LIKE 'have_ssl';

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_ssl      | YES   |
+---------------+-------+
1 row in set (0.00 sec)

para forzar la encripción debes definir en la cadena de conexión el parametro SslMode como required:

Dim conectorSalvajeAparece As New MySqlConnection("server=localhost;user=root;password=pwrd;database=algo;port=3306;encrypt=true;SslMode=Required")

https://www.connectionstrings.com/mysql/


saludos!

EDIT: como dato adicional, puedes limitar el tipo de conexíon con la sentencia GRANT

ejemplo:

GRANT ALL PRIVILEGES ON *.* TO root@localhost
IDENTIFIED BY "tupassword"
REQUIRE SSL;

esto le cuenta al servidor solo aceptar conexiones encriptadas en SSL para la cuenta root@localhost

http://mysql.conclase.net/curso/?sqlsen=GRANT
http://dev.mysql.com/doc/refman/5.0/en/grant.html

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta