Search code examples
pythongoogle-app-enginepysimplesoap

Are client side certificates supported in App Engine


I am developing a google app engine application, and I need to connect to a webservice using SOAP. I'm using pysimplesoap (patched with the code found here) to parse the xml, and fire a request with a client-side certificate. When I do this in a simple unit test from my local environment, it works, and I get a proper response from the webservice. However, when I run the exact same code from within app engine, I get this:

  File "/Users/me/Documents/workspace/blixem/model/communicate/communication_channel.py", line 60, in generate_soap_message_pysimplesoap
    response = client.SendDocument('LA.XML', 'TESTCASE', 'data')
  File "/Users/me/Documents/workspace/blixem/lib/pysimplesoap/client.py", line 152, in <lambda>
    return lambda *args, **kwargs: self.wsdl_call(attr,*args,**kwargs)
  File "/Users/me/Documents/workspace/blixem/lib/pysimplesoap/client.py", line 320, in wsdl_call
    response = self.call(method, *params)
  File "/Users/me/Documents/workspace/blixem/lib/pysimplesoap/client.py", line 215, in call
    self.xml_response = self.send(method, self.xml_request)
  File "/Users/me/Documents/workspace/blixem/lib/pysimplesoap/client.py", line 241, in send
    location,"POST", body=xml, headers=headers )
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/httplib2/httplib2/__init__.py", line 1457, in request
    self.disable_ssl_certificate_validation)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/httplib2/httplib2/__init__.py", line 1143, in __init__
    strict, timeout, proxy_info, ca_certs, disable_ssl_certificate_validation)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/httplib2/httplib2/__init__.py", line 1092, in __init__
    raise NotSupportedOnThisPlatform()
NotSupportedOnThisPlatform

I did some reading, and discovered that client side certificates were not supported yet in the urlfetch service. Is this still the case? If so, is there a work-around?


Solution

  • Client side certificates are currently not supported by GAE. You can use the URLFetch service over HTTPS. But you cannot use client certificates. You should try the Outbound Sockets Support feature which is currently available in the trusted tester program. It might whitelist the functionality you are looking for. I asked a similar question for GAE/J before.

    If you really need it already either go with the outbound socket feature or run a proxy in EC2.