xmlrpc ssl (slightly embarrassing, long post)

Rune Hansen rune.hansen at sinsenveien83.com
Thu Jun 5 09:22:04 EDT 2003


Hi, I'm slightly embarrassed to ask these questions, mainly because I
fear that I've yet to full grasp the problem at hand. I'm trying to use 
https
in communication with a xmlrpc server. Both server and client should
preferably be build with python. I'm reasoning that I need a
socket.ssl() object.(BTW I've created a key and cert file with the
help of the openssl how-to found at
http://www.eclectica.ca/howto/ssl-cert-howto.php)
--
 >>> import socket
 >>> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 >>> ssl = socket.ssl(s, 'key.pem','cert.pem')
Traceback (most recent call last):
   File "<stdin>", line 1, in ?
socket.error: (32, 'Broken pipe')
--
Now, my ignorance begins to show. This is obviously not right. After
all, I want to use SimpleXMLRPCServer....so...I found some code on
cz.comp.lang.python
(http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&threadm=20030509134042.GE474%40dat.cz&rnum=1&prev=/groups%3Fq%3Dpython%2Bsocket.ssl%26hl%3Den%26lr%3D%26ie%3DUTF-8%26oe%3DUTF-8%26selm%3D20030509134042.GE474%2540dat.cz%26rnum%3D1)

Using this code I rewrote:
class TCPServer(BaseServer):
     address_family = socket.AF_INET
     socket_type = socket.SOCK_STREAM
     request_queue_size = 5
     allow_reuse_address = 0

     def __init__(self, server_address, RequestHandlerClass):
         """Constructor.  May be extended, do not override."""
         BaseServer.__init__(self, server_address, RequestHandlerClass)
	#OpenSSL
         ctx = SSL.Context(SSL.SSLv23_METHOD)
         ctx.set_options(SSL.OP_NO_SSLv2)
         ctx.set_verify(SSL.VERIFY_PEER, verify_cb)
         ctx.use_privatekey_file ('key.pem')
         ctx.use_certificate_file('cert.pem')
         self.socket = 
SSL.Connection(ctx,socket.socket(self.address_family,self.socket_type))

         self.server_bind()
         self.server_activate()

, blatantly ignoring the "May be extended, do not override"
warning(!), and wrote a wrapper for SimpleXMLRPCServer(to make use of
the new TCPServer class). Creating and starting a server based on this
SimpleXMLRPCServer class goes witout a hitch. But when connecting to
the server I get this traceback on the client:
 >>> import xmlrpclib
 >>> s = xmlrpclib.Server('https://localhost:8000')
 >>> p = s.postnr('1411')
Traceback (most recent call last):
   File "<stdin>", line 1, in ?
   File "//usr/lib/python2.2/xmlrpclib.py", line 821, in __call__
     return self.__send(self.__name, args)
   File "//usr/lib/python2.2/xmlrpclib.py", line 975, in __request
     verbose=self.__verbose
   File "//usr/lib/python2.2/xmlrpclib.py", line 840, in request
     self.send_content(h, request_body)
   File "//usr/lib/python2.2/xmlrpclib.py", line 876, in send_content
     connection.endheaders()
   File "//usr/lib/python2.2/httplib.py", line 695, in endheaders
     self._send_output()
   File "//usr/lib/python2.2/httplib.py", line 581, in _send_output
     self.send(msg)
   File "//usr/lib/python2.2/httplib.py", line 548, in send
     self.connect()
   File "//usr/lib/python2.2/httplib.py", line 945, in connect
     ssl = socket.ssl(realsock, self.key_file, self.cert_file)
socket.sslerror: (8, 'EOF occurred in violation of protocol')

And this error message on the server:
exception happened during processing of request from ('127.0.0.1', 49579)
Traceback (most recent call last):
   File "//usr/lib/python2.2/SocketServer.py", line 221, in handle_request
     self.process_request(request, client_address)
   File "//usr/lib/python2.2/SocketServer.py", line 240, in process_request
     self.finish_request(request, client_address)
   File "//usr/lib/python2.2/SocketServer.py", line 253, in finish_request
     self.RequestHandlerClass(request, client_address, self)
   File "//usr/lib/python2.2/SocketServer.py", line 513, in __init__
     self.setup()
   File "//usr/lib/python2.2/SocketServer.py", line 553, in setup
     self.rfile = self.connection.makefile('rb', self.rbufsize)
NotImplementedError: Cannot make file object of SSL.Connection


Did I mention that I really don't know what I'm doing? Uhm..yes, I
believe I did. Anyways, I would be very happy if someone could
enlighten me...

regards

/rune





More information about the Python-list mailing list