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]

Reply via email to