2010-11-28 5 views
3

저는 SSL 원칙에 대한 지식이 없지만 저에게 맞는 암호화를 원합니다. "REQUIRE X509"가 지정된 사용자와 DB가 있습니다. 필요한 인증서는 MySQL 문서에 설명 된대로 만들어졌으며 잘 작동합니다. Windows 명령 줄에서 서버에 연결할 수 있습니다.Delphi 프로그램에서 SSL을 통해 원격 MySQL 서버에 연결

MySQL 클라이언트 API를 사용하여 내 프로그램에서 동일한 작업을 시도 할 때 문제가 발생합니다 (SSL없이 프로그램도 정상적으로 작동 함). 사용되는 단위는 http://www.audio-data.de/mysql.html입니다.

이들은 내 작업 경로입니다 :1) mysql_real_connect() 전에 mysql_ssl_set() 호출 (적절한 params 포함)을 추가하면 마지막 하나가 일반 SSL 연결 오류를 제공합니다. 2) en/mysql-ssl-set.html에있는 MySQL 문서는 함수가 항상 0을 반환한다고 말합니다.하지만 그 점을 확인하면 결과는 11150848이라는 숫자로 나타납니다. 다음과 같이 씁니다 :

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

... 그리고 8 번 반복합니다. 마지막으로 두 번 호출 할 때마다 11158528, 11158784, 11159040, ... 및 두 개의 0이 약간 더 큰 숫자를 반환 할 때마다.

마지막으로 mysql_real_connect()가 마침내 성공했습니다! 프로그램도 일부 쿼리를 실행하고, 데이터를 알고 적절한 결과를 반환하지만 액세스 위반으로 인해 추락했습니다. 충돌 지점은 실행과 약간의 코드 변경 사이에서 다양합니다.

버전 비 호환성 문제와 비슷합니다. MySQL 5.0 및 5.1 Windows 설치 (서버는 5.1이고 원격에서는 Linux에서 실행되지만 SSL 연결시 5.0 mysql-client 프로그램은 문제가 발생하지 않음)에서 라이브러리를 시도했지만 성공하지는 못했습니다.

아무도이 문제에 익숙하지 않습니까? 도움을 많이 주셔서 감사합니다 & 질문에 대한 실수에 사과드립니다.

답변

3

mysql_ssl_set 선언이 올바르지 않습니다. 그것은 선언 :

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

그러나 mysql.h가 포함되어 반환 값, AV의 등의 쓰레기를 설명

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

합니다.

+0

그랬습니다. 아마 내 시간을 많이 절약했을거야. Tanks. – hhyhbpen

관련 문제