Hi Cedric,

I ran into the same issue and patched libcloud.httplib_ssl.  I’ve included the 
code snippets below.  The proxy I use doesn’t require authentication but 
hopefully you can adapt to make it do what you need.  I tested with Python 2.7 
- may need tweaking for Python 3.

Cheers,
Phil


I modified the LibcloudHTTPSConnection.__init__ to pick up the proxy settings 
from the environment:


class LibcloudHTTPSConnection(httplib.HTTPSConnection):
    """
    LibcloudHTTPSConnection

    Subclass of HTTPSConnection which verifies certificate names
    if and only if CA certificates are available.
    """
    verify = True         # verify by default
    ca_cert = None        # no default CA Certificate

    def __init__(self, *args, **kwargs):
        """
        Constructor
        """
        self._setup_verify()
        httplib.HTTPSConnection.__init__(self, *args, **kwargs)
        
        # Support for HTTPS Proxy
        if 'https_proxy' in os.environ:
            from urlparse import urlparse

            self.set_tunnel(self.host, port=self.port)

            proxy_host = urlparse(os.environ['https_proxy']).netloc
            self._set_hostport(proxy_host, None)

.
.
.

And then modified the connect call to use the tunnel:


    def connect(self):
        """
        Connect

        Checks if verification is toggled; if not, just call
        httplib.HTTPSConnection's connect
        """
        if not self.verify:
            return httplib.HTTPSConnection.connect(self)

        # otherwise, create a connection and verify the hostname
        # use socket.create_connection (in 2.6+) if possible
        if getattr(socket, 'create_connection', None):
            sock = socket.create_connection((self.host, self.port),
                                            self.timeout)
        else:
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sock.connect((self.host, self.port))
            
        # Support for HTTPS Proxy
        if self._tunnel_host:
            self.sock = sock
            self._tunnel()

        self.sock = ssl.wrap_socket(sock,
                                    self.key_file,
                                    self.cert_file,
                                    cert_reqs=ssl.CERT_REQUIRED,
                                    ca_certs=self.ca_cert,
                                    ssl_version=ssl.PROTOCOL_TLSv1)
        cert = self.sock.getpeercert()
        if not self._verify_hostname(self.host, cert):
            raise ssl.SSLError('Failed to verify hostname')


On 8 Jul 2014, at 07:23, Cedric Lebrun <[email protected]> wrote:

> Hi All,
> 
> I try to use Libcloud to connect to EC2.
> My environments (CentOS 6.5 and Ubuntu 14.04) are behind a proxy server that 
> requires authentication (MS ISA Proxy Server).
> I tried with defining environment variables HTTP_PROXY and HTTPS_PROXY, but 
> still doesn't work.
> Is there a way to set a proxy and proxy credentials directly using Libcloud ? 
> Or should I have to patch the http_lib to implement UrlLib2 ProxyHandler ?
> 
> Thanks for your help,
> CL

--
Scanned by iCritical.

Reply via email to