curl / Mailing Lists / curl-library / Single Mail
Buy commercial curl support from WolfSSL. We help you work out your issues, debug your libcurl applications, use the API, port to new platforms, add new features and more. With a team lead by the curl founder himself.

Re: Curl and SSL in an IMB's OnDemand environment

From: Michael Rellstab via curl-library <curl-library_at_cool.haxx.se>
Date: Wed, 11 Sep 2019 09:18:39 +0000

Hi Daniel
Thanks for your response!

On 10.09.2019 17:38, Daniel Stenberg wrote:
> On Tue, 10 Sep 2019, Michael Rellstab via curl-library wrote:
>
>> Since several days I'm trying out to get my project to work, but I
>> don't have any success. Giving a short overview: I have to implement
>> a UserExit (callback routine) for the IBM's OnDemand Software. Inside
>> this UserExit I'm using CURL (linked as shared library). This works
>> perfectly as long as I don't use an SSL secured communication. As
>> soon as I activate SSL (TLS1.2), there is no communication anymore.
>
> This seems to assume a few things that you didn't explain.
>
> This "OnDemand Software" calls the callback you write. How is that
> using libcurl? Is this software linked with libcurl already so you're
> just calling the libcurl API from within this callback?
>
This is correct, OnDemand calls my code by callback function. I just
have to implement a method fulfilling a predefined signature, so
OnDemand will find the entry point inside my binary. My code is linked by:
gcc -m64 -fPIC -pthread -Wl,-eSECURITY -shared -lcurl -L/usr/lib64 -o
arsusec ${MY_OWN_OBJECT_FILES}

Then, I simply have to copy the compiled binary 'arsusec' into a
specific folder of OnDemand and thats it.

Do you mean, OnDemand itself has libcurl linked (statically?) into its
binaries? And my code uses this binary instead of the libcurl that is
installed on the Linux?

>> I'm running on a CentOS with the NSS SSL framework compiled into
>> CURL. When I use my UserExit without OnDemand (using the same source
>> code, but executed by my main function), CURL runs together with NSS
>> without any problems. As soon as my code runs in the context of
>> OnDemand, SSL is not working anymore. I expect, this has to do with
>> IBM's OnDemand, because they are using their GsKit as SSL framework.
>
> If you're using libcurl the same way but it behaves differently
> depending on which TLS backend that runs, then I think we can focus on
> the differences in the TLS backends.
>
> The gskit code in curl is virtually unmaintained and it is likely to
> be the worst TLS choice of all the TLS backends libcurl supports.
> gskit is also not available for me to use so I can't test or improve
> it either.
>

I'm not really sure if we simply can focus on the different TLS
backends. One thing I don't understand is, that in my code, I'm reading
out the CURL's versions by curl_version_info(). The result is:

2019-09-10 15:11:07 DEBUG CURL version:7.29.0
2019-09-10 15:11:07 DEBUG CURL ssl version:NSS/3.34

So I assume, the CURL which my code uses, is the CURL that is installed
on my Linux and therefore is the CURL that is compiled against NSS.
Some steps later I simply call curl_easy_perform(). Thats all.
Internally it is CURL that requests for an SSL connection. And here is
the point, I'm getting confused.
When the CURL, which my code is using, is compiled against NSS (CURL
explain me this by curl_version_info()), what could be the reason that
CURL wants to connect by Curl_gskit_connect_nonblocking?

2019-09-10 15:11:07 DEBUG == Info: Trying 192.168.27.108...
2019-09-10 15:11:07 DEBUG == Info: Connected to 192.168.27.108
(192.168.27.108) port 8443 (#0)
2019-09-10 15:11:07 DEBUG == Info: Curl_gskit_connect_nonblocking in

Shouldn't this be any other ssl connect method instead of a *gskit* method?
Which conditions must be met that CURL uses a gskit connection method
instead of any NSS connection method?

By the way I would also be happy, if I not must use gskit. It would be
nicer to me too, if my code runs with OpenSSL or NSS.

>> 2019-09-10 15:11:07 DEBUG    CURL version:7.29.0
>
> Can I also highlight that this is a *very* old curl version.
>
Yes, I am aware of this. 7.29.0 is the latest package for CentOS, but if
newer versions will solve my problem, it makes of course sense to
compile the newest CURL.

> I'd urge you to contact the OnDmeand support as they are the ones
> providing this API for you. And they provide a libcurl built with
> gskit for you. Alternatively, ask the gskit team how you can debug
> your gskit-using libcurl-omdemand application and its TLS connections.
> I don't see how we can help with that!
>
Because of my description above, I am not really sure if OnDemand is
intentionally providing libcurl for use. Perhaps that simply are
unfortunate circumstances that CURL + SSL behave that way. If OnDemand
intentionally providing libcurl, I would prefer to not use them, but
using the 'standard' libs from the OS instead.

By the way: I did some additional tests. I downloaded the lates CURL
source and compiled it together with OpenSSL. Additional, I also added a
code line curl_global_sslset(CURLSSLBACKEND_OPENSSL, NULL, NULL).
The result is the same. Although, CURL version and ssl framework have
changed now to 7.66.0-DEV and OpenSSL

2019-09-10 16:34:23 DEBUG    CURL version:7.66.0-DEV
2019-09-10 16:34:23 DEBUG    CURL host:x86_64-unknown-linux-gnu
2019-09-10 16:34:23 DEBUG    CURL features:28829D
2019-09-10 16:34:23 DEBUG    CURL ssl version:OpenSSL/1.0.2k-fips

CURL still uses gskit method for connection:

2019-09-10 16:34:23 DEBUG    == Info: Curl_gskit_connect_nonblocking in

So I am still confused...

-------------------------------------------------------------------
Unsubscribe: https://cool.haxx.se/list/listinfo/curl-library
Etiquette: https://curl.haxx.se/mail/etiquette.html
Received on 2019-09-11