SSL+mySQL+Python, geht das?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
bicpi
User
Beiträge: 23
Registriert: Samstag 28. Mai 2005, 12:35

SSL+mySQL+Python, geht das?

Beitragvon bicpi » Dienstag 26. Juli 2005, 17:43

Hi, ich habe mir einen mySQL-Server mit SSL-Unterstützung kompiliert und die nötigen Zertifikate erstellt.
Gibt es nun eine Möglichkeit, von Python aus SSL-Verbindungen zum mySQL-Server aufzubauen? Wenn, ja, wie?
Benutzeravatar
jgollers
User
Beiträge: 42
Registriert: Freitag 29. November 2002, 12:23
Wohnort: Kirchlengern

Re: SSL+mySQL+Python, geht das?

Beitragvon jgollers » Mittwoch 27. Juli 2005, 09:56

bicpi hat geschrieben:Hi, ich habe mir einen mySQL-Server mit SSL-Unterstützung kompiliert und die nötigen Zertifikate erstellt.
Gibt es nun eine Möglichkeit, von Python aus SSL-Verbindungen zum mySQL-Server aufzubauen? Wenn, ja, wie?


Den gibt es wohl, denn im Befehl MySQLdb.connect kann ja das Argument ssl=... angegeben werden. Auf der Sourceforge-Seite von MySQLdb hab' ich folgenden Thread dazu entdeckt.

http://sourceforge.net/forum/message.php?msg_id=2856078

Ich weiß allerdings nicht ob dir das weiterhilft. (Leider bin ich PostgeSQL-Anwender und kann somit nicht so viel über MySQL sagen)

Jörg Gollers
bicpi
User
Beiträge: 23
Registriert: Samstag 28. Mai 2005, 12:35

Beitragvon bicpi » Mittwoch 27. Juli 2005, 14:23

Der Thread schaut schon mal sehr gut aus, Danke !
Werde das mal versuchen jetzt und berichte dann von den Erfahrungen :-)
bicpi
User
Beiträge: 23
Registriert: Samstag 28. Mai 2005, 12:35

Beitragvon bicpi » Mittwoch 27. Juli 2005, 16:50

Hi, also ich habe nun folgendes Progrämmchen geschrieben:.

Code: Alles auswählen

#!/usr/bin/env python

import MySQLdb

ssl_test = {}
ssl_test['ca'] = '/root/cacert.pem'
ssl_test['capath'] = '/root'
ssl_test['cert'] = '/root/client-cert.pem'
ssl_test['key'] = '/root/client.key'


verbindung = MySQLdb.connect(host='192.168.0.103', \
                             user='bicpi', \
                             passwd='geheim', \
                             db='bicpi', \
                             port=3306, \
                             compress=1, \
                             ssl=ssl_test)
c = verbindung.cursor()
c.execute('SELECT * from test_db')
erg = c.fetchall()
print erg


und das wird mit folgendem Fehler quittiert:

Code: Alles auswählen

Traceback (most recent call last):
  File "/root/mysql_ssl.py", line 18, in -toplevel-
    ssl=ssl_test)
  File "/usr/lib/python2.4/site-packages/MySQLdb/__init__.py", line 66, in Connect
    return Connection(*args, **kwargs)
  File "/usr/lib/python2.4/site-packages/MySQLdb/connections.py", line 134, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
NotSupportedError: client library does not have SSL support


Ich habe daraufhin noch das Packet "python-openssl" installiert, aber das hat auch nichts geholfen.

Was fehlt mir?
Benutzeravatar
jgollers
User
Beiträge: 42
Registriert: Freitag 29. November 2002, 12:23
Wohnort: Kirchlengern

Beitragvon jgollers » Mittwoch 27. Juli 2005, 18:15

bicpi hat geschrieben:Was fehlt mir?


Es sieht ganz so aus als ob deine MySQL Client Library keine SSL-Unterstützung bieten würde. Aber du hast ja schon gesagt, daß du MySQL mit SSL Unterstützung selbst kompiliert hast.

Kann man denn (ohne Python) mit dem MySQL-Client eine SSL-Verbindung zur Datenbank aufbauen?

Jörg Gollers
Gast

Beitragvon Gast » Donnerstag 28. Juli 2005, 13:48

Mit dem mySQL-Konsolen-Programm kann ich eine SSL-Verbindung aufbauen, ja. Das sagt zumindest ein STATUS auf der mySQL-Konsole ("SSL in use").
Jetzt hab ich mit

Code: Alles auswählen

spaceweb:~ # ldd /usr/lib/mysql/libmysqlclient.so
        linux-gate.so.1 =>  (0xffffe000)
        libcrypt.so.1 => /lib/libcrypt.so.1 (0x4011b000)
        libnsl.so.1 => /lib/libnsl.so.1 (0x4014e000)
        libm.so.6 => /lib/tls/libm.so.6 (0x40163000)
        libz.so.1 => /lib/libz.so.1 (0x40186000)
        libc.so.6 => /lib/tls/libc.so.6 (0x40197000)
        /lib/ld-linux.so.2 (0x80000000)


herausgefunden, dass da die Einträge "libssl" and "libcrypto" drin stehen sollten. Also muss ich die mySQL-Client Libraries rebuilden, aber ich hab keine Ahnung wie das geht. Weiss da jemand Bescheid?

bicpi
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Donnerstag 28. Juli 2005, 14:20

Aber der Fehler lautet "NotSupportedError". Könnte es vielleicht sein, das mySQLdb es nicht kann? Vielleicht eine zu alte Version?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jgollers
User
Beiträge: 42
Registriert: Freitag 29. November 2002, 12:23
Wohnort: Kirchlengern

Beitragvon jgollers » Donnerstag 28. Juli 2005, 16:43

jens hat geschrieben:Aber der Fehler lautet "NotSupportedError". Könnte es vielleicht sein, das mySQLdb es nicht kann? Vielleicht eine zu alte Version?


Ich glaube eher nicht. Die Fehlermeldung wird wohl in der _mysql.c von mySQLdb auf die Reise geschickt. Der Code an dieser Stelle lautet...

Code: Alles auswählen

#if HAVE_OPENSSL
      PyObject *value = NULL;
      _stringsuck(ca, value, ssl);
      _stringsuck(capath, value, ssl);
      _stringsuck(cert, value, ssl);
      _stringsuck(key, value, ssl);
      _stringsuck(cipher, value, ssl);
#else
      PyErr_SetString(_mysql_NotSupportedError,
            "client library does not have SSL support");
      return -1;


... und soviel ich weiß, wird HAVE_OPENSSL in der msql.h definiert.

(Aber ich bin mir da auch nicht (mehr) so ganz sicher.)

Jörg Gollers
bicpi
User
Beiträge: 23
Registriert: Samstag 28. Mai 2005, 12:35

Beitragvon bicpi » Freitag 29. Juli 2005, 13:06

Also die mySQLdb hab ich selbst neu kompiliert, aktuellste Version, daran kanns nicht liegen.

Wie krieg ich jetzt bloss diesen Support hinein?

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]