##// END OF EJS Templates
sslutil: implement SSLContext class...
Gregory Szorc -
r28649:7acab42e default
parent child Browse files
Show More
@@ -36,6 +36,74 b' except AttributeError:'
36 OP_NO_SSLv2 = 0x1000000
36 OP_NO_SSLv2 = 0x1000000
37 OP_NO_SSLv3 = 0x2000000
37 OP_NO_SSLv3 = 0x2000000
38
38
39 try:
40 # ssl.SSLContext was added in 2.7.9 and presence indicates modern
41 # SSL/TLS features are available.
42 SSLContext = ssl.SSLContext
43 modernssl = True
44 except AttributeError:
45 modernssl = False
46
47 # We implement SSLContext using the interface from the standard library.
48 class SSLContext(object):
49 # ssl.wrap_socket gained the "ciphers" named argument in 2.7.
50 _supportsciphers = sys.version_info >= (2, 7)
51
52 def __init__(self, protocol):
53 # From the public interface of SSLContext
54 self.protocol = protocol
55 self.check_hostname = False
56 self.options = 0
57 self.verify_mode = ssl.CERT_NONE
58
59 # Used by our implementation.
60 self._certfile = None
61 self._keyfile = None
62 self._certpassword = None
63 self._cacerts = None
64 self._ciphers = None
65
66 def load_cert_chain(self, certfile, keyfile=None, password=None):
67 self._certfile = certfile
68 self._keyfile = keyfile
69 self._certpassword = password
70
71 def load_default_certs(self, purpose=None):
72 pass
73
74 def load_verify_locations(self, cafile=None, capath=None, cadata=None):
75 if capath:
76 raise error.Abort('capath not supported')
77 if cadata:
78 raise error.Abort('cadata not supported')
79
80 self._cacerts = cafile
81
82 def set_ciphers(self, ciphers):
83 if not self._supportsciphers:
84 raise error.Abort('setting ciphers not supported')
85
86 self._ciphers = ciphers
87
88 def wrap_socket(self, socket, server_hostname=None, server_side=False):
89 # server_hostname is unique to SSLContext.wrap_socket and is used
90 # for SNI in that context. So there's nothing for us to do with it
91 # in this legacy code since we don't support SNI.
92
93 args = {
94 'keyfile': self._keyfile,
95 'certfile': self._certfile,
96 'server_side': server_side,
97 'cert_reqs': self.verify_mode,
98 'ssl_version': self.protocol,
99 'ca_certs': self._cacerts,
100 }
101
102 if self._supportsciphers:
103 args['ciphers'] = self._ciphers
104
105 return ssl.wrap_socket(socket, **args)
106
39 _canloaddefaultcerts = False
107 _canloaddefaultcerts = False
40 try:
108 try:
41 # ssl.SSLContext was added in 2.7.9 and presence indicates modern
109 # ssl.SSLContext was added in 2.7.9 and presence indicates modern
General Comments 0
You need to be logged in to leave comments. Login now