@@ -3469,17 +3469,7 @@ def verify_certs_callback(self, connection, x509,
34693469
34703470 def get_ssl_context (self ):
34713471 if self .ssl_context is None :
3472- if self .certfile is None :
3473- raise ValueError ("at least certfile must be specified" )
3474- self .ssl_context = SSL .Context (self .ssl_protocol )
3475- if self .ssl_protocol != SSL .SSLv2_METHOD :
3476- self .ssl_context .set_options (SSL .OP_NO_SSLv2 )
3477- else :
3478- warnings .warn ("SSLv2 protocol is insecure" , RuntimeWarning )
3479- self .ssl_context .use_certificate_chain_file (self .certfile )
3480- if not self .keyfile :
3481- self .keyfile = self .certfile
3482- self .ssl_context .use_privatekey_file (self .keyfile )
3472+ self .ssl_context = self .validate_ssl_options ()
34833473 if self .client_certfile is not None :
34843474 from OpenSSL .SSL import VERIFY_CLIENT_ONCE
34853475 from OpenSSL .SSL import VERIFY_FAIL_IF_NO_PEER_CERT
@@ -3488,16 +3478,32 @@ def get_ssl_context(self):
34883478 VERIFY_FAIL_IF_NO_PEER_CERT |
34893479 VERIFY_CLIENT_ONCE ,
34903480 self .verify_certs_callback )
3491- from OpenSSL .SSL import OP_NO_TICKET
3492- from OpenSSL .SSL import SESS_CACHE_OFF
3493- self .ssl_context .load_verify_locations (
3494- self .client_certfile )
3495- self .ssl_context .set_session_cache_mode (SESS_CACHE_OFF )
3496- self .ssl_options = self .ssl_options | OP_NO_TICKET
3497- if self .ssl_options :
3498- self .ssl_context .set_options (self .ssl_options )
34993481 return self .ssl_context
35003482
3483+ @classmethod
3484+ def validate_ssl_options (cls ):
3485+ if cls .certfile is None :
3486+ raise ValueError ("at least certfile must be specified" )
3487+ ssl_context = SSL .Context (cls .ssl_protocol )
3488+ if cls .ssl_protocol != SSL .SSLv2_METHOD :
3489+ ssl_context .set_options (SSL .OP_NO_SSLv2 )
3490+ else :
3491+ warnings .warn ("SSLv2 protocol is insecure" , RuntimeWarning )
3492+ ssl_context .use_certificate_chain_file (cls .certfile )
3493+ if not cls .keyfile :
3494+ cls .keyfile = cls .certfile
3495+ ssl_context .use_privatekey_file (cls .keyfile )
3496+ if cls .client_certfile is not None :
3497+ from OpenSSL .SSL import OP_NO_TICKET
3498+ from OpenSSL .SSL import SESS_CACHE_OFF
3499+ ssl_context .load_verify_locations (
3500+ cls .client_certfile )
3501+ ssl_context .set_session_cache_mode (SESS_CACHE_OFF )
3502+ cls .ssl_options = cls .ssl_options | OP_NO_TICKET
3503+ if cls .ssl_options :
3504+ ssl_context .set_options (cls .ssl_options )
3505+ return ssl_context
3506+
35013507 # --- overridden methods
35023508
35033509 def flush_account (self ):
0 commit comments