@@ -322,6 +322,18 @@ def build_extension(self, ext):
322322# in set_default_verify_paths we should really avoid.
323323# service_identity 18.1.0 introduced support for IP addr matching.
324324pyopenssl_reqs = ["pyopenssl>=17.2.0" , "requests<3.0.0" , "service_identity>=18.1.0" ]
325+ # PyOpenSSL is incapable of loading system CA certs on Windows
326+ # and mostly incapable on macOS.
327+ # https://www.pyopenssl.org/en/stable/api/ssl.html#OpenSSL.SSL.Context.set_default_verify_paths
328+ if sys .platform == 'win32' :
329+ # wincertstore appears dead and only claims support for
330+ # Python versions <= 3.4.
331+ if sys .version_info [:2 ] < (3 , 5 ):
332+ pyopenssl_reqs .append ("wincertstore>=0.2" )
333+ else :
334+ pyopenssl_reqs .append ("certifi" )
335+ elif sys .platform == "darwin" :
336+ pyopenssl_reqs .append ("certifi" )
325337
326338extras_require = {
327339 'encryption' : ['pymongocrypt<2.0.0' ],
@@ -347,21 +359,11 @@ def build_extension(self, ext):
347359 for req in pyopenssl_reqs :
348360 extras_require ['tls' ].append (
349361 "%s ; python_full_version < '2.7.9'" % (req ,))
350- if sys .platform == 'win32' :
351- extras_require ['tls' ].append (
352- "wincertstore>=0.2 ; python_full_version < '2.7.9'" )
353- else :
354- extras_require ['tls' ].append (
355- "certifi ; python_full_version < '2.7.9'" )
356362 elif sys .version_info < (2 , 7 , 9 ):
357363 # For installing from source or egg files on Python versions
358364 # older than 2.7.9, or systems that have setuptools versions
359365 # older than 20.10.
360366 extras_require ['tls' ].extend (pyopenssl_reqs )
361- if sys .platform == 'win32' :
362- extras_require ['tls' ].append ("wincertstore>=0.2" )
363- else :
364- extras_require ['tls' ].append ("certifi" )
365367 extras_require .update ({'srv' : ["dnspython>=1.16.0,<1.17.0" ]})
366368 extras_require .update ({'tls' : ["ipaddress" ]})
367369else :
0 commit comments