2010-11-28 44 views
3

Je n'ai pas une bonne connaissance des principes SSL, mais je veux juste que le chiffrement fonctionne pour moi. J'ai un DB et un utilisateur avec "REQUIRE X509" spécifié. Les certificats nécessaires ont été créés comme décrit dans les documents MySQL, et fonctionnent bien - je peux me connecter au serveur à partir de la ligne de commande Windows.Connexion à un serveur MySQL distant à partir d'un programme Delphi via SSL

Le problème se pose, quand j'essaie de faire la même chose à partir de mon programme en utilisant MySQL Client API (sans SSL, le programme fonctionne aussi bien). L'unité utilisée est: http://www.audio-data.de/mysql.html.

Voici mes chemins d'action: 1) si j'ajoute juste l'appel à mysql_ssl_set() avec les paramètres appropriés avant mysql_real_connect(), le dernier donne une erreur de connexion SSL générique. 2) les docs MySQL dans en/mysql-ssl-set.html disent, que la fonction retourne toujours 0. Mais quand j'ai vérifié cela, il est apparu que le résultat est le numéro 11150848. Puis je l'ai écrit comme ça:

showmessage(inttostr(mysql_ssl_set(mys, '.\certs\client-key.pem', '.\certs\client-cert.pem', '.\certs\ca-cert.pem', nil))); 

... et répété la ligne 8 fois. Chaque fois qu'il a renvoyé un nombre légèrement supérieur - 11158528, 11158784, 11159040, ... et deux zéros pour les deux derniers appels. Après quoi, mysql_real_connect() a enfin réussi! Le programme a même réussi à exécuter quelques requêtes, renvoyer des résultats corrects pour eux (je connais les données), mais ensuite il s'est écrasé avec une violation d'accès: écriture d'adresse ... à un endroit. Le point d'impact a varié entre les exécutions et les légères modifications apportées au code.

Cela ressemble beaucoup à un problème d'incompatibilité de version. J'ai essayé les bibliothèques des installations de MySQL 5.0 et 5.1 (le serveur est 5.1 et fonctionne sous Linux à distance, cependant, les programmes 5.0 mysql-client n'ont pas de problème lors de la connexion SSL), mais sans succès.

Quelqu'un connaît-il le problème? Merci beaucoup pour l'aide & désolé pour les erreurs dans la question. Comme je vois la déclaration mysql_ssl_set est incorrecte.

Répondre

3

Il est déclaré:

function mysql_ssl_set(_mysql: PMYSQL; key, cert, ca, capath: PAnsiChar): longint; stdcall; 

Mais le mysql.h contient:

my_bool  STDCALL mysql_ssl_set(MYSQL *mysql, const char *key, 
         const char *cert, const char *ca, 
         const char *capath, const char *cipher); 

Cela explique la poubelle de la valeur de retour, AV de et ainsi de suite.

+0

C'est fait. Vous avez probablement économisé beaucoup de mon temps. Tnanks. – hhyhbpen