2010-12-01 22 views
6

Estoy intentando conectar Django a una base de datos mysql a la que se puede acceder a través de una conexión ssl. ¿Cómo configuro esto?¿Cómo conectar Django a una base de datos mysql a través de una conexión SSL?

Mi primera suposición sería establecer la propiedad 'OPCIONES' de la definición de la base de datos. Sin embargo, no puedo encontrar información sobre qué opciones posibles usar. La opción 'ssl': '/map/to/ca-cert.pem' no funciona.

El siguiente comando parece funcionar:

mysql -h url.to.host -u lizard -p --ssl-ca=./ca-cert.pem 

Editar: Ok estoy buscando en la documentación de Python-MySQLdb ... tal vez pueda encontrar la respuesta allí.

Respuesta

12

Django usa la biblioteca Python MySQLdb para interactuar con MySQL. Mirando the MySQLdb connection documentation, parece que la opción ssl requiere un argumento de diccionario. Así que esto podría funcionar:

'OPTIONS': {'ssl': {'key': '/map/to/ca-cert.pem'}} 
+0

Gracias. También funciona con 'ca' en lugar de 'clave'. La respuesta estaba en esta página: http://dev.mysql.com/doc/refman/5.5/en/mysql-ssl-set.html –

+2

Parece que 'ca' es la opción correcta, 'clave' por sí mismo provocó que MySQL no verificara los contenidos. Obtenga más información al respecto aquí: http://stackoverflow.com/questions/7287088/ca-ssl-parameter-for-python-mysqldb-not-working-but-key-does y aquí: http: //bugs.mysql. com/bug.php? id = 62743 –

6

El cliente mysql debe estar provisto de tres teclas:

CA cert cliente cert cliente clave

Consulte la documentación de MySQL para las instrucciones para la creación de estas teclas y configurar el servidor: http://dev.mysql.com/doc/refman/5.5/en/creating-ssl-certs.html

NOTA: Hay un problema abierto que parece estar relacionado con el uso de openssl v1.0.1 para crear los certificados para mysql 5.5.x (http : //bugs.mysql.com/bug.php id = 64870)

Ésta es una entrada de ejemplo para el archivo de configuración de Django:?

DATABASES = { 
'default': { 
       'ENGINE': 'django.db.backends.mysql', 
       'NAME': '<DATABASE NAME>',      
       'USER': '<USER NAME>', 
       'PASSWORD': '<PASSWORD>', 
       'HOST': '<HOST>', 
       'PORT': '3306'  
       'OPTIONS': { 
         'ssl': {'ca': '<PATH TO CA CERT>', 
           'cert': '<PATH TO CLIENT CERT>', 
           'key': '<PATH TO CLIENT KEY>' 
           } 
          } 
      } 
} 
+1

No estoy del todo seguro de que el "debe ser" en la primera oración sea correcto a menos que se esté utilizando cert + key ** authentication (en contraste con solo encriptar el tráfico de la red). – jblaine

0

que estaba recibiendo un "error de conexión SSL: SSL_CTX_set_default_verify_paths falló ') "error al ejecutar python manage.py migrate

Utilicé pip para instalar el paquete django-mysql-ssl. Todavía no estaba funcionando. Tuve que cambiar "ca" por "ssl-ca" y ahora funciona.

'OPTIONS': { 
        'ssl': {'ssl-ca': '<PATH TO CA CERT>', 

          } 
         } 

No estoy seguro de si realmente está utilizando el cifrado, pero ya no arroja un error. Estoy ejecutando la aplicación django local conectada a una instancia de AWS mariaDB.

Cuestiones relacionadas