Move server comms to OpenSSL.

This commit is contained in:
Aldo Cortesi 2012-06-14 21:57:55 +12:00
parent 8dabf88ae5
commit 176d819559
1 changed files with 9 additions and 4 deletions

View File

@ -20,7 +20,7 @@
""" """
import sys, os, string, socket, time import sys, os, string, socket, time
import shutil, tempfile, threading import shutil, tempfile, threading
import optparse, SocketServer, ssl import optparse, SocketServer
import utils, flow, certutils, version, wsgi import utils, flow, certutils, version, wsgi
from OpenSSL import SSL from OpenSSL import SSL
@ -310,14 +310,19 @@ class ServerConnection:
clientcert = None clientcert = None
else: else:
clientcert = None clientcert = None
server = ssl.wrap_socket(server, certfile = clientcert) context = SSL.Context(SSL.SSLv23_METHOD)
if clientcert:
context.use_certificate_file(clientcert)
server = SSL.Connection(context, server)
server.connect((addr, self.port)) server.connect((addr, self.port))
if self.scheme == "https": if self.scheme == "https":
self.cert = server.getpeercert(True) self.cert = server.get_peer_certificate()
self.rfile, self.wfile = FileLike(server), FileLike(server)
else:
self.rfile, self.wfile = server.makefile('rb'), server.makefile('wb')
except socket.error, err: except socket.error, err:
raise ProxyError(502, 'Error connecting to "%s": %s' % (self.host, err)) raise ProxyError(502, 'Error connecting to "%s": %s' % (self.host, err))
self.sock = server self.sock = server
self.rfile, self.wfile = server.makefile('rb'), server.makefile('wb')
def send(self, request): def send(self, request):
self.requestcount += 1 self.requestcount += 1