Didn't look carefully enough, so I'm not sure if I hit anything useful, but I found something that looks like a typo. > if ((!SSL_CTX_load_verify_locations(_contextPtr, _caFilePtr, _caFilePathPtr)) | > (!SSL_CTX_set_default_verify_paths(_contextPtr))) '|' should probably be '||'. ------------------------------------------------- Peter Kim Software Developer Xcert International Inc. URL: http://www.xcert.com homepage: http://home.xcert.com/~pckim ph 604 640 6210 ext 268 Explicitly trust my certificate or download the Xcert Internal Repository CA to verify my signature. URL: https://wsca.xcert.com:444/send-ca-cert.xuda?CA=3fb7cf984e10a9c46c5ac9deab0b f6f2 ------------------------------------------------- > I'm trying to add nonblocking https client-side retrieval to my > application. I'm getting an SSL_ERROR_SSL when I run it, after calling > SSL_write() for the first time, when the handshake needs to occur. The > error queue provides reason 276: SSL_R_UNINITIALIZED (see ssl_lib.c:733), > because handshake_func == 0 (it hasn't been initialized). > > I suspect I'm simply missing something in my initialization code. I'd be > grateful if you could identify where I'm going wrong or what I'm missing > with this brief code excerpt ... Many thanks. > > // Initialization > SSL_METHOD* _sslMethodPtr = SSLv23_client_method(); > OpenSSL_add_ssl_algorithms(); > SSL_load_error_strings(); > SSL_CTX* _contextPtr = SSL_CTX_new(_sslMethodPtr); > if (_contextPtr == NULL) {do_exit("_contextPtr failed to initialize");} > SSL_CTX_set_options(_contextPtr, SSL_OP_ALL|0); // Work around SSL bugs > char* _caFilePtr = 0; > char* _caFilePathPtr = 0; > if ((!SSL_CTX_load_verify_locations(_contextPtr, _caFilePtr, _caFilePathPtr)) | > (!SSL_CTX_set_default_verify_paths(_contextPtr))) > cout << "SSL init warning: error setting default verify locations. > Continuing anyway." << endl; // Upon execution this DOES print. Problem? > SSL* _connectionPtr = SSL_new(_contextPtr); > > > // Submit a connected nonblocking socket to OpenSSL > BIO* _sslBIOPtr = BIO_new_socket(_socketID, BIO_NOCLOSE); > SSL_set_bio(_connectionPtr, _sslBIOPtr, _sslBIOPtr); > SSL_set_connect_state(_connectionPtr); // Tells OpenSSL that at the next > operation a handshake should occur > > > // Write the GET request, implicitly performing the handshake > while (noTextRemainsToWrite()) { > long _charsWritten = SSL_write(_connectionPtr, _remainingTextPtr, _rtLength); > long _lastError = SSL_get_error(_connectionPtr, _charsWritten); > switch (_lastError) { > ... > case SSL_ERROR_SSL: > doExit("SSL ERROR 'SSL' recorded while attempting to write data to > socket"); > break; > }; > }; > > // Read the response > ... > // Deinitialization > ... > > ______________________________________________________________________ > OpenSSL Project http://www.openssl.org > User Support Mailing List [EMAIL PROTECTED] > Automated List Manager [EMAIL PROTECTED] ______________________________________________________________________ OpenSSL Project http://www.openssl.org User Support Mailing List [EMAIL PROTECTED] Automated List Manager [EMAIL PROTECTED]