2010-12-01 3 views
6

Ich versuche, Django mit einer MySQL-Datenbank zu verbinden, auf die über eine SSL-Verbindung zugegriffen werden kann. Wie konfiguriere ich das?Wie verbinde ich Django über eine SSL-Verbindung mit einer MySQL-Datenbank?

Meine erste Schätzung würde die 'OPTIONS' Eigenschaft der Datenbankdefinition setzen. Ich kann jedoch keine Informationen darüber finden, welche Optionen zu verwenden sind. Die Option 'ssl': '/map/to/ca-cert.pem' funktioniert nicht.

Der folgende Befehl scheint zu funktionieren:

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

Edit: Ok, ich bin an der Python-mysqldb Dokumentation suchen ... vielleicht kann ich dort die Antwort finden.

Antwort

12

Django verwendet die Python MySQLdb Bibliothek, um mit MySQL zu kommunizieren. Mit Blick auf the MySQLdb connection documentation sieht es aus, als ob die ssl Option ein Wörterbuchargument erfordert. So könnte diese Arbeit:

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

Danke. Es funktioniert auch mit 'ca' anstelle von 'key'. Die Antwort war auf dieser Seite: http://dev.mysql.com/doc/refman/5.5/en/mysql-ssl-set.html –

+2

Es scheint, dass "ca" die richtige Option ist, "Schlüssel" für sich hat dazu geführt, dass MySQL den Inhalt nicht verifiziert hat. Lesen Sie mehr darüber hier: http://stackoverflow.com/questions/7287088/ca-ssl-parameter-for-python-mysqldb-not-working- but-key-does und hier: http: //bugs.mysql. com/bug.php? id = 62743 –

6

Der mysql-Client muss mit drei Tasten zur Verfügung gestellt werden:

CA cert Client-Zertifikat Client-Schlüssel

finden Sie in der Mysql-Dokumentation für die Anweisungen für diese Schlüssel erstellen und Einrichten des Servers: http://dev.mysql.com/doc/refman/5.5/en/creating-ssl-certs.html

ANMERKUNG: Es gibt ein offenes Problem, das mit der Verwendung von openssl v1.0.1 zum Erstellen der Zertifikate für mysql 5.5.x (http: // : //bugs.mysql.com/bug.php

id = 64870)

Dies ist ein Beispiel Eintrag für die Datei Django Einstellungen:

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

Ich bin nicht ganz sicher, ob das "Muss" im ersten Satz korrekt ist, es sei denn, Cert + Schlüssel ** Authentifizierung ** wird verwendet (im Gegensatz zur Verschlüsselung des Netzwerkverkehrs). – jblaine

0

ich eine „SSL-Verbindung Fehler bekommen: SSL_CTX_set_default_verify_paths fehlgeschlagen ‚) „Fehler beim python manage.py migrate

laufen habe ich pip django-mysql-ssl-Paket zu installieren. Es funktionierte immer noch nicht. Ich musste "ca" in "ssl-ca" ändern und jetzt funktioniert es.

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

          } 
         } 

Ich bin mir nicht sicher, ob es tatsächlich Verschlüsselung verwendet, aber es wirft keinen Fehler mehr. Ich verwende eine lokale Django-App, die mit einer AWS-mariaDB-Instanz verbunden ist.

Verwandte Themen