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?