On 6/18/2020 1:27 PM, Peter Bushnell via curl-library wrote:
Have added curl source to build a statically compiled libcurl.a to a multi-platform application which cross-compiles binaries for on Linux for Windows and Mac. The application on Linux and Mac work as expected, but when calling curl_easy_perform with a HTTPS URL a 77 error code is returned. During configure the following ca bundle path is set.

/etc/ssl/certs/ca-certificates.crt

When configuring for Windows the same cert is set which can obviously not be found in a Windows environment. Hoping that I only need to set --with-ca-path or --with-ca-bundle but I've not been able to work out what it should be set to. The advice I've seen online is for people to download the cert which allows my cross-compiled curl.exe to work with SSL, but does not seem to work if placed in the same directory as the application. Tried setting the CA bundle path to ./ without luck and also tried SSPI but that did not make a difference.

Setting the following allows calls to HTTPS to work, this shows that libcurl has been successfully compiled, linked and can work but obviously this is not desired behaviour.

curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);

Compiling with the following configure options:

./configure --disable-shared --enable-static --disable-ldap --disable-sspi --without-librtmp --disable-ftp --disable-file --disable-dict --disable-telnet --disable-tftp --disable-rtsp --disable-pop3 --disable-imap --disable-smtp --disable-gopher --disable-smb --host=x86_64-w64-mingw32

Configure output:

configure: Configured to build curl/libcurl:

  Host setup:       x86_64-w64-mingw32
  Install prefix: /mnt/d/github/pyrk-win64/depends/x86_64-w64-mingw32
  Compiler:         x86_64-w64-mingw32-gcc
   CFLAGS:          -pipe -O2 -pthread
   CPPFLAGS:        -isystem /mnt/d/github/pyrk-win64/depends/x86_64-w64-mingw32/include -isystem /mnt/d/github/pyrk-win64/depends/x86_64-w64-mingw32/include    LDFLAGS: -L/mnt/d/github/pyrk-win64/depends/x86_64-w64-mingw32/lib -L/mnt/d/github/pyrk-win64/depends/x86_64-w64-mingw32/lib
   LIBS:            -lssl -lcrypto -lssl -lcrypto -lgdi32 -lws2_32

  curl version:     7.70.0
  SSL:              enabled (OpenSSL)
  SSH:              no      (--with-{libssh,libssh2})
  zlib:             no      (--with-zlib)
  brotli:           no      (--with-brotli)
  GSS-API:          no      (--with-gssapi)
  TLS-SRP:          enabled
  resolver:         POSIX threaded
  IPv6:             enabled
  Unix sockets:     no      (--enable-unix-sockets)
  IDN:              no      (--with-{libidn2,winidn})
  Build libcurl:    Shared=no, Static=yes
  Built-in manual:  enabled
  --libcurl option: enabled (--disable-libcurl-option)
  Verbose errors:   enabled (--disable-verbose)
  Code coverage:    disabled
  SSPI:             no      (--enable-sspi)
  ca cert bundle:   /etc/ssl/certs/ca-certificates.crt
  ca cert path:     no
  ca fallback:      no
  LDAP:             no      (--enable-ldap / --with-ldap-lib / --with-lber-lib)
  LDAPS:            no      (--enable-ldaps)
  RTSP:             no      (--enable-rtsp)
  RTMP:             no      (--with-librtmp)
  Metalink:         no      (--with-libmetalink)
  PSL:              no      (libpsl not found)
  Alt-svc:          no      (--enable-alt-svc)
  HTTP2:            disabled (--with-nghttp2)
  HTTP3:            disabled (--with-ngtcp2, --with-quiche)
  ESNI:             no      (--enable-esni)
  Protocols:        HTTP HTTPS
  Features:         SSL IPv6 AsynchDNS NTLM TLS-SRP HTTPS-proxy

Any help on this would be appreciated.

On Windows the curl command line tool (curl.exe) will check environment variables like CURL_CA_BUNDLE and if not found then search paths. [1][2][3] libcurl doesn't do that, if you have no compile-time path then you would need to detect the location yourself and use CURLOPT_CAINFO [4] to set it.

If you use the Schannel backend (native WIndows SSL) instead of OpenSSL then you do not need a separate bundle of certificates, the Windows OS certificate store is used by default. The next version of curl (7.71, to be released next week) will support that for OpenSSL but not by default, you would use CURLSSLOPT_NATIVE_CA [5] to enable it.


[1]: https://curl.haxx.se/docs/sslcerts.html
[2]: https://github.com/curl/curl/blob/curl-7_70_0/src/tool_operate.c#L2261-L2339 [3]: https://github.com/curl/curl/blob/curl-7_70_0/src/tool_doswin.c#L598-L644
[4]: https://curl.haxx.se/libcurl/c/CURLOPT_CAINFO.html
[5]: https://curl.haxx.se/libcurl/c/CURLOPT_SSL_OPTIONS.html

-------------------------------------------------------------------
Unsubscribe: https://cool.haxx.se/list/listinfo/curl-library
Etiquette:   https://curl.haxx.se/mail/etiquette.html

Reply via email to