SSL Verbindung
-
Hallo zusammen!
Ich habe ein CLient-Server-Programm. Die Sockets dabei werden über die WindowsAPI erzeugt. Jetzt fange ich an, SSL-Support einzurichten. Dabei soll das Programm für PocketPC2003 und für X86 compilierbar sein.
Für PocketPC habe ich folgendes implementiert:
// register certificate validation callback SSLVALIDATECERTHOOK sslValidateFunc; sslValidateFunc.HookFunc = &CertValidateSimple; sslValidateFunc.pvArg = m_Validator; DWORD optval = SO_SEC_SSL; DWORD dwBytes = 0; if (SOCKET_ERROR == setsockopt(m_nSocket, SOL_SOCKET, SO_SECURE, (LPSTR)&optval, sizeof(optval))) { return false; } if (SOCKET_ERROR == WSAIoctl(m_nSocket, SO_SSL_SET_VALIDATE_CERT_HOOK, &sslValidateFunc, sizeof(sslValidateFunc), NULL, 0, &dwBytes, NULL, NULL)){ return false; }Dies funzt auch soweit. Nur für X86 lässt sich der Code nicht compilieren. Was kann ich ändern, um nicht 2 große Weichen (#ifdefs) zu haben ?
Danke
Holodoc
-
Wie machst du es denn für x86 ?
Wenn genauso: Welche Fehler ?
-
also wenn ich für WIN32 compiliere, dann erhalte ich folgendes:
1>.\source\ClientSocket.cpp(99) : error C2065: 'SSLVALIDATECERTHOOK' : undeclared identifier
1>.\source\ClientSocket.cpp(99) : error C2146: syntax error : missing ';' before identifier 'sslValidateFunc'
error C2065: 'sslValidateFunc' : undeclared identifier
error C2065: 'sslValidateFunc' : undeclared identifier
error C2228: left of '.HookFunc' must have class/struct/union
1> type is ''unknown-type''
error C2065: 'sslValidateFunc' : undeclared identifier
error C2228: left of '.pvArg' must have class/struct/union
1> type is ''unknown-type''
error C2065: 'SO_SEC_SSL' : undeclared identifier
error C2065: 'SO_SECURE' : undeclared identifier
error C2065: 'SO_SSL_SET_VALIDATE_CERT_HOOK' : undeclared identifier
error C2065: 'sslValidateFunc' : undeclared identifier
error C2065: 'sslValidateFunc' : undeclared identifier
error C2070: ''unknown-type'': illegal sizeof operand
error C3861: 'WSAIoctl': identifier not foundunter PocketPC funktioniert das.
Unter Win32 hab ich nun folgende Seite gefunden:
http://www.codeproject.com/KB/IP/ssl_sockets.aspx?msg=2554356leider funktioniert dieses Beispiel widerum nicht unter PocketPC2003:
1>Linking...
1>ssl.obj : error LNK2019: unresolved external symbol DecryptMessage referenced in function "public: int __cdecl SSL_SOCKET::s_recv(char *,int)" (?s_recv@SSL_SOCKET@@QAAHPADH@Z)
1>ssl.obj : error LNK2019: unresolved external symbol EncryptMessage referenced in function "public: int __cdecl SSL_SOCKET::s_ssend(char *,int)" (?s_ssend@SSL_SOCKET@@QAAHPADH@Z)
1>ssl.obj : error LNK2019: unresolved external symbol CertVerifyRevocation referenced in function "public: long __cdecl SSL_SOCKET::Verify(struct _CERT_CONTEXT const *)" (?Verify@SSL_SOCKET@@QAAJPBU_CERT_CONTEXT@@@Z)
1>ssl.obj : error LNK2019: unresolved external symbol CertCreateSelfSignCertificate referenced in function "public: struct _CERT_CONTEXT const * __cdecl SSL_SOCKET::CreateOurCertificate(void)" (?CreateOurCertificate@SSL_SOCKET@@QAAPBU_CERT_CONTEXT@@XZ)
1>ssl.obj : error LNK2019: unresolved external symbol __security_cookie referenced in function __catch$36228
1>tel.obj : error LNK2001: unresolved external symbol __security_cookie
1>ssl.obj : error LNK2019: unresolved external symbol __security_check_cookie referenced in function "public: struct _CERT_CONTEXT const * __cdecl SSL_SOCKET::CreateOurCertificate(void)" (?CreateOurCertificate@SSL_SOCKET@@QAAPBU_CERT_CONTEXT@@XZ)
1>tel.obj : error LNK2001: unresolved external symbol __security_check_cookie
1>LIBCMTD.lib(gshandler.obj) : error LNK2001: unresolved external symbol __security_check_cookie
1>tel.obj : error LNK2019: unresolved external symbol OleInitialize referenced in function main
1>corelibc.lib(pegwmain.obj) : error LNK2019: unresolved external symbol WinMain referenced in function WinMainCRTStartup
1>Pocket PC 2003 (ARMV4)\Debug/SSLTest.exe : fatal error LNK1120: 8 unresolved externals
-
Hm, da fällt mir nur noch das ein:
#ifdef WIN32 //Windows Code #else //Pocket PC code #endif
-
Danke, aber genau das wollte ich eigentlich verhindern, auch da der Code complett unterschiedlich aufgebaut ist.
-
Aber wahrscheinlich geht das nicht anders, da beide Systeme ganz andere libs verwenden...
Was ist daran eigentlich so schlecht ?
Schreib dir halt Funktionen wie "SSL_recv", "SSL_create" oder "SSL_send".
In die packst du dann das "#ifdef" und rufts die Funktion dann auf.