Zeos -> MySql (SSL)

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
baba
Beiträge: 265
Registriert: Mi 4. Apr 2007, 17:47

Zeos -> MySql (SSL)

Beitrag von baba »

Moin, moin,

ich muß wie oben schon beschrieben, auf einen MySQL Server 5.1 zugreifen. Da dieser Zugriff öffentlich über das Internet laufen soll, erfolgt die Verbindung via SSL. Hat hierzu schon jemand Erfahrungen mit Lazarus? Welche Komponenten sind die richtigen, Zeos?

Ist eine SQL-Verbindung über SSL mit Lazarus derzeit schon möglich? Wenn nein, gibt es eine andere sichere Möglichkeit?

Gruß
Baba.

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Zeos -> MySql (SSL)

Beitrag von monta »

baba hat geschrieben:Ist eine SQL-Verbindung über SSL mit Lazarus derzeit schon möglich? Wenn nein, gibt es eine andere sichere Möglichkeit?
Zeos oder SQL-DB, je nach Geschmack.

Zumindest Zeos unterstützt sicher auch SSL. Ich glaube allerdings, du brauchst die entsprechenden SSL-Libs dazu, dann sollte es recht simple wie ohne SSL gehen.
Aktuelle Version vorausgesetzt. In der 6.6.x ist es aber definitiv drin.

Code: Alles auswählen

SSL connections are supported using this connection properties (using mysql_sll_set library call) :
Properties.Strings = (
'MYSQL_SSL=TRUE'
'MYSQL_SSL_CA=D:/mysql/certs/ca-cert.pem'
'MYSQL_SSL_CERT=D:/mysql/certs/client-cert.pem'
'MYSQL_SSL_KEY=D:/mysql/certs/client-key.pem')
(steht in parameters.pdf, was im ZEOS-Archiv dabei ist)

SQLDB weiß ich nicht, ich nehm nie SSL, geht aber wahrscheinlich sehr ähnlich, probier es halt aus ;)
Johannes

KOBOLD Messring GmbH
Beiträge: 155
Registriert: Mi 22. Aug 2007, 14:52
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 65719 Hofheim am Taunus
Kontaktdaten:

Re: Zeos -> MySql (SSL)

Beitrag von KOBOLD Messring GmbH »

Mit Zeos geht's wunderbar (benutze im Moment Ver. 6.6.4 stable) - exakt wie oben von monta beschrieben. Bei der Ver. 6.6.0 war's noch nicht drin.
Mit meiner geliebten Lazarus TMySLQ50Connection geht es leider nicht, bzw. habe es nicht hinbekommen.
Ich versuche mich nämlich jetzt auch an einer Anwendung, die über das Internet auf einen MySQL-Server zugreift, und dort firmeninterne Daten abruft. Bis jetzt sieht es sehr gut aus (unter Linux), werde aber auch unter WinXP das zum Laufen bekommen müssen.

khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Re: Zeos -> MySql (SSL)

Beitrag von khh »

monta hat geschrieben:
baba hat geschrieben:Ist eine SQL-Verbindung über SSL mit Lazarus derzeit schon möglich? Wenn nein, gibt es eine andere sichere Möglichkeit?
Zeos oder SQL-DB, je nach Geschmack.

Zumindest Zeos unterstützt sicher auch SSL. Ich glaube allerdings, du brauchst die entsprechenden SSL-Libs dazu, dann sollte es recht simple wie ohne SSL gehen.
Aktuelle Version vorausgesetzt. In der 6.6.x ist es aber definitiv drin.

Code: Alles auswählen

SSL connections are supported using this connection properties (using mysql_sll_set library call) :
Properties.Strings = (
'MYSQL_SSL=TRUE'
'MYSQL_SSL_CA=D:/mysql/certs/ca-cert.pem'
'MYSQL_SSL_CERT=D:/mysql/certs/client-cert.pem'
'MYSQL_SSL_KEY=D:/mysql/certs/client-key.pem')
(steht in parameters.pdf, was im ZEOS-Archiv dabei ist)

SQLDB weiß ich nicht, ich nehm nie SSL, geht aber wahrscheinlich sehr ähnlich, probier es halt aus ;)
würde mich in diesem Zusammenhang interessieren, wie ssl mit ner firebird DB funktioniert ( ZEOS und Firebird 2.1 )

Gruss KH

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Zeos -> MySql (SSL)

Beitrag von mse »

