@@ -80,6 +80,12 @@ def data_file(*name):
8080DHFILE = data_file ("dh1024.pem" )
8181BYTES_DHFILE = os .fsencode (DHFILE )
8282
83+ # Not defined in all versions of OpenSSL
84+ OP_NO_COMPRESSION = getattr (ssl , "OP_NO_COMPRESSION" , 0 )
85+ OP_SINGLE_DH_USE = getattr (ssl , "OP_SINGLE_DH_USE" , 0 )
86+ OP_SINGLE_ECDH_USE = getattr (ssl , "OP_SINGLE_ECDH_USE" , 0 )
87+ OP_CIPHER_SERVER_PREFERENCE = getattr (ssl , "OP_CIPHER_SERVER_PREFERENCE" , 0 )
88+
8389
8490def handle_error (prefix ):
8591 exc_format = ' ' .join (traceback .format_exception (* sys .exc_info ()))
@@ -870,8 +876,9 @@ def test_options(self):
870876 ctx = ssl .SSLContext (ssl .PROTOCOL_TLSv1 )
871877 # OP_ALL | OP_NO_SSLv2 | OP_NO_SSLv3 is the default value
872878 default = (ssl .OP_ALL | ssl .OP_NO_SSLv2 | ssl .OP_NO_SSLv3 )
873- if not IS_LIBRESSL and ssl .OPENSSL_VERSION_INFO >= (1 , 1 , 0 ):
874- default |= ssl .OP_NO_COMPRESSION
879+ # SSLContext also enables these by default
880+ default |= (OP_NO_COMPRESSION | OP_CIPHER_SERVER_PREFERENCE |
881+ OP_SINGLE_DH_USE | OP_SINGLE_ECDH_USE )
875882 self .assertEqual (default , ctx .options )
876883 ctx .options |= ssl .OP_NO_TLSv1
877884 self .assertEqual (default | ssl .OP_NO_TLSv1 , ctx .options )
@@ -1236,70 +1243,67 @@ def test_load_default_certs_env_windows(self):
12361243 stats ["x509" ] += 1
12371244 self .assertEqual (ctx .cert_store_stats (), stats )
12381245
1246+ def _assert_context_options (self , ctx ):
1247+ self .assertEqual (ctx .options & ssl .OP_NO_SSLv2 , ssl .OP_NO_SSLv2 )
1248+ if OP_NO_COMPRESSION != 0 :
1249+ self .assertEqual (ctx .options & OP_NO_COMPRESSION ,
1250+ OP_NO_COMPRESSION )
1251+ if OP_SINGLE_DH_USE != 0 :
1252+ self .assertEqual (ctx .options & OP_SINGLE_DH_USE ,
1253+ OP_SINGLE_DH_USE )
1254+ if OP_SINGLE_ECDH_USE != 0 :
1255+ self .assertEqual (ctx .options & OP_SINGLE_ECDH_USE ,
1256+ OP_SINGLE_ECDH_USE )
1257+ if OP_CIPHER_SERVER_PREFERENCE != 0 :
1258+ self .assertEqual (ctx .options & OP_CIPHER_SERVER_PREFERENCE ,
1259+ OP_CIPHER_SERVER_PREFERENCE )
1260+
12391261 def test_create_default_context (self ):
12401262 ctx = ssl .create_default_context ()
1263+
12411264 self .assertEqual (ctx .protocol , ssl .PROTOCOL_SSLv23 )
12421265 self .assertEqual (ctx .verify_mode , ssl .CERT_REQUIRED )
12431266 self .assertTrue (ctx .check_hostname )
1244- self .assertEqual (ctx .options & ssl .OP_NO_SSLv2 , ssl .OP_NO_SSLv2 )
1245- self .assertEqual (
1246- ctx .options & getattr (ssl , "OP_NO_COMPRESSION" , 0 ),
1247- getattr (ssl , "OP_NO_COMPRESSION" , 0 ),
1248- )
1267+ self ._assert_context_options (ctx )
1268+
12491269
12501270 with open (SIGNING_CA ) as f :
12511271 cadata = f .read ()
12521272 ctx = ssl .create_default_context (cafile = SIGNING_CA , capath = CAPATH ,
12531273 cadata = cadata )
12541274 self .assertEqual (ctx .protocol , ssl .PROTOCOL_SSLv23 )
12551275 self .assertEqual (ctx .verify_mode , ssl .CERT_REQUIRED )
1256- self .assertEqual (ctx .options & ssl .OP_NO_SSLv2 , ssl .OP_NO_SSLv2 )
1257- self .assertEqual (
1258- ctx .options & getattr (ssl , "OP_NO_COMPRESSION" , 0 ),
1259- getattr (ssl , "OP_NO_COMPRESSION" , 0 ),
1260- )
1276+ self ._assert_context_options (ctx )
12611277
12621278 ctx = ssl .create_default_context (ssl .Purpose .CLIENT_AUTH )
12631279 self .assertEqual (ctx .protocol , ssl .PROTOCOL_SSLv23 )
12641280 self .assertEqual (ctx .verify_mode , ssl .CERT_NONE )
1265- self .assertEqual (ctx .options & ssl .OP_NO_SSLv2 , ssl .OP_NO_SSLv2 )
1266- self .assertEqual (
1267- ctx .options & getattr (ssl , "OP_NO_COMPRESSION" , 0 ),
1268- getattr (ssl , "OP_NO_COMPRESSION" , 0 ),
1269- )
1270- self .assertEqual (
1271- ctx .options & getattr (ssl , "OP_SINGLE_DH_USE" , 0 ),
1272- getattr (ssl , "OP_SINGLE_DH_USE" , 0 ),
1273- )
1274- self .assertEqual (
1275- ctx .options & getattr (ssl , "OP_SINGLE_ECDH_USE" , 0 ),
1276- getattr (ssl , "OP_SINGLE_ECDH_USE" , 0 ),
1277- )
1281+ self ._assert_context_options (ctx )
12781282
12791283 def test__create_stdlib_context (self ):
12801284 ctx = ssl ._create_stdlib_context ()
12811285 self .assertEqual (ctx .protocol , ssl .PROTOCOL_SSLv23 )
12821286 self .assertEqual (ctx .verify_mode , ssl .CERT_NONE )
12831287 self .assertFalse (ctx .check_hostname )
1284- self .assertEqual (ctx . options & ssl . OP_NO_SSLv2 , ssl . OP_NO_SSLv2 )
1288+ self ._assert_context_options (ctx )
12851289
12861290 ctx = ssl ._create_stdlib_context (ssl .PROTOCOL_TLSv1 )
12871291 self .assertEqual (ctx .protocol , ssl .PROTOCOL_TLSv1 )
12881292 self .assertEqual (ctx .verify_mode , ssl .CERT_NONE )
1289- self .assertEqual (ctx . options & ssl . OP_NO_SSLv2 , ssl . OP_NO_SSLv2 )
1293+ self ._assert_context_options (ctx )
12901294
12911295 ctx = ssl ._create_stdlib_context (ssl .PROTOCOL_TLSv1 ,
12921296 cert_reqs = ssl .CERT_REQUIRED ,
12931297 check_hostname = True )
12941298 self .assertEqual (ctx .protocol , ssl .PROTOCOL_TLSv1 )
12951299 self .assertEqual (ctx .verify_mode , ssl .CERT_REQUIRED )
12961300 self .assertTrue (ctx .check_hostname )
1297- self .assertEqual (ctx . options & ssl . OP_NO_SSLv2 , ssl . OP_NO_SSLv2 )
1301+ self ._assert_context_options (ctx )
12981302
12991303 ctx = ssl ._create_stdlib_context (purpose = ssl .Purpose .CLIENT_AUTH )
13001304 self .assertEqual (ctx .protocol , ssl .PROTOCOL_SSLv23 )
13011305 self .assertEqual (ctx .verify_mode , ssl .CERT_NONE )
1302- self .assertEqual (ctx . options & ssl . OP_NO_SSLv2 , ssl . OP_NO_SSLv2 )
1306+ self ._assert_context_options (ctx )
13031307
13041308 def test_check_hostname (self ):
13051309 ctx = ssl .SSLContext (ssl .PROTOCOL_TLSv1 )
0 commit comments