Wow! Super, jetzt klappt es bei mir auch! Sogar in meiner nicht installierten tlslite-Version!
Die Verz. Struktur:
Code: Alles auswählen
/MeinServer.py
/tlslite
/tlslite/integration
/tlslite/utils
Ich hab
MeinServer.py noch mal umstrukturiert, sodas man kein global verwenden muß... Läuft aber im Prinzip auf's selbe hinaus:
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: ISO-8859-1 -*-
import sys,os,SocketServer, BaseHTTPServer, CGIHTTPServer
import webbrowser
sys.path.append(os.getcwd()+"\\tlslite")
sys.path.append(os.getcwd()+"\\tlslite\\integration")
sys.path.append(os.getcwd()+"\\tlslite\\utils")
import tlslite.api
def getfile(filename):
f = file(filename)
content = f.read()
f.close()
return content
x509 = tlslite.api.X509()
x509.parse( getfile("cacert.pem") )
certChain = tlslite.api.X509CertChain([x509])
privateKey = tlslite.api.parsePEMKey( getfile("cakey.pem"), private=True)
sessionCache = tlslite.api.SessionCache()
class MyHTTPServer(SocketServer.ThreadingMixIn,
tlslite.api.TLSSocketServerMixIn,
BaseHTTPServer.HTTPServer):
def handshake(self, tlsConnection):
try:
tlsConnection.handshakeServer(certChain=certChain,
privateKey=privateKey,
sessionCache=sessionCache)
tlsConnection.ignoreAbruptClose = True
return True
except tlslite.api.TLSError, error:
print "Handshake failure:", str(error)
return False
if __name__ == '__main__':
httpd = MyHTTPServer(('localhost', 443), CGIHTTPServer.CGIHTTPRequestHandler)
print "Server gestartet: https://127.0.0.1:443"
webbrowser.open_new("https://127.0.0.1:443") # Öffne Browser
httpd.serve_forever()
Jetzt wird die Sache Interessant! Das ganze ein wenig Aufzubohren:
-Einschränken auf IP-Bereich
-Auf ThreadingTCPServer umstellen
Dadurch das man tlslite nicht wirklich installieren muß, könnte man das ganze evtl. auf einen Web-Server einrichten und dort quasi einen Virtuellen HTTPs Server öffnen... Die Sourcen und die *.pem-Dateien per FTP auf den Server packen und fertig...
Naja, ich denke allerdings, das es wahrscheinlich nicht möglich ist, da man bestimmt nicht einfach einen Port "öffnen" darf... Aber Versuchen kann man es ja mal...
EDIT: Gesagt, getan: Schade, ich hab's mir schon gedacht, es geht nicht:
File "/usr/lib/python2.2/SocketServer.py", line 329, in __init__
self.server_bind()
File "/usr/lib/python2.2/BaseHTTPServer.py", line 94, in server_bind
SocketServer.TCPServer.server_bind(self)
File "/usr/lib/python2.2/SocketServer.py", line 340, in server_bind
self.socket.bind(self.server_address)
socket.error: (13, 'Permission denied')