@@ -322,6 +322,18 @@ def build_extension(self, ext):
322
322
# in set_default_verify_paths we should really avoid.
323
323
# service_identity 18.1.0 introduced support for IP addr matching.
324
324
pyopenssl_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" )
325
337
326
338
extras_require = {
327
339
'encryption' : ['pymongocrypt<2.0.0' ],
@@ -347,21 +359,11 @@ def build_extension(self, ext):
347
359
for req in pyopenssl_reqs :
348
360
extras_require ['tls' ].append (
349
361
"%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'" )
356
362
elif sys .version_info < (2 , 7 , 9 ):
357
363
# For installing from source or egg files on Python versions
358
364
# older than 2.7.9, or systems that have setuptools versions
359
365
# older than 20.10.
360
366
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" )
365
367
extras_require .update ({'srv' : ["dnspython>=1.16.0,<1.17.0" ]})
366
368
extras_require .update ({'tls' : ["ipaddress" ]})
367
369
else :
0 commit comments