Seite 1 von 1

SSL+mySQL+Python, geht das?

Verfasst: Dienstag 26. Juli 2005, 17:43
von bicpi
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?

Re: SSL+mySQL+Python, geht das?

Verfasst: Mittwoch 27. Juli 2005, 09:56
von jgollers
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

Verfasst: Mittwoch 27. Juli 2005, 14:23
von bicpi
Der Thread schaut schon mal sehr gut aus, Danke !
Werde das mal versuchen jetzt und berichte dann von den Erfahrungen :-)

Verfasst: Mittwoch 27. Juli 2005, 16:50
von bicpi
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?

Verfasst: Mittwoch 27. Juli 2005, 18:15
von jgollers
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

Verfasst: Donnerstag 28. Juli 2005, 13:48
von Gast
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

Verfasst: Donnerstag 28. Juli 2005, 14:20
von jens
Aber der Fehler lautet "NotSupportedError". Könnte es vielleicht sein, das mySQLdb es nicht kann? Vielleicht eine zu alte Version?

Verfasst: Donnerstag 28. Juli 2005, 16:43
von jgollers
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

Verfasst: Freitag 29. Juli 2005, 13:06
von bicpi
Also die mySQLdb hab ich selbst neu kompiliert, aktuellste Version, daran kanns nicht liegen.

Wie krieg ich jetzt bloss diesen Support hinein?