NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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)