]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-79846: Make ssl.create_default_context() ignore invalid certificates (GH-91740)
authorpukkandan <pukkandan.ytdlp@gmail.com>
Wed, 7 Aug 2024 08:30:30 +0000 (14:00 +0530)
committerGitHub <noreply@github.com>
Wed, 7 Aug 2024 08:30:30 +0000 (11:30 +0300)
An error in one certificate should not cause the whole thing to fail.

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Lib/ssl.py
Misc/NEWS.d/next/Windows/2022-04-20-18-32-30.gh-issue-79846.Vggv3f.rst [new file with mode: 0644]

index cc685c2cc405abbe10ec35dcd7854e42a3cc4204..a3ecf5380e4e30488f13a17fe1949994efbab690 100644 (file)
@@ -513,18 +513,17 @@ class SSLContext(_SSLContext):
         self._set_alpn_protocols(protos)
 
     def _load_windows_store_certs(self, storename, purpose):
-        certs = bytearray()
         try:
             for cert, encoding, trust in enum_certificates(storename):
                 # CA certs are never PKCS#7 encoded
                 if encoding == "x509_asn":
                     if trust is True or purpose.oid in trust:
-                        certs.extend(cert)
+                        try:
+                            self.load_verify_locations(cadata=cert)
+                        except SSLError as exc:
+                            warnings.warn(f"Bad certificate in Windows certificate store: {exc!s}")
         except PermissionError:
             warnings.warn("unable to enumerate Windows certificate store")
-        if certs:
-            self.load_verify_locations(cadata=certs)
-        return certs
 
     def load_default_certs(self, purpose=Purpose.SERVER_AUTH):
         if not isinstance(purpose, _ASN1Object):
diff --git a/Misc/NEWS.d/next/Windows/2022-04-20-18-32-30.gh-issue-79846.Vggv3f.rst b/Misc/NEWS.d/next/Windows/2022-04-20-18-32-30.gh-issue-79846.Vggv3f.rst
new file mode 100644 (file)
index 0000000..82c2670
--- /dev/null
@@ -0,0 +1,2 @@
+Makes :code:`ssl.create_default_context()` ignore invalid certificates in
+the Windows certificate store