comparison mercurial/sslutil.py @ 50341:698ffff7024b stable

configitems: make devel.serverexactprotocol look dangerous Because it is.
author pacien <pacien.trangirard@pacien.net>
date Thu, 13 Apr 2023 11:28:48 +0200
parents de2e158c380a
children c54e9bb5737e
comparison
equal deleted inserted replaced
50340:9f33d12f6f48 50341:698ffff7024b
551 sslcontext = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) 551 sslcontext = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
552 sslcontext.options |= getattr(ssl, 'OP_NO_COMPRESSION', 0) 552 sslcontext.options |= getattr(ssl, 'OP_NO_COMPRESSION', 0)
553 553
554 # This config option is intended for use in tests only. It is a giant 554 # This config option is intended for use in tests only. It is a giant
555 # footgun to kill security. Don't define it. 555 # footgun to kill security. Don't define it.
556 exactprotocol = ui.config(b'devel', b'serverexactprotocol') 556 exactprotocol = ui.config(b'devel', b'server-insecure-exact-protocol')
557 if exactprotocol == b'tls1.0': 557 if exactprotocol == b'tls1.0':
558 if b'tls1.0' not in supportedprotocols: 558 if b'tls1.0' not in supportedprotocols:
559 raise error.Abort(_(b'TLS 1.0 not supported by this Python')) 559 raise error.Abort(_(b'TLS 1.0 not supported by this Python'))
560 with warnings.catch_warnings(): 560 with warnings.catch_warnings():
561 warnings.filterwarnings( 561 warnings.filterwarnings(
581 raise error.Abort(_(b'TLS 1.2 not supported by this Python')) 581 raise error.Abort(_(b'TLS 1.2 not supported by this Python'))
582 sslcontext.minimum_version = ssl.TLSVersion.TLSv1_2 582 sslcontext.minimum_version = ssl.TLSVersion.TLSv1_2
583 sslcontext.maximum_version = ssl.TLSVersion.TLSv1_2 583 sslcontext.maximum_version = ssl.TLSVersion.TLSv1_2
584 elif exactprotocol: 584 elif exactprotocol:
585 raise error.Abort( 585 raise error.Abort(
586 _(b'invalid value for serverexactprotocol: %s') % exactprotocol 586 _(b'invalid value for server-insecure-exact-protocol: %s')
587 % exactprotocol
587 ) 588 )
588 else: 589 else:
589 # Despite its name, PROTOCOL_SSLv23 selects the highest protocol that both 590 # Despite its name, PROTOCOL_SSLv23 selects the highest protocol that both
590 # ends support, including TLS protocols. commonssloptions() restricts the 591 # ends support, including TLS protocols. commonssloptions() restricts the
591 # set of allowed protocols. 592 # set of allowed protocols.
592 protocol = ssl.PROTOCOL_SSLv23 593 protocol = ssl.PROTOCOL_SSLv23
593 options = commonssloptions(b'tls1.0') 594 options = commonssloptions(b'tls1.0')
594 595
595 # This config option is intended for use in tests only. It is a giant 596 # This config option is intended for use in tests only. It is a giant
596 # footgun to kill security. Don't define it. 597 # footgun to kill security. Don't define it.
597 exactprotocol = ui.config(b'devel', b'serverexactprotocol') 598 exactprotocol = ui.config(b'devel', b'server-insecure-exact-protocol')
598 if exactprotocol == b'tls1.0': 599 if exactprotocol == b'tls1.0':
599 if b'tls1.0' not in supportedprotocols: 600 if b'tls1.0' not in supportedprotocols:
600 raise error.Abort(_(b'TLS 1.0 not supported by this Python')) 601 raise error.Abort(_(b'TLS 1.0 not supported by this Python'))
601 protocol = ssl.PROTOCOL_TLSv1 602 protocol = ssl.PROTOCOL_TLSv1
602 elif exactprotocol == b'tls1.1': 603 elif exactprotocol == b'tls1.1':
607 if b'tls1.2' not in supportedprotocols: 608 if b'tls1.2' not in supportedprotocols:
608 raise error.Abort(_(b'TLS 1.2 not supported by this Python')) 609 raise error.Abort(_(b'TLS 1.2 not supported by this Python'))
609 protocol = ssl.PROTOCOL_TLSv1_2 610 protocol = ssl.PROTOCOL_TLSv1_2
610 elif exactprotocol: 611 elif exactprotocol:
611 raise error.Abort( 612 raise error.Abort(
612 _(b'invalid value for serverexactprotocol: %s') % exactprotocol 613 _(b'invalid value for server-insecure-exact-protocol: %s')
614 % exactprotocol
613 ) 615 )
614 616
615 # We /could/ use create_default_context() here since it doesn't load 617 # We /could/ use create_default_context() here since it doesn't load
616 # CAs when configured for client auth. However, it is hard-coded to 618 # CAs when configured for client auth. However, it is hard-coded to
617 # use ssl.PROTOCOL_SSLv23 which may not be appropriate here. 619 # use ssl.PROTOCOL_SSLv23 which may not be appropriate here.