On 11/6/2017 3:14 PM, Thomas Blom wrote:
>
>     On 11/6/2017 10:38 AM, Thomas Blom via curl-library wrote:
>>     Using curl 7.56.0, built against openssl-1.0.2l, I am using
>>     curl_easy_perform() to post to a server and receive results into
>>     a file using the CURLOPT_WRITEDATA and an open file handle.
>>
>>     This worked fine under both OSX and Windows using an http url,
>>     but when I use https, having installed certificates on the
>>     aws-linux server, I find that while OSX still works fine, windows
>>     (v10) now fails with error 60, "Peer certificate cannot be
>>     authenticated with given CA certificates".
>>
>>     The certs are cheap ones - PositiveSSL via Comodo.  
>>
>>     Reading https://curl.haxx.se/docs/sslcerts.html
>>     <https://curl.haxx.se/docs/sslcerts.html>, I think I understand
>>     that this depends on the CA "store" being used on the OS, so my
>>     guess was that OSX is trusting PostiveSSL, but Windows is not. 
>>     But, I find that if I navigate to this site with MS Edge, which
>>     presumably uses the same OS CA-store, it is fine with the https
>>     site, using those same certs.
>>
>>     I see in the doc referenced that I can defeat the peer validation
>>     with curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE), but
>>     I'd prefer a better solution, which may be just buying better
>>     certs?  This is software that is to be distributed and used by
>>     lots of folks, so it's not an option to just update the CA store
>>     on my windows machine so that this cert is trusted.
>     On Mon, Nov 6, 2017 at 1:02 PM, Ray Satiro via
>     curl-library <curl-library@cool.haxx.se
>     <mailto:curl-library@cool.haxx.se>> wrote :
>
>  
>
>     Disabling ssl verification for software in production is of very
>     limited use and usually wrong. In most cases you will want your
>     https transfers protected and authenticated. Check that your
>     computer's date and time is correct and that your certificate is
>     not expired. Since it is working in Edge those things are probably ok.
>
>     MS Edge is using the native certificate store because it's using
>     the native Schannel SSL (what we also call WinSSL). curl w/
>     OpenSSL in Windows does not do that, instead you have to supply
>     the SSL certificates. There is not enough information in your
>     report to tell whether you are supplying them. You can download a
>     standard certificate bundle [1] and rename it from cacert.pem to
>     curl-ca-bundle.crt and put it in the same directory as your
>     curl.exe. For libcurl you will need to set CURLOPT_CACERT [2] with
>     the location. Over time those certificates change and may need to
>     be updated. You could avoid all this by building curl to use
>     WinSSL instead, and then it will use the built in certificates
>     that are updated automatically by Microsoft.
>
>     My last guess as to what's happening if those things don't fit is
>     your server is not configured properly to send all the required
>     intermediate certificates. That is an error I've seen a few times
>     and often missed in testing. The reason is some clients will cache
>     intermediate certificates received from a server and then use
>     those certificates when they are missing from other servers.
>     Firefox (NSS) and Windows (SChannel) do that. So someone will test
>     in Firefox and think well their website works but actually Firefox
>     (or NSS I guess) is being helpful and just filling in the blanks.
>     And it may or may not work in some other Firefox depending on
>     whether the intermediate has been cached. As far as I know,
>     OpenSSL will not cache intermediates received from a server and
>     that is perfectly acceptable since it is your server's
>     responsibility to include those intermediates. Check that your
>     server is sending all the required intermediates.
>
>     If you still need help please reply with more information,
>     preferably your curl_version() and some way we can use to
>     reproduce. (Keep in mind this is a public mailing list so please
>     don't post anything sensitive.)
>
>     [1]: https://curl.haxx.se/docs/caextract.html
>     <https://curl.haxx.se/docs/caextract.html>
>     [2]: https://curl.haxx.se/libcurl/c/CURLOPT_CAINFO.html
>     <https://curl.haxx.se/libcurl/c/CURLOPT_CAINFO.html>
>
>
> I am *not* manually supplying the SSL certificates to libcurl
> (v7.56.0, using OpenSSL/1.0.2l), so this is likely the issue, but I
> was confused because on OSX the same code works fine -- that is, on
> OSX, the keychain/system-store is used, and it seems reasonable to
> assume that a default/system-store would be used on Windows as well. 
>
> I understand that libcurl built using Schannel/WinSSL will do this - I
> wonder why the same default bundle is not used for OpenSSL, or how I
> can discover what this path is so that I can manually tell libcurl to
> use it even if I prefer to use OpenSSL?  
>
> Since I write software that is cross-platform (OSX+Windows), I
> typically prefer to use the same libraries/source wherever possible,
> so that behavior can be expected to be as nearly identical as
> possible, and there are fewer total libraries to be concerned with. 
> Thus the decision to build libcurl using OpenSSL on both platforms.

OpenSSL has a CAPI engine that uses Windows native crypto but it doesn't
appear that feature was ever added [1] [2].

[1]:
http://openssl.6102.n7.nabble.com/Using-Windows-certificate-store-through-OpenSSL-td46788.html
[2]: https://rt.openssl.org/Ticket/Display.html?id=2158

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

Reply via email to