Después de crear un certificado SSL autofirmado, configuré mi servidor MySQL remoto para usarlos (y SSL está habilitado)
Me conecto a mi servidor remoto e intento conectarme a su propio mysqld usando SSL (el servidor MySQL es 5.5.25).
mysql -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key --ssl-ca=ca.cert
Enter password:
ERROR 2026 (HY000): SSL connection error: error:00000001:lib(0):func(0):reason(1)
Ok, recuerdo haber leído que hay algún problema con la conexión al mismo servidor a través de SSL. Así que descargo las claves del cliente en mi casilla local y pruebo desde allí ...
mysql -h <server> -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key --ssl-ca=ca.cert
Enter password:
ERROR 2026 (HY000): SSL connection error
No está claro a qué se refiere este error de "error de conexión SSL", pero si omito el -ssl-ca
, entonces puedo conectarme usando SSL.
mysql -h <server> -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 37
Server version: 5.5.25 MySQL Community Server (GPL)
Sin embargo, creo que esto solo está encriptando la conexión y no verificando realmente la validez del certificado (lo que significa que sería potencialmente vulnerable a un ataque de hombre en el medio)
Los certificados SSL son válidos (aunque autofirmados) y no tienen una frase de contraseña. Entonces mi pregunta es, ¿qué estoy haciendo mal? ¿Cómo puedo conectarme a través de SSL, usando un certificado autofirmado?
La versión del servidor MySQL es 5.5.25 y el servidor y los clientes son CentOS 5.
Gracias por cualquier consejo
Editar : tenga en cuenta que en todos los casos, el comando se emite desde el mismo directorio donde residen las claves SSL (por lo tanto, no hay una ruta absoluta)
Editar (en respuesta a mgorven):
ca.cert
es el certificado de la Autoridad de certificación, que se supone que debe decirle a mysql que mi autoridad de certificación es de confianza.
La configuración de my.cnf
es
[mysqld]
ssl-ca=/etc/ssl/mysql/ca.cert
ssl-cert=/etc/ssl/mysql/server.cert
ssl-key=/etc/ssl/mysql/server.key
También intenté agregar ssl-cipher=DHE-RSA-AES256-SHA
pero lo eliminé porque no ayudó.
ca.cert
? ¿Es el certificado autofirmado del servidor? ¿Está utilizando certificados de cliente para la autenticación? Proporcione la configuración relacionada con SSL en el servidor.Respuestas:
Sí, tiene razón en que si no especifica
--ssl-ca
, el cliente no verifica el certificado del servidor. Dado que funciona sin esa opción, la razón más probable del error es que el cliente no confía en el certificado del servidor.Si está utilizando certificados de cliente y servidor autofirmados, el
ca.cert
archivo debe incluir ambos archivos. De esa manera, el cliente confiará en el certificado del servidor y el servidor confiará en el certificado del cliente.Por ejemplo:
Genere la clave del servidor y el certificado:
Genere la clave del cliente y el certificado:
Combine los certificados de cliente y servidor en el archivo de certificados de CA:
fuente
Para usar ssl unidireccional, debes probar con:
El
--ssl-cert
y--ssl-key
en el cliente mysql se utilizan para SSL de 2 vías. Esto significa autenticación basada en certificados. El tema del certificado del cliente debe ser el nombre de usuario.fuente
--ssl-verify-server-cert
el CN del certificado del servidor debe ser el mismo que el host que especifique para la opción de línea de comandos -h.Por casualidad, ¿no ha ingresado el mismo nombre común para los certificados de servidor y cliente? En caso afirmativo, reemplace uno de ellos para que los nombres comunes sean diferentes.
fuente