Commit Graph

1164 Commits

Author SHA1 Message Date
Jay Satiro
8b1cae63b7 gtls: fix build for disabled TLS-SRP
Prior to this change if, at build time, the GnuTLS backend was found to
have TLS-SRP support (HAVE_GNUTLS_SRP) but TLS-SRP was disabled in curl
via --disable-tls-srp (!USE_TLS_SRP) then a build error would occur.

Bug: https://curl.se/mail/lib-2022-03/0046.html
Reported-by: Robert Brose

Closes https://github.com/curl/curl/pull/8604
2022-03-22 14:24:08 -04:00
Jan Venekamp
3b4a353025
BearSSL: add CURLOPT_SSL_CTX_FUNCTION support
Closes #8478
2022-03-12 23:03:37 +01:00
Jan Venekamp
f5d79619b1
BearSSL: add CURLOPT_SSL_CIPHER_LIST support
Closes #8477
2022-03-12 22:59:45 +01:00
Jean-Philippe Menil
680245cd39
openssl: check SSL_get_peer_cert_chain return value
Signed-off-by: Jean-Philippe Menil <jpmenil@gmail.com>
Closes #8579
2022-03-11 07:45:35 +01:00
Tatsuhiro Tsujikawa
c82b281e17
ngtcp2: add client certificate authentication for OpenSSL
Closes #8522
2022-03-10 08:41:37 +01:00
Daniel Stenberg
911714d617
openssl: fix CN check error code
Due to a missing 'else' this returns error too easily.

Regressed in: d15692ebb

Reported-by: Kristoffer Gleditsch
Fixes #8559
Closes #8560
2022-03-08 15:59:04 +01:00
lwthiker
68dc5bcd46
openssl: enable CURLOPT_SSL_EC_CURVES with BoringSSL
The CURLOPT_SSL_EC_CURVES option (used by the '--curves' flag) in
libcurl was ignored when compiling with BoringSSL because
HAVE_SSL_CTX_SET_EC_CURVES was explicitly disabled if BoringSSL was
detected.  However, this feature is supported in BoringSSL since
5fd1807d. This commit enables it, and also reduces the required minimal
OpenSSL version to 1.0.2 as per OpenSSL's official documentation.

Fixes #8553
Closes #8556
2022-03-08 09:11:19 +01:00
Daniel Stenberg
471d5f44c5
wolfssl: fix compiler error without IPv6
Reported-by: Joseph Chen
Fixes #8550
Closes #8552
2022-03-07 09:47:26 +01:00
MAntoniak
e9e79622d0
vtls: fix socket check conditions
fix condition to check the second socket during associate and
disassociate connection

Closes #8493
2022-02-22 13:39:54 +01:00
Jay Satiro
f7ba0eccf7 openssl: check if sessionid flag is enabled before retrieving session
Ideally, Curl_ssl_getsessionid should not be called unless sessionid
caching is enabled. There is a debug assertion in the function to help
ensure that. Therefore, the pattern in all vtls is basically:

  if(primary.sessionid) {lock(); Curl_ssl_getsessionid(...); unlock();}

There was one instance in openssl.c where sessionid was not checked
beforehand and this change fixes that.

Prior to this change an assertion would occur in openssl debug builds
during connection stage if session caching was disabled.

Reported-by: Jim Beveridge

Fixes https://github.com/curl/curl/issues/8472
Closes https://github.com/curl/curl/pull/8484
2022-02-21 03:23:47 -05:00
MAntoniak
ccc2752ce8
ssl: reduce allocated space for ssl backend when FTP is disabled
Add assert() for the backend pointer in many places

Closes #8471
2022-02-21 08:39:55 +01:00
Jan Venekamp
14d9358a0c sectransp: mark a 3DES cipher as weak
- Change TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA strength to weak.

All other 3DES ciphers are already marked as weak.

Closes https://github.com/curl/curl/pull/8479
2022-02-20 16:13:31 -05:00
Jan Venekamp
f36e32b5b8 bearssl: fix EXC_BAD_ACCESS on incomplete CA cert
- Do not create trust anchor object for a CA certificate until after it
  is processed.

