source: TI12-security/trunk/python/Tests/m2Crypto/test_m2urllib2.py @ 5363

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI12-security/trunk/python/Tests/m2Crypto/test_m2urllib2.py@5363
Revision 5363, 2.0 KB checked in by pjkersha, 11 years ago (diff)

Experimenting with M2Crypto.m2urllib2 module for use with Python OpenID SSL peer auth

Line 
1from openid.fetchers import USER_AGENT, _allowedURL, Urllib2Fetcher
2import urllib2
3from M2Crypto.m2urllib2 import HTTPSHandler
4from M2Crypto import SSL
5
6class M2Urllib2Fetcher(Urllib2Fetcher):
7    """M2Crypto urllib2 based fetcher to enable SSL based authentication of
8    peer
9    """
10
11    def fetch(self, url, body=None, headers=None):
12       
13        # Use parent class behaviour for non-SSL connections
14        if url.startswith('http://'):
15            return super(M2Urllib2Fetcher, self).fetch(url, 
16                                                       body=body, 
17                                                       headers=headers)
18           
19        if not _allowedURL(url):
20            raise ValueError('Bad URL scheme: %r' % (url,))
21
22        if headers is None:
23            headers = {}
24
25        headers.setdefault(
26            'User-Agent',
27            "%s Python-urllib/%s" % (USER_AGENT, urllib2.__version__,))
28
29        req = urllib2.Request(url, data=body, headers=headers)
30        try:
31            ctx = SSL.Context()
32            caFilePath = '/home/pjkersha/Documents/BADC/Certificates/Cybertrust/cybertrustCombo.crt'
33#            ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, 9)
34            ctx.set_verify(SSL.verify_peer, 9)
35            ctx.load_verify_locations(cafile=caFilePath)
36#            ctx.load_cert(certfile,
37#                          keyfile=None,
38#                          callback=util.passphrase_callback)
39            httpsHandler = HTTPSHandler(ssl_context=ctx)
40            f = httpsHandler.https_open(req)
41            try:
42                return self._makeResponse(f)
43            finally:
44                f.close()
45        except urllib2.HTTPError, why:
46            try:
47                return self._makeResponse(why)
48            finally:
49                why.close()
50
51        return resp
52   
53if __name__ == "__main__":
54    fetcher = M2Urllib2Fetcher()
55    resp = fetcher.fetch('https://ndg3beta.badc.rl.ac.uk/openid')
56    print resp
Note: See TracBrowser for help on using the repository browser.