MySQL sslConfig CA is never used: server certificate not verified

Abierto Apto para principiantes
#36,946 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
82/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
mysql, python
Área
databases

Línea de trabajo

Empieza en ingestion/src/metadata/utils/ssl_manager.py y sigue cómo SSLManager.setup_ssl construye el diccionario ssl para MySQL, Doris y StarRocks. Revisa cómo PyMySQL lee las opciones SSL dentro de ese diccionario; está terminado cuando la CA se usa para verificar el servidor y una CA incorrecta hace que la conexión falle.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Connector

MySQL

Feature area

Authentication / Connection

Describe the bug

A MySQL connection with sslConfig.caCertificate set encrypts the connection but never verifies the server certificate, and sslCertificate/sslKey are never presented.

SSLManager.setup_ssl for MysqlConnection (also Doris and StarRocks) builds connectionArguments["ssl"] = {"ssl_ca": ..., "ssl_cert": ..., "ssl_key": ...}. That dict is passed to PyMySQL as ssl=, and PyMySQL's _create_ssl_ctx reads the keys ca, cert and key. With no ca it sets verify_mode = CERT_NONE and check_hostname = False:

>>> Connection._create_ssl_ctx(None, {"ssl_ca": "ca.pem"})   # what OpenMetadata passes
verify_mode=CERT_NONE check_hostname=False
>>> Connection._create_ssl_ctx(None, {"ca": "ca.pem"})
verify_mode=CERT_REQUIRED check_hostname=True

(PyMySQL 2.2.8, as shipped with openmetadata-ingestion 2.1.0.0.) ssl_ca/ssl_cert/ssl_key are valid as top-level pymysql.connect keyword arguments, but not inside the ssl dict.

To Reproduce
  1. Set sslConfig.caCertificate on a MySQL service.
  2. Build the connection arguments with SSLManager.setup_ssl and pass the resulting ssl dict to pymysql.connections.Connection._create_ssl_ctx.
  3. The context has verify_mode=CERT_NONE and check_hostname=False, as shown above. I have not run a live connection against a wrong CA.
Expected behavior

The CA is used to verify the server (ca, cert, key inside the ssl dict), so a wrong CA fails the connection.

OS

Kubernetes (ingestion-base image)

Python version

3.12

OpenMetadata version

2.0.6

OpenMetadata Ingestion package version

openmetadata-ingestion==2.0.6.0; same code on main (ingestion/src/metadata/utils/ssl_manager.py).

Pre-submission checklist
  • I searched for duplicate issues.
  • I removed credentials, hostnames, emails, and other sensitive data from logs and config.
Lenguaje dominante
TypeScript
Estrellas
15.4k
Forks
2.4k
Merge medio
1 d 8 h
PR fusionados (30 d)
754

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de open-metadata/OpenMetadata

Todos los issues de open-metadata/OpenMetadata

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.