Pregunta

No tengo un buen conocimiento de los principios SSL, pero sólo quiere que el cifrado de trabajo para mí. Tengo una base de datos y un usuario con "requieren X509" especificado. Los certificados necesarios se han creado como se describe en la documentación de MySQL, y el trabajo bien -. I pueden conectarse al servidor desde la línea de comandos de Windows

El problema surge, cuando trato de hacer lo mismo de mi programa usando MySQL API de cliente (sin SSL, el programa también funciona bien). La unidad utilizada es: http://www.audio-data.de/mysql.html.

Estos son mis caminos de acción: 1) si sólo añadir mysql_ssl_set llamada () (con parametros adecuados) antes mysql_real_connect (), el último que da genérica Error de conexión SSL. 2) la documentación de MySQL en es / mysql-ssl-set.html por ejemplo, que la función siempre devuelve 0. Pero cuando he comprobado que, parecía que el resultado es el número 11150848. Entonces escribí de esa manera:

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

... y se repite la línea 8 veces. Cada vez que devuelve un número ligeramente mayor - 11158528, 11158784, 11159040, ... y dos ceros para las dos últimas llamadas

.

Después de lo cual mysql_real_connect () fue finalmente exitosa! El programa incluso logró ejecutar algunas consultas, devolver los resultados apropiados para ellos (sé los datos), pero luego se estrelló con una Violación de acceso: escritura de dirección ... en algún lugar. El punto de choque varió entre carreras y ligeros cambios en el código.

Se parece mucho a un problema de incompatibilidad de versiones. Probé bibliotecas tanto de MySQL 5.0 y 5.1 las instalaciones de Windows. (El servidor es de 5.1 y se ejecuta en Linux de forma remota, sin embargo, los programas 5.0 mysql-client no tienen problemas cuando SSL-conectarse a ella), pero sin éxito

Hay alguien familiarizado con el tema? una gran cantidad de la ayuda y lo siento por los errores en la pregunta, gracias.

¿Fue útil?

Solución

A mi la declaración mysql_ssl_set es incorrecta. Se declara:

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

Pero el mysql.h contiene:

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

Eso explica la basura en el valor de retorno, AV y así sucesivamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top