The following python code is used to create a HTTPS Server.
'''
Created on 23/07/2014
@author: o880732
'''
import sys
import BaseHTTPServer
import base64
from multiprocessing import Process, Queue
from httplib import HTTPSConnection
import ssl
import datetime
class MyHttpEndpointHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def __init__(self, q, *args):
self.q = q
BaseHTTPServer.BaseHTTPRequestHandler.__init__(self, *args)
def do_POST(self):
self.send_response(200, 'OK')
self.send_header('Server', 'Apache-Coyote/1.1')
self.send_header('Content-type','text/xml')
self.end_headers()
# Extract and print the contents of the POST
length = int(self.headers['Content-Length'])
print "Length of content is " + str(length)
post_data = self.rfile.read(length)
self.q.put(post_data)
class ServerEndpointHandler:
def __init__(self,q,keyfile,certfile):
self.q = q
self.keyfile = keyfile
self.certfile = certfile
def setupEndpointHandler(self, queue):
return lambda *args: MyHttpEndpointHandler(queue, *args)
def handleEndpoint(self):
print "Starting endpoint handler"
handler = self.setupEndpointHandler(self.q)
httpd = BaseHTTPServer.HTTPServer(('',8443), handler)
httpd.socket = ssl.wrap_socket(httpd.socket, keyfile=self.keyfile, certfile = self.certfile, server_side=True)
httpd.serve_forever()
if __name__ == '__main__':
q = Queue()
print "trying to start endpoint"
ep = ServerEndpointHandler(q, keyfile="~/certificates/server.key", certfile = "~/certificates/server.crt")
t2 = Process(target=ep.handleEndpoint)
t2.start()
t2.join()
The issue I have is that on a RedhatLinux server the time to accept a connection is approximately 20sec, whereas the same code running under Windows7 the connection time is approximately 200msec.
Both systems are running Python 2.6.6.
The redhat release is 6.4 (Santiago)
Linux myserver.domain.com 2.6.32-358.18.1.el6.x86_64 #1 SMP Fri Aug 2 17:04:38 EDT 2013 x86_64 x86_64 x86_64 GNU/Linux
I have updated the openssl and python packages to the current release for Redhat.
Installed Packages
openssl.x86_64 1.0.1e-16.el6_5.14 @rhel-x86_64-server-6
python.x86_64 2.6.6-52.el6 @rhel-x86_64-server-6
Available Packages
openssl.i686 1.0.1e-16.el6_5.14 rhel-x86_64-server-6
python.i686 2.6.5-3.el6_0.2 rhel-x86_64-server-6
I am presuming that the delay has something to do with protocol negotiation and am wondering where to look to solve this issue, or what else the issue may be.
Any clues?