ssl_builtin.py (1555B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\lib\cherrypy\wsgiserver\ssl_builtin.py 2 try: 3 import ssl 4 except ImportError: 5 ssl = None 6 7 from cherrypy import wsgiserver 8 9 class BuiltinSSLAdapter(wsgiserver.SSLAdapter): 10 certificate = None 11 private_key = None 12 13 def __init__(self, certificate, private_key, certificate_chain = None): 14 if ssl is None: 15 raise ImportError('You must install the ssl module to use HTTPS.') 16 self.certificate = certificate 17 self.private_key = private_key 18 self.certificate_chain = certificate_chain 19 20 def bind(self, sock): 21 return sock 22 23 def wrap(self, sock): 24 try: 25 s = ssl.wrap_socket(sock, do_handshake_on_connect=True, server_side=True, certfile=self.certificate, keyfile=self.private_key, ssl_version=ssl.PROTOCOL_SSLv23) 26 except ssl.SSLError as e: 27 if e.errno == ssl.SSL_ERROR_EOF: 28 return (None, {}) 29 if e.errno == ssl.SSL_ERROR_SSL: 30 if e.args[1].endswith('http request'): 31 raise wsgiserver.NoSSLError 32 raise 33 34 return (s, self.get_environ(s)) 35 36 def get_environ(self, sock): 37 cipher = sock.cipher() 38 ssl_environ = {'wsgi.url_scheme': 'https', 39 'HTTPS': 'on', 40 'SSL_PROTOCOL': cipher[1], 41 'SSL_CIPHER': cipher[0]} 42 return ssl_environ 43 44 def makefile(self, sock, mode = 'r', bufsize = -1): 45 return wsgiserver.CP_fileobject(sock, mode, bufsize)