如何在Python 2.7中实现SSL和CGIHTTPServer? (SSL错误)

时间:2014-06-22 04:37:37

标签: python python-2.7 ssl webserver

我正在尝试在Python 2.7中使用BaseHTTPServer实现SSL包装套接字和CGIHTTPServer。我使用SimpleHTTPRequestHandler,但我需要包含CGI功能。

评论代码来自之前的迭代,因为我一直试图解决问题。如果 ServerClass = HTTPServer(见run()),我得(Error code: ssl_error_rx_record_too_long)。如果我使用ServerClass = SecureHTTPServer,我可以在端口80上加载页面,但是我在443上重置连接。

我非常感谢帮助获得支持SSL的Web服务器支持CGI!

#!/usr/bin/env python
import socket, os, sys
from SocketServer import BaseServer
from BaseHTTPServer import HTTPServer
from CGIHTTPServer import *
import cgitb; cgitb.enable()
from OpenSSL import SSL


class SecureHTTPServer(HTTPServer):
    def __init__(self, server_address, HandlerClass):
        BaseServer.__init__(self, server_address, HandlerClass)
        Context = SSL.Context(SSL.SSLv23_METHOD)
        pem = 'C:\SERV\cert.pem'
        Context.use_privatekey_file(pem)
        Context.use_certificate_file(pem)
        self.socket = SSL.Connection(Context, socket.socket(self.address_family,self.socket_type))
        self.server_bind()
        self.server_activate()

class SecureHTTPRequestHandler(CGIHTTPRequestHandler):
    cgi_directories = ['/cgi']


    #def setup(self):
        #self.connection = self.request
        #self.rfile = socket._fileobject(self.request, "rb", self.rbufsize)
        #self.wfile = socket._fileobject(self.request, "wb", self.wbufsize)

def run(HandlerClass = SecureHTTPRequestHandler,ServerClass = SecureHTTPServer):
    server_address = ('localhost', 443)
    handler = CGIHTTPRequestHandler
    server = ServerClass(server_address, handler)
    sa = server.socket.getsockname()

    try:
        print "Server SSL HTTPS on", sa[0], "port", sa[1], "..."
        server.serve_forever()

    except:
        server.socket.closed()

if __name__ == '__main__':
    run()

0 个答案:

没有答案