2010-07-04 20 views
5

Ich setze meine Datenbank auf SSL erforderlich. Ich habe bestätigt, dass ich über die Befehlszeile eine Verbindung zur db herstellen kann, indem ich den öffentlichen Schlüssel übergebe [und bestätigt habe, dass ich keine Verbindung herstellen kann, wenn ich den öffentlichen Schlüssel nicht überlasse]Python MySQLDB SSL-Verbindung

Ich bekomme den gleichen Fehler in meiner Django-App als wenn Ich gebe keinen Schlüssel weiter. Es scheint, dass ich meine settings.py nicht richtig eingerichtet habe, um den Pfad zum öffentlichen Schlüssel zu übergeben.

Was stimmt nicht mit meinen Einstellungen? Ich benutze Python-Mysqldb.

DATABASES['default'] = { 
    'ENGINE': 'django.db.backends.mysql', 
    'HOST': 'my-host-goes-here', 
    'USER': 'my-user-goes-here', 
    'NAME': 'my-db-name-goes-here', 
    'PASSWORD': 'my-db-pass-goes-here', 
    'OPTIONS': { 
     'SSL': '/path/to/cert.pem', 
    } 
} 
+0

Können Sie mit nacktem 'MySQLdb' verbinden? –

+0

Ja, ich kann die folgenden Anweisungen folgen: http://riskable.com/?p=271 aber ich kann nicht scheinen, das Äquivalent zu finden, wie ssl_settings in djangos Datenbankoptionen auszudrücken. –

Antwort

8

Die Antwort gefunden. OPTIONS sollte wie folgt aussehen:

'OPTIONS': {'ssl': {'ca':'/path/to/cert.pem',},}, 

Achten Sie darauf, die Kommas halten, Parsing schien sonst zum Scheitern verurteilt?

1

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

CA cert Client-Zertifikat Client-Schlüssel

die Mysql-Dokumentation für die Anweisungen für diese Schlüssel erstellen und den Server einrichten: 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 zur Erstellung der Zertifikate für mysql 5.5.x (http://bugs.mysql.com/bug.php?id=64870)

zu tun zu haben scheint

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>' 
           } 
          } 
      } 
}