Prior to this change the object was created at state BR_PEM_BEGIN_OBJ
(certificate processing begin state). An incomplete certificate (for
example missing a newline at the end) never reaches BR_PEM_END_OBJ
(certificate processing end state) and therefore the trust anchor data
was not set in those objects, which caused EXC_BAD_ACCESS.

Ref: https://github.com/curl/curl/pull/8106

Closes https://github.com/curl/curl/pull/8476
2022-02-20 02:52:56 -05:00
Jan Venekamp
8af1cef29e bearssl: fix connect error on expired cert and no verify
- When peer verification is disabled use the x509_decode engine instead
  of the x509_minimal engine to parse and extract the public key from
  the first cert of the chain.

Prior to this change in such a case no key was extracted and that caused
CURLE_SSL_CONNECT_ERROR. The x509_minimal engine will stop parsing if
any validity check fails but the x509_decode won't.

Ref: https://github.com/curl/curl/pull/8106

Closes https://github.com/curl/curl/pull/8475
2022-02-20 02:47:50 -05:00
Jan Venekamp
b84437194c bearssl: fix session resumption (session id)
Prior to this change br_ssl_client_reset was mistakenly called with
resume_session param set to 0, which disabled session resumption.

Ref: https://github.com/curl/curl/pull/8106

Closes https://github.com/curl/curl/pull/8474
2022-02-20 02:47:06 -05:00
MAntoniak
bbe7042113
openssl: fix build for version < 1.1.0
Closes #8470
2022-02-18 08:08:04 +01:00
Joel Depooter
df957e1003
schannel: move the algIds array out of schannel.h
This array is only used by the SCHANNEL_CRED struct in the
schannel_acquire_credential_handle function. It can therefore be kept as
a local variable. This is a minor update to
bbb71507b7.

This change also updates the NUM_CIPHERS value to accurately count the
number of ciphers options listed in schannel.c, which is 47 instead of
45. It is unlikely that anyone tries to set all 47 values, but if they
had tried, the last two would not have been set.

Closes #8469
2022-02-18 08:03:22 +01:00
Kevin Adler
eb13cc2927
gskit: Convert to using Curl_poll
As mentioned in 32766cb, gskit was the last user of Curl_select which is
now gone. Convert to using Curl_poll to allow build to work on IBM i.

Closes #8454
2022-02-16 09:27:39 +01:00
Kevin Adler
657687fb17
gskit: Fix initialization of Curl_ssl_gskit struct
In c30bf22, Curl_ssl_getsock was factored out in to a member of
struct Curl_ssl but the gskit initialization was not updated to reflect
this new member.

Closes #8454
2022-02-16 09:27:36 +01:00
Kevin Adler
9234547c34
gskit: Fix errors from Curl_strerror refactor
2f0bb864c1 replaced sterror with Curl_strerror, but the strerror buffer
shadows the set_buffer "buffer" parameter. To keep consistency with the
other functions that use Curl_strerror, rename the parameter.

In addition, strerror.h is needed for the definition of STRERROR_LEN.

Closes #8454
2022-02-16 09:27:22 +01:00
Henrik Holst
65c6e37fe3
hostcheck: reduce strlen calls on chained certificates
Closes #8428
2022-02-13 11:42:47 +01:00
Daniel Stenberg
e1667a61ea
wolfssl: return CURLE_AGAIN for the SSL_ERROR_NONE case
Closes #8431
2022-02-11 12:36:52 +01:00
Daniel Stenberg
327ef30530
wolfssl: when SSL_read() returns zero, check the error
Returning zero indicates end of connection, so if there's no data read
but the connection is alive, it needs to return -1 with CURLE_AGAIN.

Closes #8431
2022-02-11 10:48:52 +01:00
Daniel Stenberg
d15692ebba
hostcheck: pass in pattern length too, to avoid a strlen call
Removes one strlen() call per SAN name in a cert-check.

