2013-10-31 6 views
9

Ich weiß, Sie 3 ein einfaches HTTP-Webserver in Python erstellenPython 3 HTTPS Webserver

python -m http.server 

jedoch verwenden, ist es eine einfache Möglichkeit, die Verbindung zum WebServer zu sichern, tun müssen, um i-Zertifikate generieren? Wie würde ich das tun?

+0

Ich nehme an, Sie könnten zuerst versuchen, 'Google' zu ​​fragen. Siehe http://www.piware.de/2011/01/creating-an-https-server-in-python/ und http://code.activestate.com/recipes/442473-simple-http-server-supporting- ssl-secure-communica/ – starrify

+0

Abgesehen davon: Es ist viel häufiger, dass ein "echter" Web-Server dies behandelt und nur Python zum Ausführen von Anwendungscode verwendet. – millimoose

Antwort

14

Zunächst werden Sie ein Zertifikat benötigen - nehmen wir es in einer Datei localhost.pem haben die sowohl die privaten und öffentlichen Schlüssel enthält, dann:

import http.server, ssl 

server_address = ('localhost', 4443) 
httpd = http.server.HTTPServer(server_address, http.server.SimpleHTTPRequestHandler) 
httpd.socket = ssl.wrap_socket(httpd.socket, 
           server_side=True, 
           certfile='localhost.pem', 
           ssl_version=ssl.PROTOCOL_TLSv1) 
httpd.serve_forever() 

Achten Sie darauf, die richtigen Parameter für wrap_socket angeben!

+0

Ich musste auch 'keyfile = '...' angeben. Auch z.B. Bei der Abfrage mit curl heißt es: curl: (56) GnuTLS recv error (-110): Die TLS-Verbindung wurde nicht ordnungsgemäß beendet (was ignoriert werden kann, aber etwas scheint hässlich zu sein) – Blauhirn

+1

Sie müssen 'keyfile angeben 'Wenn das Zertifikat nicht den privaten Schlüssel enthält, wie ich bereits erwähnt habe, ist die Dokumentation [hier] (https://docs.python.org/3/library/ssl.html#combined-key-and-certificate). –