¡MySQL configurado para SSL, pero SSL todavía está DESACTIVADO ...!

9

Configuré SSL para MySQL usando el siguiente script.

#!/bin/bash
#
mkdir -p /root/abc/ssl_certs
cd /root/abc/ssl_certs
#
echo "--> 1. Create CA cert, private key"
openssl genrsa 2048 > ca-key.pem

echo "--> 2. Create CA cert, certificate"
openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pem

echo "--> 3. Create Server certificate, key"
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem

echo "--> 4. Create Server certificate, cert"
openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
echo ""
echo 
echo ""

echo "--> 5. Create client certificate, key. Use DIFFERENT common name then server!!!!"
echo ""
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem
echo "6. Create client certificate, cert"
openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
exit 0

Se crearon los siguientes archivos:

ca-key.pem             ca-cert.pem
server-req.pem         server-key.pem       server-cert.pem
client-req.pem         client-key.pem       client-cert.pem

Luego combiné server-cert.pem y client-cert.pem en ca.pem (lo leí en una publicación para hacerlo ...)

Creé un usuario SSL en MySQL:

GRANT ALL ON  *.* to sslsuer@hostname IDENTIFIED BY 'pwd' REQUIRE SSL;

Luego agregué lo siguiente en my.cnf

[mysqld]
ssl-ca          = /root/abc/ssl_certs/ca.pem
ssl-cert        = /root/abc/ssl_certs/server-cert.pem
ssl-key         = /root/abc/ssl_certs/server-key.pem

Después de reiniciar el servidor, me conecté a mysql pero SSL todavía no estaba en uso :(

mysql -u ssluser -p

SSL:                    Not in use

Incluso el parámetro have_ssl seguía mostrando deshabilitado .. :(

mysql> show variables like '%ssl%';
+---------------+---------------------------------------------+
| Variable_name | Value                                       |
+---------------+---------------------------------------------+
| have_openssl  | DISABLED                                    |
| have_ssl      | DISABLED                                    |
| ssl_ca        | /root/abc/ssl_certs/ca.pem          |
| ssl_capath    |                                             |
| ssl_cert      | /root/abc/ssl_certs/server-cert.pem |
| ssl_cipher    |                                             |
| ssl_key       | /root/abc/ssl_certs/server-key.pem  |
+---------------+---------------------------------------------+

¿Me he perdido algún paso, o qué pasa?

Las respuestas con pasos perdidos en detalle serán muy apreciadas.

Rayos de sol
fuente
¿Qué versión de OpenSSL estás usando? Y habilite el registro de error + advertencia en MySQL. Si ve el mensaje de error "no se puede leer la clave privada", es probable que este error lo haya afectado de alguna manera. Crear nuevas claves + certs en un sistema más antiguo, usarlos en un MySQL reciente me resolvió el problema.
gertvdijk
@gertvdijk He usado openssl-1.0.1c. Estoy revisando los registros para el error mencionado.
Sunrays el
Ante todo. Compruebe si mysql admite ssl. mysql --ssl --helpAdemás, no olvide reiniciar mysql después de hacer esas modificaciones a my.cnf
Valentin Bajrami
1
@ val0x00ff sí MySQL admite ssl si el valor have_ssl está deshabilitado.
Sunrays el
intente mysql --ssl -u ssluser -pforzar SSL en el cliente. después de que funciona, uno puede identificar por qué REQuIRE SSL no lo hace.
johannes

Respuestas:

6

Consulte la solución aquí: /ubuntu/194074/enabling-ssl-in-mysql

Necesita convertir certificados al formato anterior:

openssl rsa -in client-key.pem -out client-key.pem
openssl rsa -in server-key.pem -out server-key.pem
Pavel Bernshtam
fuente
3

Intenta verificar esto:

  • Habilite el registro de salida de advertencia de MySQL y lea esas entradas de registro reales.
  • Verifique los permisos del sistema de archivos para permitir que el usuario que ejecuta MySQL ( mysql?) Lea los archivos. En /rootno creo que tenga por defecto.
  • ¿Apparmor o SELinux impiden que MySQL lea los certificados y las claves?
  • Puede ser golpeado por un error desagradable de una incompatibilidad reciente de OpenSSL vs. MySQL. No he podido generar claves en Ubuntu 12.04 que MySQL pueda leer, mientras que las que genero en Debian Squeeze funcionan bien.
gertvdijk
fuente
2

En Ubuntu, puede verificar si apparmorbloquea el acceso a sus archivos cert, consulte el manual .

Luego, debe verificar los permisos / propiedad del archivo y agregar los derechos necesarios /etc/apparmor.d/usr.sbin.mysqld. Ver este hilo .

Franc Drobnič
fuente
2

Tuve este problema y ayudó a cambiar la propiedad de los archivos .pem:

chown mysql.mysql /var/lib/mysql/*.pem  (or in your case /root/abc/ssl_certs/*.pem)

(De Craig Wright - /ubuntu/194074/enabling-ssl-in-mysql )

btb
fuente
Esto resolvió el problema para mí.
anteatersa
0

Agregue el "ssl" en la [mysqld]sección en el my.cnfarchivo como

ssl
ssl-ca          = /root/abc/ssl_certs/ca.pem
ssl-cert        = /root/abc/ssl_certs/server-cert.pem
ssl-key         = /root/abc/ssl_certs/server-key.pem

y luego reinicie mysql y verifique nuevamente. Funcionará.

Pratik
fuente
0

Creo que este problema se debe al hecho de que no ha especificado las rutas de archivo para su certificado de CA, clave de servidor y certificado de servidor correctamente. Debe estar en el siguiente formato ...

ssl-ca=path/to/repo/mysql-directory/path/to/pem/cacert.pem
ssl-cert=path/to/repo/mysql-directory/path/to/pem/server-cert.pem
ssl-key=path/to/repo/mysql-directory/path/to/pem/server-key.pem

es decir, necesita la RUTA DE ARCHIVO COMPLETO de los certificados y las claves dentro de su carpeta de instalación de mysql, no una ruta relativa '/ root /'.

Aquí hay un ejemplo de mi instalación:

mysql> show variables like '%ssl%';
+---------------+----------------------------------------------------------+
| Variable_name | Value                                                    |
+---------------+----------------------------------------------------------+
| have_openssl  | YES                                                      |
| have_ssl      | YES                                                      |
| ssl_ca        | C:/wamp64/bin/mysql/mysql5.7.14/etc/certs/ca.pem         |
| ssl_capath    |                                                          |
| ssl_cert      | C:/wamp64/bin/mysql/mysql5.7.14/etc/certs/server-cert.pem|
| ssl_cipher    |                                                          |
| ssl_key       | C:/wamp64/bin/mysql/mysql5.7.14/etc/certs/server-key.pem |
+---------------+----------------------------------------------------------+

Consulte el siguiente enlace para obtener información adicional. https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-ssl.html

Josh
fuente
Sus caminos comienzan con a /, lo que significa que son caminos completos, no caminos relativos. /root/es la carpeta de inicio para el usuario root en un sistema unix.
bobpaul