Accès refusé avec accès en ssl ou X509
Bonsoir,
J'ai un sérieux problème pour avoir une connexion cryptée avec un client Windows (API C) et un serveur Windows (WAMP)
Sous Linux
----------
avec mysql_real_connect() sous linux avec SSL ou X509 tout est ok
Sous Windows
--------------
Pour ouvrir une console mysql avec tous les paramètres pour le ssl tout est ok
Ensuite, les bons paramètres je les mets dans my.ini de mysql de WAMP et j'ouvre une console mysql mais cette fois sans les paramètres ssl (puisqu'ils seront lus maintenant depuis my.ini) et tout est ok
J'essaie maintenant d'utiliser l'API C comme sous Linux et de me connecter avec mysql_real_connect() mais j'ai l'erreur suivante :
Accès refusé pour l'utilisateur: 'xxxx_SSL'@'@yyyyyyy' (mot de passe: OUI)
Pourquoi j'ai 2 fois @ !!! apparemment c'est le 2èmme qui est de trop, mais il viens d'où?
Si le serveur ne veux pas de SSL ou de X509 alors pas d'erreur, donc le user existe bien et la machine aussi.
Si je veux du SSL ou X509 j'ai toujours ces 2 * @
Même résultat si avant mysql_real_connect() je mets mysql_ssl_set() avec les bons paramètre comme pour ouvrir une console mysql
Avec :
MySQL client info : 5.7.24
MySQL server info : 5.7.19
que puis-je faire?
Merci d'avance, car j'y ai passé déjà plusieurs heures
Salutations
Philippe
Pour répondre à Artemus24
Salut Artemus24,
Oui, j'ai maintenant 2 problèmes! Pour le 1er ça peut attendre, mais pas pour le 2ème
En fait j'utilise un certificat pour le CA et une clé et un certificat pour le client.
j'ai utilisé la terminologie de WAMP, dans l'absolu, effectivement je lance une fenêtre CMD et dedans je lance le programme mysql avec les paramètres adéquats et donc bien finalement une console mysql!
Concernant le contenu de my.ini
Code:
1 2 3 4 5 6 7 8
|
[client]
;password = your_password
port = 3306
socket = /tmp/mysql.sock
ssl-ca = "E:\\Philippe\\Test\\ConcentratorSolution\\Configs\\Common1\\Cert\\ca-cert.pem"
ssl-cert = "E:\\Philippe\\Test\\ConcentratorSolution\\Configs\Common1\\Cert\\MySQL-client-cert.pem"
ssl-key = "E:\\Philippe\\Test\\ConcentratorSolution\\Configs\\Common1\\Cert\\MySQL-client-ppl-key.pem" |
Voila ce que donne show variables LIKE "%ssl%";
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
+---------------+--------------------------------------------------+
| Variable_name | Value |
+---------------+--------------------------------------------------+
| have_openssl | YES |
| have_ssl | YES |
| ssl_ca | C:/OpenSSL-Win64/bin/ca-cert.pem |
| ssl_capath | |
| ssl_cert | C:/OpenSSL-Win64/bin/MySQL-server-cert.pem |
| ssl_cipher | |
| ssl_crl | |
| ssl_crlpath | |
| ssl_key | C:/OpenSSL-Win64/bin/MySQL-server-ppless-key.pem |
+---------------+--------------------------------------------------+ |
et pour select user,host,ssl_type from mysql.user;
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
+-----------------+------------------+----------+
| user | host | ssl_type |
+-----------------+------------------+----------+
| root | localhost | |
| mysql.session | localhost | |
| mysql.sys | localhost | |
| Concentrato | 192.168.1.24 | |
| Concentrato | philippe-desktop | ANY |
| Concentrato_SSL | % | X509 |
| Concentrato | 192.168.1.50 | |
+-----------------+------------------+----------+
8 rows in set (0.00 sec) |
J'ai bien pour Concentrato_SSL le ssl_type X509
je répète, si je vais dans une fenêtre cmd et puis ensuite dans le répertoire où sont les fichiers pour le ssl et que je lance msql comme ceci :
E:\wamp64\bin\mysql\mysql5.7.19\bin\mysql -u Concentrato_SSL -p -h 192.168.1.24 --ssl-ca=./ca-cert.pem --ssl-cert=./MySQL-client-cert.pem --ssl-key=./MySQL-client-ppl-key.pem
ou puisque my.ini est rempli comme cela :
E:\wamp64\bin\mysql\mysql5.7.19\bin\mysql -u Concentrato_SSL -p -h 192.168.1.24
c'est tout bon, donc les fichiers sont donc nickel puisque j'ai bien
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
--------------
E:\wamp64\bin\mysql\mysql5.7.19\bin\mysql Ver 14.14 Distrib 5.7.19, for Win64 (
x86_64)
Connection id: 70
Current database:
Current user: Concentrato_SSL@LATITUDE
SSL: Cipher in use is DHE-RSA-AES256-SHA
Using delimiter: ;
Server version: 5.7.19 MySQL Community Server (GPL)
Protocol version: 10
Connection: 192.168.1.24 via TCP/IP
Server characterset: latin1
Db characterset: latin1
Client characterset: cp850
Conn. characterset: cp850
TCP port: 3306
Uptime: 15 hours 4 min 41 sec
Threads: 3 Questions: 494 Slow queries: 0 Opens: 172 Flush tables: 1 Open t
ables: 165 Queries per second avg: 0.009
-------------- |
Par contre si je mets un mot de passe faux :
ERROR 1045 (28000): AccSs refus' pour l'utilisateur: 'Concentrato_SSL'@'@LATITUDE' (mot de passe: OUI)
donc c'est pas l'histoire des 2 @ mais ailleurs
Quand je lance mysql_real_connect() j'ai ceci :
Accès refusé pour l'utilisateur: 'Concentrato_SSL'@'@LATITUDE' (mot de passe: OUI)
Si je supprime ssl_type je me connecte bien, mais j'ai pas mon cryptage!
A+
Philippe
Je ne trouve justement pas ce qu'il y a de faux!
Voici mon code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
TRACE_INFO(("key : '%s'", pcKEY));
TRACE_INFO(("cert : '%s'", pcCERT));
TRACE_INFO(("ca : '%s'", pcCA));
TRACE_INFO(("ca path : '%s'", pcCA_PATH));
TRACE_INFO(("cipher : '%s'", pcCIPHER));
mysql_ssl_set( &g_poConfigDB->sMySQL,
pcKEY, pcCERT,
pcCA,
pcCA_PATH,
pcCIPHER);
// unsigned int bfuiMode = SSL_MODE_REQUIRED;
// mysql_options(&g_poConfigDB->sMySQL, MYSQL_OPT_SSL_MODE, &bfuiMode);
// bfuiMode = 0;
// mysql_options(&g_poConfigDB->sMySQL, MYSQL_OPT_LOCAL_INFILE, &bfuiMode);
}
unsigned int bfuiMode = true;
// mysql_options(&g_poConfigDB->sMySQL, MYSQL_OPT_SSL_VERIFY_SERVER_CERT, &bfuiMode);
psConnection = mysql_real_connect( &g_poConfigDB->sMySQL,
pcIP,
pcUSER, acFullPassword, // User and password
"concentrator", // name of database
iPort, // port for connect to server
NULL, // socket
0 /*CLIENT_SSL*/ /* is internaly*/); // bitsfield
if (!psConnection)
{
TRACE_ERROR(("mysql_real_connect() failed : %s", mysql_error(&g_poConfigDB->sMySQL)));
cout << "mysql_real_connect() failed : " << mysql_error(&g_poConfigDB->sMySQL) << endl;
TRACE_OUT();
return false;
} |
Mon log dit bien
00002660 | HandleDB handledb.cpp 191 3 key : 'E:/Philippe/Test/ConcentratorSolution/Configs/Common1/Cert/MySQL-client-ppl-key.pem'
00002660 | HandleDB handledb.cpp 192 3 cert : 'E:/Philippe/Test/ConcentratorSolution/Configs/Common1/Cert/MySQL-client-cert.pem'
00002660 | HandleDB handledb.cpp 193 3 ca : 'E:/Philippe/Test/ConcentratorSolution/Configs/Common1/Cert/ca-cert.pem'
00002660 | HandleDB handledb.cpp 194 3 ca path : '(null)'
00002660 | HandleDB handledb.cpp 195 3 cipher : '(null)'
C'est les mêmes fichiers que pour la "console" mysql qui se connecte elle normalement sur mon serveur mysql en SSL ou en X509
Selon la doc, le dernier paramètre ne doit pas être CLIENT_SSL car c'est mis en interne
si je mets quand même CLIENT_SSL j'ai l'erreur suivante :
Mauvais 'handshake'
Donc, le problème n'est pas les fichiers puisque via console j'ai bien du X509 entre les 2 machines.
C'est l'API sous windows qui pose problème car sous debian, c'est nickel
A+
Philippe