Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork32.4k
gh-107361: strengthen default SSL context flags#112389
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Changes fromall commits
f0e262e
4782048
732b953
15c0313
2aceb81
eb2c6e4
668803c
da318a6
4ae44d1
792383a
f1b59ed
c8a7bb5
f6c3af3
ff087fb
e46a672
fe42d9a
1a3e037
cef6950
2c7b14e
File filter
Filter by extension
Conversations
Uh oh!
There was an error while loading.Please reload this page.
Jump to
Uh oh!
There was an error while loading.Please reload this page.
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -151,6 +151,12 @@ purposes. | ||
variable :envvar:`SSLKEYLOGFILE` is set, :func:`create_default_context` | ||
enables key logging. | ||
The default settings for this context include | ||
:data:`VERIFY_X509_PARTIAL_CHAIN` and :data:`VERIFY_X509_STRICT`. | ||
These make the underlying OpenSSL implementation behave more like | ||
a conforming implementation of :rfc:`5280`, in exchange for a small | ||
amount of incompatibility with older X.509 certificates. | ||
woodruffw marked this conversation as resolved. Show resolvedHide resolvedUh oh!There was an error while loading.Please reload this page. | ||
.. note:: | ||
The protocol, options, cipher and other settings may change to more | ||
restrictive values anytime without prior deprecation. The values | ||
@@ -172,6 +178,15 @@ purposes. | ||
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH) | ||
ctx.options &= ~ssl.OP_NO_SSLv3 | ||
.. note:: | ||
This context enables :data:`VERIFY_X509_STRICT` by default, which | ||
may reject pre-:rfc:`5280` or malformed certificates that the | ||
underlying OpenSSL implementation otherwise would accept. While disabling | ||
this is not recommended, you can do so using:: | ||
ctx = ssl.create_default_context() | ||
ctx.verify_flags &= ~ssl.VERIFY_X509_STRICT | ||
.. versionadded:: 3.4 | ||
.. versionchanged:: 3.4.4 | ||
@@ -194,6 +209,11 @@ purposes. | ||
:data:`PROTOCOL_TLS_SERVER` protocol instead of generic | ||
:data:`PROTOCOL_TLS`. | ||
.. versionchanged:: 3.13 | ||
The context now uses :data:`VERIFY_X509_PARTIAL_CHAIN` and | ||
:data:`VERIFY_X509_STRICT` in its default verify flags. | ||
malemburg marked this conversation as resolved. Show resolvedHide resolvedUh oh!There was an error while loading.Please reload this page. | ||
Exceptions | ||
^^^^^^^^^^ | ||
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -62,7 +62,6 @@ Summary -- Release highlights | ||
.. This section singles out the most important changes in Python 3.13. | ||
Brevity is key. | ||
.. PEP-sized items next. | ||
Important deprecations, removals or restrictions: | ||
@@ -192,6 +191,21 @@ Other Language Changes | ||
(Contributed by Arthur Tacca and Jason Zhang in :gh:`115957`.) | ||
* The :func:`ssl.create_default_context` API now includes | ||
:data:`ssl.VERIFY_X509_PARTIAL_CHAIN` and :data:`ssl.VERIFY_X509_STRICT` | ||
in its default flags. | ||
gpshead marked this conversation as resolved. Show resolvedHide resolvedUh oh!There was an error while loading.Please reload this page. | ||
.. note:: | ||
:data:`ssl.VERIFY_X509_STRICT` may reject pre-:rfc:`5280` or malformed | ||
certificates that the underlying OpenSSL implementation otherwise would | ||
accept. While disabling this is not recommended, you can do so using:: | ||
ctx = ssl.create_default_context() | ||
ctx.verify_flags &= ~ssl.VERIFY_X509_STRICT | ||
(Contributed by William Woodruff in :gh:`112389`.) | ||
New Modules | ||
=========== | ||
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -704,6 +704,16 @@ def create_default_context(purpose=Purpose.SERVER_AUTH, *, cafile=None, | ||
else: | ||
raise ValueError(purpose) | ||
# `VERIFY_X509_PARTIAL_CHAIN` makes OpenSSL's chain building behave more | ||
# like RFC 3280 and 5280, which specify that chain building stops with the | ||
# first trust anchor, even if that anchor is not self-signed. | ||
woodruffw marked this conversation as resolved. Show resolvedHide resolvedUh oh!There was an error while loading.Please reload this page. | ||
# | ||
# `VERIFY_X509_STRICT` makes OpenSSL more conservative about the | ||
# certificates it accepts, including "disabling workarounds for | ||
# some broken certificates." | ||
context.verify_flags |= (_ssl.VERIFY_X509_PARTIAL_CHAIN | | ||
_ssl.VERIFY_X509_STRICT) | ||
if cafile or capath or cadata: | ||
context.load_verify_locations(cafile, capath, cadata) | ||
elif context.verify_mode != CERT_NONE: | ||
Large diffs are not rendered by default.
Uh oh!
There was an error while loading.Please reload this page.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,26 +1,27 @@ | ||
-----BEGIN CERTIFICATE----- | ||
MIIEgDCCAuigAwIBAgIJAMstgJlaaVJbMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV | ||
BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW | ||
MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0zNzEwMjgx | ||
NDIzMTZaME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUg | ||
Rm91bmRhdGlvbiBDQTEWMBQGA1UEAwwNb3VyLWNhLXNlcnZlcjCCAaIwDQYJKoZI | ||
hvcNAQEBBQADggGPADCCAYoCggGBANCgm7G5O3nuMS+4URwBde0JWUysyL9qCvh6 | ||
CPAl4yV7avjE2KqgYAclsM9zcQVSaL8Gk64QYZa8s2mBGn0Z/CCGj5poG+3N4mxh | ||
Z8dOVepDBiEb6bm+hF/C2uuJiOBCpkVJKtC5a4yTyUQ7yvw8lH/dcMWt2Es73B74 | ||
VUu1J4b437CDz/cWN78TFzTUyVXtaxbJf60gTvAe2Ru/jbrNypbvHmnLUWZhSA3o | ||
eaNZYdQQjeANOwuFttWFEt2lB8VL+iP6VDn3lwvJREceVnc8PBMBC2131hS6RPRT | ||
NVbZPbk+NV/bM5pPWrk4RMkySf5m9h8al6rKTEr2uF5Af/sLHfhbodz4wC7QbUn1 | ||
0kbUkFf+koE0ri04u6gXDOHlP+L3JgVUUPVksxxuRP9vqbQDlukOwojYclKQmcZB | ||
D0aQWbg+b9Linh02gpXTWIoS8+LYDSBRI/CQLZo+fSaGsqfX+ShgA+N3x4gEyf6J | ||
d3AQT8Ogijv0q0J74xSS2K4W1qHefQIDAQABo2MwYTAdBgNVHQ4EFgQU8+yUjvKO | ||
MMSOaMK/jmoZwMGfdmUwHwYDVR0jBBgwFoAU8+yUjvKOMMSOaMK/jmoZwMGfdmUw | ||
DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD | ||
ggGBAIsAVHKzjevzrzSf1mDq3oQ/jASPGaa+AmfEY8V040c3WYOUBvFFGegHL9ZO | ||
S0+oPccHByeS9H5zT4syGZRGeiXE2cQnsBFjOmCLheFzTzQ7a6Q0jEmOzc9PsmUn | ||
QRmw/IAxePJzapt9cTRQ/Hio2gW0nFs6mXprXe870+k7MwESZc9eB9gZr9VT6vAQ | ||
rMS2Jjw0LnTuZN0dNnWJRACwDf0vswHMGosCzWzogILKv4LXAJ3YNhXSBzf8bHMd | ||
2qgc6CCOMnr+bScW5Fhs6z7w/iRSKXG4lntTS0UgVUBehhvsyUaRku6sk2WRLpS2 | ||
tqzoozSJpBoSDU1EpVLti5HuL6avpJUl+c7HW6cA05PKtDxdTfexPMxttEW+gu0Y | ||
kMiG0XVRUARM6E/S1lCqdede/6F7Jxkca0ksbE1rY8w7cwDzmSbQgofTqTactD25 | ||
SGiokvAnjgzNFXZChIDJP6N+tN3X+Kx2umCXPFofTt5x7gk5EN0x1WhXXRrlQroO | ||
aOZF0w== | ||
-----END CERTIFICATE----- |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,26 +1,27 @@ | ||
-----BEGIN CERTIFICATE----- | ||
MIIEgDCCAuigAwIBAgIJAMstgJlaaVJbMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV | ||
BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW | ||
MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0zNzEwMjgx | ||
NDIzMTZaME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUg | ||
Rm91bmRhdGlvbiBDQTEWMBQGA1UEAwwNb3VyLWNhLXNlcnZlcjCCAaIwDQYJKoZI | ||
hvcNAQEBBQADggGPADCCAYoCggGBANCgm7G5O3nuMS+4URwBde0JWUysyL9qCvh6 | ||
CPAl4yV7avjE2KqgYAclsM9zcQVSaL8Gk64QYZa8s2mBGn0Z/CCGj5poG+3N4mxh | ||
Z8dOVepDBiEb6bm+hF/C2uuJiOBCpkVJKtC5a4yTyUQ7yvw8lH/dcMWt2Es73B74 | ||
VUu1J4b437CDz/cWN78TFzTUyVXtaxbJf60gTvAe2Ru/jbrNypbvHmnLUWZhSA3o | ||
eaNZYdQQjeANOwuFttWFEt2lB8VL+iP6VDn3lwvJREceVnc8PBMBC2131hS6RPRT | ||
NVbZPbk+NV/bM5pPWrk4RMkySf5m9h8al6rKTEr2uF5Af/sLHfhbodz4wC7QbUn1 | ||
0kbUkFf+koE0ri04u6gXDOHlP+L3JgVUUPVksxxuRP9vqbQDlukOwojYclKQmcZB | ||
D0aQWbg+b9Linh02gpXTWIoS8+LYDSBRI/CQLZo+fSaGsqfX+ShgA+N3x4gEyf6J | ||
d3AQT8Ogijv0q0J74xSS2K4W1qHefQIDAQABo2MwYTAdBgNVHQ4EFgQU8+yUjvKO | ||
MMSOaMK/jmoZwMGfdmUwHwYDVR0jBBgwFoAU8+yUjvKOMMSOaMK/jmoZwMGfdmUw | ||
DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD | ||
ggGBAIsAVHKzjevzrzSf1mDq3oQ/jASPGaa+AmfEY8V040c3WYOUBvFFGegHL9ZO | ||
S0+oPccHByeS9H5zT4syGZRGeiXE2cQnsBFjOmCLheFzTzQ7a6Q0jEmOzc9PsmUn | ||
QRmw/IAxePJzapt9cTRQ/Hio2gW0nFs6mXprXe870+k7MwESZc9eB9gZr9VT6vAQ | ||
rMS2Jjw0LnTuZN0dNnWJRACwDf0vswHMGosCzWzogILKv4LXAJ3YNhXSBzf8bHMd | ||
2qgc6CCOMnr+bScW5Fhs6z7w/iRSKXG4lntTS0UgVUBehhvsyUaRku6sk2WRLpS2 | ||
tqzoozSJpBoSDU1EpVLti5HuL6avpJUl+c7HW6cA05PKtDxdTfexPMxttEW+gu0Y | ||
kMiG0XVRUARM6E/S1lCqdede/6F7Jxkca0ksbE1rY8w7cwDzmSbQgofTqTactD25 | ||
SGiokvAnjgzNFXZChIDJP6N+tN3X+Kx2umCXPFofTt5x7gk5EN0x1WhXXRrlQroO | ||
aOZF0w== | ||
-----END CERTIFICATE----- |
Uh oh!
There was an error while loading.Please reload this page.