mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
Issue #20995: Enhance default ciphers used by the ssl module
Closes #20995 by Enabling better security by prioritizing ciphers such that: * Prefer cipher suites that offer perfect forward secrecy (DHE/ECDHE) * Prefer ECDHE over DHE for better performance * Prefer any AES-GCM over any AES-CBC for better performance and security * Then Use HIGH cipher suites as a fallback * Then Use 3DES as fallback which is secure but slow * Finally use RC4 as a fallback which is problematic but needed for compatibility some times. * Disable NULL authentication, NULL encryption, and MD5 MACs for security reasons
This commit is contained in:
parent
51f3129ba2
commit
79ccaa2cad
3 changed files with 37 additions and 18 deletions
|
@ -1665,17 +1665,10 @@ If you have advanced security requirements, fine-tuning of the ciphers
|
||||||
enabled when negotiating a SSL session is possible through the
|
enabled when negotiating a SSL session is possible through the
|
||||||
:meth:`SSLContext.set_ciphers` method. Starting from Python 3.2.3, the
|
:meth:`SSLContext.set_ciphers` method. Starting from Python 3.2.3, the
|
||||||
ssl module disables certain weak ciphers by default, but you may want
|
ssl module disables certain weak ciphers by default, but you may want
|
||||||
to further restrict the cipher choice. For example::
|
to further restrict the cipher choice. Be sure to read OpenSSL's documentation
|
||||||
|
about the `cipher list format <http://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT>`_.
|
||||||
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
|
If you want to check which ciphers are enabled by a given cipher list, use the
|
||||||
context.set_ciphers('HIGH:!aNULL:!eNULL')
|
``openssl ciphers`` command on your system.
|
||||||
|
|
||||||
The ``!aNULL:!eNULL`` part of the cipher spec is necessary to disable ciphers
|
|
||||||
which don't provide both encryption and authentication. Be sure to read
|
|
||||||
OpenSSL's documentation about the `cipher list
|
|
||||||
format <http://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT>`_.
|
|
||||||
If you want to check which ciphers are enabled by a given cipher list,
|
|
||||||
use the ``openssl ciphers`` command on your system.
|
|
||||||
|
|
||||||
Multi-processing
|
Multi-processing
|
||||||
^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
37
Lib/ssl.py
37
Lib/ssl.py
|
@ -162,14 +162,37 @@ else:
|
||||||
|
|
||||||
# Disable weak or insecure ciphers by default
|
# Disable weak or insecure ciphers by default
|
||||||
# (OpenSSL's default setting is 'DEFAULT:!aNULL:!eNULL')
|
# (OpenSSL's default setting is 'DEFAULT:!aNULL:!eNULL')
|
||||||
_DEFAULT_CIPHERS = 'DEFAULT:!aNULL:!eNULL:!LOW:!EXPORT:!SSLv2'
|
# Enable a better set of ciphers by default
|
||||||
|
# This list has been explicitly chosen to:
|
||||||
|
# * Prefer cipher suites that offer perfect forward secrecy (DHE/ECDHE)
|
||||||
|
# * Prefer ECDHE over DHE for better performance
|
||||||
|
# * Prefer any AES-GCM over any AES-CBC for better performance and security
|
||||||
|
# * Then Use HIGH cipher suites as a fallback
|
||||||
|
# * Then Use 3DES as fallback which is secure but slow
|
||||||
|
# * Finally use RC4 as a fallback which is problematic but needed for
|
||||||
|
# compatibility some times.
|
||||||
|
# * Disable NULL authentication, NULL encryption, and MD5 MACs for security
|
||||||
|
# reasons
|
||||||
|
_DEFAULT_CIPHERS = (
|
||||||
|
'ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+HIGH:'
|
||||||
|
'DH+HIGH:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+HIGH:RSA+3DES:ECDH+RC4:'
|
||||||
|
'DH+RC4:RSA+RC4:!aNULL:!eNULL:!MD5'
|
||||||
|
)
|
||||||
|
|
||||||
# restricted and more secure ciphers
|
# Restricted and more secure ciphers
|
||||||
# HIGH: high encryption cipher suites with key length >= 128 bits (no MD5)
|
# This list has been explicitly chosen to:
|
||||||
# !aNULL: only authenticated cipher suites (no anonymous DH)
|
# * Prefer cipher suites that offer perfect forward secrecy (DHE/ECDHE)
|
||||||
# !RC4: no RC4 streaming cipher, RC4 is broken
|
# * Prefer ECDHE over DHE for better performance
|
||||||
# !DSS: RSA is preferred over DSA
|
# * Prefer any AES-GCM over any AES-CBC for better performance and security
|
||||||
_RESTRICTED_CIPHERS = 'HIGH:!aNULL:!RC4:!DSS'
|
# * Then Use HIGH cipher suites as a fallback
|
||||||
|
# * Then Use 3DES as fallback which is secure but slow
|
||||||
|
# * Disable NULL authentication, NULL encryption, MD5 MACs, DSS, and RC4 for
|
||||||
|
# security reasons
|
||||||
|
_RESTRICTED_CIPHERS = (
|
||||||
|
'ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+HIGH:'
|
||||||
|
'DH+HIGH:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+HIGH:RSA+3DES:!aNULL:'
|
||||||
|
'!eNULL:!MD5:!DSS:!RC4'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class CertificateError(ValueError):
|
class CertificateError(ValueError):
|
||||||
|
|
|
@ -21,6 +21,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #20995: Enhance default ciphers used by the ssl module to enable
|
||||||
|
better security an prioritize perfect forward secrecy.
|
||||||
|
|
||||||
- Issue #20884: Don't assume that __file__ is defined on importlib.__init__.
|
- Issue #20884: Don't assume that __file__ is defined on importlib.__init__.
|
||||||
|
|
||||||
- Issue #20879: Delay the initialization of encoding and decoding tables for
|
- Issue #20879: Delay the initialization of encoding and decoding tables for
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue