summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Wall <kwall@apache.org>2014-09-06 22:06:57 +0000
committerKeith Wall <kwall@apache.org>2014-09-06 22:06:57 +0000
commit5192c8598a259c57858e73f3d32749e40f762dce (patch)
tree1424711acef21471041447f3e69b643f03ddd8f2
parentf85b65fc9947af2924c9791bcdcf68cd84dbf278 (diff)
downloadqpid-python-5192c8598a259c57858e73f3d32749e40f762dce.tar.gz
QPID-6086: [Python Client] 08..091 Add support for SSL and client cert authentication
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1622953 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--python/qpid/client.py4
-rw-r--r--python/qpid/connection08.py23
2 files changed, 24 insertions, 3 deletions
diff --git a/python/qpid/client.py b/python/qpid/client.py
index 4d42a8b20f..9380594973 100644
--- a/python/qpid/client.py
+++ b/python/qpid/client.py
@@ -77,13 +77,13 @@ class Client:
self.lock.release()
return q
- def start(self, response, mechanism="AMQPLAIN", locale="en_US", tune_params=None, client_properties=None):
+ def start(self, response, mechanism="AMQPLAIN", locale="en_US", tune_params=None, client_properties=None, connection_options=None):
self.mechanism = mechanism
self.response = response
self.locale = locale
self.tune_params = tune_params
self.client_properties=get_client_properties_with_defaults(provided_client_properties=client_properties)
- self.socket = connect(self.host, self.port)
+ self.socket = connect(self.host, self.port, connection_options)
self.conn = Connection(self.socket, self.spec)
self.peer = Peer(self.conn, ClientDelegate(self), Session)
diff --git a/python/qpid/connection08.py b/python/qpid/connection08.py
index e4762ff974..49310fb537 100644
--- a/python/qpid/connection08.py
+++ b/python/qpid/connection08.py
@@ -63,8 +63,29 @@ class SockIO:
self.sock.shutdown(SHUT_RDWR)
self.sock.close()
-def connect(host, port):
+def connect(host, port, options = None):
sock = socket.socket()
+
+ if options and options.get("ssl", False):
+ log.debug("Wrapping socket for SSL")
+ from ssl import wrap_socket, CERT_REQUIRED, CERT_NONE
+
+ ssl_certfile = options.get("ssl_certfile", None)
+ ssl_keyfile = options.get("ssl_keyfile", ssl_certfile)
+ ssl_trustfile = options.get("ssl_trustfile", None)
+ ssl_require_trust = options.get("ssl_require_trust", True)
+
+ if ssl_require_trust:
+ validate = CERT_REQUIRED
+ else:
+ validate = CERT_NONE
+
+ sock = wrap_socket(sock,
+ keyfile = ssl_keyfile,
+ certfile = ssl_certfile,
+ ca_certs = ssl_trustfile,
+ cert_reqs = validate)
+
sock.connect((host, port))
sock.setblocking(1)
return SockIO(sock)