khh hat geschrieben: würde mich in diesem Zusammenhang interessieren, wie ssl mit ner firebird DB funktioniert
http://www.firebirdfaq.org/faq113/
Auch 2.1 hat glaube ich keine interne SSL Unterstützung, auf jeden Fall habe ich sie nicht gefunden.

khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Re: Zeos -> MySql (SSL)

Beitrag von khh »

mse hat geschrieben:
khh hat geschrieben: würde mich in diesem Zusammenhang interessieren, wie ssl mit ner firebird DB funktioniert
http://www.firebirdfaq.org/faq113/
Auch 2.1 hat glaube ich keine interne SSL Unterstützung, auf jeden Fall habe ich sie nicht gefunden.
ich danke dir,
werd ich mich mal mit befassen


Gruss KH

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Zeos -> MySql (SSL)

Beitrag von mse »

KOBOLD Messring GmbH hat geschrieben: Mit meiner geliebten Lazarus TMySLQ50Connection geht es leider nicht, bzw. habe es nicht hinbekommen.
Da müsste man mysql_ssl_set() aufrufen. Das Problem ist, dass mysql_ssl_set() nach mysql_init() aber vor mysql_real_connect() aufgerufen werden muss und man da keinen Zugriff hat:

Code: Alles auswählen

procedure TConnectionName.ConnectMySQL(var HMySQL : PMySQL;H,U,P : pchar);
 
Var
  APort : Cardinal;
 
begin
  HMySQL := mysql_init(HMySQL);
  APort:=Abs(StrToIntDef(Params.Values['Port'],0));
  HMySQL:=mysql_real_connect(HMySQL,PChar(H),PChar(U),Pchar(P),Nil,APort,Nil,0);
  If (HMySQL=Nil) then
    MySQlError(Nil,SErrServerConnectFailed,Self);
end;
ConnectToServer könnte man überschreiben:

Code: Alles auswählen

procedure TConnectionName.ConnectToServer;
 
Var
  H,U,P : String;
 
begin
  H:=HostName;
  U:=UserName;
  P:=Password;
  ConnectMySQL(FMySQL,pchar(H),pchar(U),pchar(P));
  FServerInfo := strpas(mysql_get_server_info(FMYSQL));
  FHostInfo := strpas(mysql_get_host_info(FMYSQL));
end;
FServerInfo und FHostInfo sind privat und müssten allenfalls mittels crackerclass erreicht werden.

Ich habe mal die neue tmsemysqlconnection, welche für MySQL 5.0, 5.1 und zukünftige Versionen vergesehen ist, mit SSL Support ausgerüstet - es scheint zu funktionieren (trunk 2846). Wie bist du zu SSL fähigen dll's und Server gekommen? Selbst kompiliert? Falls du eine nicht SSL fähige dll verwendest und der Server nicht auf Verschlüsselung besteht, werden die SSL Parameter möglicherwiese ohne Fehlermeldung ignoriert.

KOBOLD Messring GmbH
Beiträge: 155
Registriert: Mi 22. Aug 2007, 14:52
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 65719 Hofheim am Taunus
Kontaktdaten:

Re: Zeos -> MySql (SSL)

Beitrag von KOBOLD Messring GmbH »

werden die SSL Parameter möglicherwiese ohne Fehlermeldung ignoriert.
Für MySQL: Zum Testen solltest Du unbedingt einen User (auf dem Server) mit "REQUIRE SSL" anlegen,
Wenn Du eine Verbindung zum Server hinbekommen hast, prüfe in einer Abfrage
"SHOW STATUS LIKE 'Ssl_cipher'"
ob Du wirklich eine SSL-Verbindung hast: Wenn ja, kommt da sowas wie "DHE-RSA-AES256-SHA" als Antwort, wenn nein ein Leerstring
Das ganze von der Serverseite gut beschrieben in:
http://dev.mysql.com/doc/refman/5.0/en/ ... g-ssl.html" onclick="window.open(this.href);return false;

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Zeos -> MySql (SSL)

Beitrag von mse »

KOBOLD Messring GmbH hat geschrieben: ob Du wirklich eine SSL-Verbindung hast: Wenn ja, kommt da sowas wie "DHE-RSA-AES256-SHA" als Antwort, wenn
Yup, tmsemysqlconnection macht genau diesen Test.

Code: Alles auswählen

if (myo_ssl in foptions) and (mysql_get_ssl_cipher <> nil) then begin
  actcipher:= mysql_get_ssl_cipher(hmysql);
  if actcipher =  nil then begin
   closeconnection(hmysql);
   databaseerror('Can not encrypt connection.',self);
  end;
 end;
Hast du die MySQL clientdll selbst compiliert?

Antworten