Closes #8418
2022-02-10 08:53:34 +01:00
Daniel Stenberg
27614355bf
x509asn1: toggle off functions not needed for diff tls backends
... and clean the header file from private defines/structs (move to C
file) and unused function prototypes.

Closes #8386
2022-02-05 00:11:34 +01:00
Daniel Stenberg
9478a97035
lib: move hostcheck and x509sn1 sources to vtls/
... since they are used strictly by TLS code.

Closes #8386
2022-02-05 00:11:33 +01:00
Daniel Stenberg
2610142139
lib: remove support for CURL_DOES_CONVERSIONS
TPF was the only user and support for that was dropped.

Closes #8378
2022-02-04 08:05:35 +01:00
MAntoniak
2cd6d7e462
mbedtls: enable use of mbedtls without filesystem functions support
Closes #8376
2022-02-03 09:39:11 +01:00
Daniel Stenberg
3267ac40da
nss: handshake callback during shutdown has no conn->bundle
The callback gets called because of the call to PR_Recv() done to
attempt to avoid RST on the TCP connection. The conn->bundle pointer is
already cleared at this point so avoid dereferencing it.

Reported-by: Eric Musser
Fixes #8341
Closes #8342
2022-01-28 16:02:38 +01:00
MAntoniak
df66c7c5ba
mbedtls: remove #include <mbedtls/certs.h>
mbedtls/certs.h file contains only certificates example (all definitions
is beginning by mbedtls_test_*). None of them is used so we can avoid
include the file.

Closes #8343
2022-01-28 16:01:28 +01:00
MAntoniak
16c01bc5a5
mbedtls: enable use of mbedtls without CRL support
Closes #8344
2022-01-28 16:00:23 +01:00
Jay Satiro
598b142f6d schannel: restore debug message in schannel_connect_step2
This is a follow-up to recent commit 2218c3a which removed the debug
message to avoid an unused variable warning. The message has been
reworked to avoid the warning.

Ref: https://github.com/curl/curl/pull/8320#issuecomment-1022957904

Closes https://github.com/curl/curl/pull/8336
2022-01-28 02:42:57 -05:00
Marcel Raad
610bd89315
openssl: fix ctx_option_t for OpenSSL v3+
The options have been changed to `uint64_t` in
56bd17830f.

Closes https://github.com/curl/curl/pull/8331
2022-01-27 12:22:18 +01:00
Daniel Stenberg
2218c3a57e
vtls: pass on the right SNI name
The TLS backends convert the host name to SNI name and need to use that.
This involves cutting off any trailing dot and lowercasing.

Co-authored-by: Jay Satiro
Closes #8320
2022-01-27 08:36:10 +01:00
Daniel Stenberg
b27ad8e1d3
url: revert the removal of trailing dot from host name
Reverts 5de8d84098 (May 2014, shipped in 7.37.0) and the
follow-up changes done afterward.

Keep the dot in names for everything except the SNI to make curl behave
more similar to current browsers. This means 'name' and 'name.' send the
same SNI for different 'Host:' headers.

Updated test 1322 accordingly

Fixes #8290
Reported-by: Charles Cazabon
Closes #8320
2022-01-27 08:35:18 +01:00
Daniel Stenberg
955cb99130
hostcheck: fixed to not touch used input strings
Avoids the need to clone the strings before check, thus avoiding
mallocs, which for cases where there are many SAN names in a cert could
end up numerous.

Closes #8321
2022-01-24 13:55:57 +01:00
xkernel
a97eb81d94
openssl: check SSL_get_ex_data to prevent potential NULL dereference
Closes #8268
2022-01-23 10:41:24 +01:00
lucas
519b62ccd0
docs: update IETF links to use datatracker
The tools.ietf.org domain has been deprecated a while now, with the
links being redirected to datatracker.ietf.org.

Rather than make people eat that redirect time, this change switches the
URL to a more canonical source.

Closes #8317
2022-01-21 23:06:36 +01:00
Daniel Stenberg
d03cb7c14a
openssl: return error if TLS 1.3 is requested when not supported
Previously curl would just silently ignore it if the necessary defines
are not present at build-time.

