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]