Mercurial > public > mercurial-scm > hg
diff tests/test-https.t @ 29577:9654ef41f7cc
sslutil: support defining cipher list
Python 2.7 supports specifying a custom cipher list to TLS sockets.
Advanced users may wish to specify a custom cipher list to increase
security. Or in some cases they may wish to prefer weaker ciphers
in order to increase performance (e.g. when doing stream clones
of very large repositories).
This patch introduces a [hostsecurity] config option for defining
the cipher list. The help documentation states that it is for
advanced users only.
Honestly, I'm a bit on the fence about providing this because
it is a footgun and can be used to decrease security. However,
there are legitimate use cases for it, so I think support should
be provided.
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sun, 17 Jul 2016 10:59:32 -0700 |
parents | 1a782fabf80d |
children | 6cff2ac0ccb9 |
line wrap: on
line diff
--- a/tests/test-https.t Sun Jul 17 10:50:51 2016 -0700 +++ b/tests/test-https.t Sun Jul 17 10:59:32 2016 -0700 @@ -326,6 +326,48 @@ > --config hostsecurity.disabletls10warning=true 5fed3813f7f5 +#if no-sslcontext no-py27+ +Setting ciphers doesn't work in Python 2.6 + $ P="$CERTSDIR" hg --config hostsecurity.ciphers=HIGH -R copy-pull id https://localhost:$HGPORT/ + warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info + abort: setting ciphers in [hostsecurity] is not supported by this version of Python + (remove the config option or run Mercurial with a modern Python version (preferred)) + [255] +#endif + +Setting ciphers works in Python 2.7+ but the error message is different on +legacy ssl. We test legacy once and do more feature checking on modern +configs. + +#if py27+ no-sslcontext + $ P="$CERTSDIR" hg --config hostsecurity.ciphers=invalid -R copy-pull id https://localhost:$HGPORT/ + warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info + abort: *No cipher can be selected. (glob) + [255] + + $ P="$CERTSDIR" hg --config hostsecurity.ciphers=HIGH -R copy-pull id https://localhost:$HGPORT/ + warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info + 5fed3813f7f5 +#endif + +#if sslcontext +Setting ciphers to an invalid value aborts + $ P="$CERTSDIR" hg --config hostsecurity.ciphers=invalid -R copy-pull id https://localhost:$HGPORT/ + abort: could not set ciphers: No cipher can be selected. + (change cipher string (invalid) in config) + [255] + + $ P="$CERTSDIR" hg --config hostsecurity.localhost:ciphers=invalid -R copy-pull id https://localhost:$HGPORT/ + abort: could not set ciphers: No cipher can be selected. + (change cipher string (invalid) in config) + [255] + +Changing the cipher string works + + $ P="$CERTSDIR" hg --config hostsecurity.ciphers=HIGH -R copy-pull id https://localhost:$HGPORT/ + 5fed3813f7f5 +#endif + Fingerprints - works without cacerts (hostkeyfingerprints)