Reported-by: Stefan Eissing
Fixes #8309
Closes #8310
2022-01-21 08:44:17 +01:00
Niels Martignène
6c084fd47c mbedtls: fix CURLOPT_SSLCERT_BLOB (again)
- Increase the buffer length passed to mbedtls_x509_crt_parse to account
  for the null byte appended to the temporary blob.

Follow-up to 867ad1c which uses a null terminated copy of the
certificate blob, because mbedtls_x509_crt_parse requires PEM data
to be null terminated.

Ref: https://github.com/curl/curl/commit/867ad1c#r63439893
Ref: https://github.com/curl/curl/pull/8146

Closes https://github.com/curl/curl/pull/8260
2022-01-15 16:57:36 -05:00
MAntoniak
44dfd6bdd8
mbedtls: return CURLcode result instead of a mbedtls error code
... when a certificate fails to be loaded from a blob

Closes #8266
2022-01-12 09:34:09 +01:00
Daniel Stenberg
223f26c28a
mesalink: remove support
Mesalink has ceased development. We can no longer encourage use of it.
It seems to be continued under the name TabbySSL, but no attempts have
(yet) been to make curl support it.

Fixes #8188
Closes #8191
2022-01-10 11:27:59 +01:00
Stephen M. Coakley
3be94d84fc
rustls: add CURLOPT_CAINFO_BLOB support
Add support for `CURLOPT_CAINFO_BLOB` `CURLOPT_PROXY_CAINFO_BLOB` to the
rustls TLS backend. Multiple certificates in a single PEM string are
supported just like OpenSSL does with this option.

This is compatible at least with rustls-ffi 0.8+ which is our new
minimum version anyway.

I was able to build and run this on Windows, pulling trusted certs from
the system and then add them to rustls by setting
`CURLOPT_CAINFO_BLOB`. Handy!

Closes #8255
2022-01-10 09:30:12 +01:00
Niels Martignène
919baa5802
mbedtls: Fix ssl_init error with mbedTLS 3.1.0+
Since mbedTLS 3.1.0, mbedtls_ssl_setup() fails if the provided
config struct is not valid.

mbedtls_ssl_config_defaults() needs to be called before the config
struct is passed to mbedtls_ssl_setup().

Closes #8238
2022-01-09 14:12:40 +01:00
Daniel Stenberg
1bb406c7ed
openssl.h: avoid including OpenSSL headers here
... by instead using the struct version of the typedef'ed pointer. To
fix build errors when both Schannel and OpenSSL are enabled.

Fixes #8240
Reported-by: Jan Ehrhardt
Closes #8246
2022-01-08 14:39:12 +01:00
Daniel Stenberg
3a6b923170
openssl: copyright year update
Follow-up to 30aea2b1ed
2022-01-07 09:59:29 +01:00
xkernel
30aea2b1ed
openssl: check the return value of BIO_new_mem_buf()
Closes #8233
2022-01-07 09:34:08 +01:00
Valentin Richter
75b832c8a0
mbedtls: fix private member designations for v3.1.0
"As a last resort, you can access the field foo of a structure bar by
writing bar.MBEDTLS_PRIVATE(foo). Note that you do so at your own risk,
since such code is likely to break in a future minor version of Mbed
TLS." -
f2d1199edc/docs/3.0-migration-guide.md

That future minor version is v3.1.0. I set the >= to == for the version
checks because v3.1.0 is a release, and I am not sure when the private
designation was reverted after v3.0.0.

Closes #8214
2022-01-03 08:56:31 +01:00
Daniel Stenberg
a4d9876c31
gtls: add gnutls include for the session type
Follow-up to 8fbd6feddf to make it build more universally
2021-12-29 23:46:13 +01:00
Daniel Stenberg
f77292663c
http_proxy: don't close the socket (too early)
... and double-check in the OpenSSL shutdown that the socket is actually
still there before it is used.

Fixes #8193
Closes #8195

Reported-by: Leszek Kubik
2021-12-29 23:20:03 +01:00