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?
SSL+mySQL+Python, geht das?
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.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?
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
Hi, also ich habe nun folgendes Progrämmchen geschrieben:.
und das wird mit folgendem Fehler quittiert:
Ich habe daraufhin noch das Packet "python-openssl" installiert, aber das hat auch nichts geholfen.
Was fehlt mir?
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
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
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.bicpi hat geschrieben:Was fehlt mir?
Kann man denn (ohne Python) mit dem MySQL-Client eine SSL-Verbindung zur Datenbank aufbauen?
Jörg Gollers
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
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
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)
bicpi
Ich glaube eher nicht. Die Fehlermeldung wird wohl in der _mysql.c von mySQLdb auf die Reise geschickt. Der Code an dieser Stelle lautet...jens hat geschrieben:Aber der Fehler lautet "NotSupportedError". Könnte es vielleicht sein, das mySQLdb es nicht kann? Vielleicht eine zu alte Version?
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;
(Aber ich bin mir da auch nicht (mehr) so ganz sicher.)
Jörg Gollers