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 found

    unter PocketPC funktioniert das.

    Unter Win32 hab ich nun folgende Seite gefunden:
    http://www.codeproject.com/KB/IP/ssl_sockets.aspx?msg=2554356

    leider 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. 😉


Anmelden zum Antworten