2013-10-10 63 views
0

我想使用CGIHTTPServer運行幾個Python CGI腳本。這工作正常,但現在我想在Web偵聽器上使用SSL。簡單的HTTP服務器SSL record_too_long錯誤

我從Activestate code recipes的解決方案開始,並將SimpleHTTPRequestHandler更改爲CGIHTTPRequestHandler。這工作正常提供靜態文件,包括CGI腳本(cgi-bin目錄是,就目前而言,一個鏈接「」),但CGI腳本的Firefox顯示

「SSL收到超過允許的最大長度的記錄「

錯誤代碼:ssl_error_rx_record_too_long。

網絡搜索表明這可能是服務器問題,而不是瀏覽器,這對我來說似乎合乎邏輯。另外,我嘗試了所有建議的瀏覽器設置。我也嘗試了各種服務器設置,但沒有喜悅。

  • 平臺是RHEL 2.6.18
  • Python是2.4.3 - 請不要建議使用「import ssl」,因爲它是不可用
  • 自簽名證書,在瀏覽器(接受靜態文件的工作)

代碼:

import socket, sys  
import SocketServer 
import BaseHTTPServer 
import CGIHTTPServer 
from OpenSSL import SSL 


class SecureHTTPServer(BaseHTTPServer.HTTPServer): 
    def __init__(self, server_address, HandlerClass): 
     self.allow_reuse_address = True 
     SockeServer.BaseServer.__init__(self, server_address, HandlerClass) 
     ctx = SSL.Context(SSL.SSLv23_METHOD) 
     ctx.use_privatekey_file ("path/key.pem") 
     ctx.use_certificate_file("path/cert.pem") 
     self.socket = SSL.Connection(ctx, socket.socket(self.address_family,              self.socket_type)) 
     self.server_bind() 
     self.server_activate() 

class SecureHTTPRequestHandler(CGIHTTPServer.CGIHTTPRequestHandler): 
    def setup(self): 
     self.cgi_directories= ['cgi-bin'] 
     self.connection = self.request 
     self.rfile = socket._fileobject(self.request, "rb", self.rbufsize) 
     self.wfile = socket._fileobject(self.request, "wb", self.wbufsize) 

def test(HandlerClass = SecureHTTPRequestHandler, ServerClass = SecureHTTPServer): 
    httpd = ServerClass(('0.0.0.0',4443), HandlerClass) 
    sa = httpd.socket.getsockname() 
    print "Serving HTTPS on", sa[0], "port", sa[1], "..." 
    httpd.serve_forever() 

if __name__ == '__main__': 
    test() 

我怎麼可能得到這個工作了一個快速簡便的網絡間面對Python 2.4?

回答

0

使用Apache httpd獲取SSL以使用現有的Python CGI腳本獲得SSL。我仍然想知道如何使用CGIHTTPServer類來處理它,儘管