Annotation of embedaddon/curl/docs/SSL-PROBLEMS.md, revision 1.1
1.1 ! misho 1: _ _ ____ _
! 2: ___| | | | _ \| |
! 3: / __| | | | |_) | |
! 4: | (__| |_| | _ <| |___
! 5: \___|\___/|_| \_\_____|
! 6:
! 7: # SSL problems
! 8:
! 9: First, let's establish that we often refer to TLS and SSL interchangeably as
! 10: SSL here. The current protocol is called TLS, it was called SSL a long time
! 11: ago.
! 12:
! 13: There are several known reasons why a connection that involves SSL might
! 14: fail. This is a document that attempts to details the most common ones and
! 15: how to mitigate them.
! 16:
! 17: ## CA certs
! 18:
! 19: CA certs are used to digitally verify the server's certificate. You need a
! 20: "ca bundle" for this. See lots of more details on this in the SSLCERTS
! 21: document.
! 22:
! 23: ## CA bundle missing intermediate certificates
! 24:
! 25: When using said CA bundle to verify a server cert, you will experience
! 26: problems if your CA cert does not have the certificates for the
! 27: intermediates in the whole trust chain.
! 28:
! 29: ## Protocol version
! 30:
! 31: Some broken servers fail to support the protocol negotiation properly that
! 32: SSL servers are supposed to handle. This may cause the connection to fail
! 33: completely. Sometimes you may need to explicitly select a SSL version to use
! 34: when connecting to make the connection succeed.
! 35:
! 36: An additional complication can be that modern SSL libraries sometimes are
! 37: built with support for older SSL and TLS versions disabled!
! 38:
! 39: All versions of SSL are considered insecure and should be avoided. Use TLS.
! 40:
! 41: ## Ciphers
! 42:
! 43: Clients give servers a list of ciphers to select from. If the list doesn't
! 44: include any ciphers the server wants/can use, the connection handshake
! 45: fails.
! 46:
! 47: curl has recently disabled the user of a whole bunch of seriously insecure
! 48: ciphers from its default set (slightly depending on SSL backend in use).
! 49:
! 50: You may have to explicitly provide an alternative list of ciphers for curl
! 51: to use to allow the server to use a WEAK cipher for you.
! 52:
! 53: Note that these weak ciphers are identified as flawed. For example, this
! 54: includes symmetric ciphers with less than 128 bit keys and RC4.
! 55:
! 56: Schannel in Windows XP is not able to connect to servers that no longer
! 57: support the legacy handshakes and algorithms used by those versions, so we
! 58: advice against building curl to use Schannel on really old Windows versions.
! 59:
! 60: References:
! 61:
! 62: https://tools.ietf.org/html/draft-popov-tls-prohibiting-rc4-01
! 63:
! 64: ## Allow BEAST
! 65:
! 66: BEAST is the name of a TLS 1.0 attack that surfaced 2011. When adding means
! 67: to mitigate this attack, it turned out that some broken servers out there in
! 68: the wild didn't work properly with the BEAST mitigation in place.
! 69:
! 70: To make such broken servers work, the --ssl-allow-beast option was
! 71: introduced. Exactly as it sounds, it re-introduces the BEAST vulnerability
! 72: but on the other hand it allows curl to connect to that kind of strange
! 73: servers.
! 74:
! 75: ## Disabling certificate revocation checks
! 76:
! 77: Some SSL backends may do certificate revocation checks (CRL, OCSP, etc)
! 78: depending on the OS or build configuration. The --ssl-no-revoke option was
! 79: introduced in 7.44.0 to disable revocation checking but currently is only
! 80: supported for Schannel (the native Windows SSL library), with an exception
! 81: in the case of Windows' Untrusted Publishers blacklist which it seems can't
! 82: be bypassed. This option may have broader support to accommodate other SSL
! 83: backends in the future.
! 84:
! 85: References:
! 86:
! 87: https://curl.haxx.se/docs/ssl-compared.html
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>