2013-08-19 12 views
14

Proszę mi pomóc stworzyć serwer HTTPS tornado Mój obecny kod Python3 nie działaJak stworzyć serwer HTTPS tornado

import os, socket, ssl, pprint, tornado.ioloop, tornado.web, tornado.httpserver 
from tornado.tcpserver import TCPServer 

class getToken(tornado.web.RequestHandler): 
    def get(self): 
     self.write("hello") 

application = tornado.web.Application([ 
    (r'/', getToken), 
]) 

# implementation for SSL 
http_server = tornado.httpserver.HTTPServer(application) 

TCPServer(ssl_options={ 
    "certfile": os.path.join("/var/pyTest/keys/", "ca.csr"), 
    "keyfile": os.path.join("/var/pyTest/keys/", "ca.key"), 
}) 

if __name__ == '__main__': 
    #http_server.listen(8888) 
    http_server = TCPServer() 
    http_server.listen(443) 
    tornado.ioloop.IOLoop.instance().start() 

HTTPS jest bardzo ważne dla mnie, pomóż

Odpowiedz

31

Nie ma potrzeby korzystania TCPServer.

Spróbuj następujący:

import tornado.httpserver 
import tornado.ioloop 
import tornado.web 

class getToken(tornado.web.RequestHandler): 
    def get(self): 
     self.write("hello") 

application = tornado.web.Application([ 
    (r'/', getToken), 
]) 

if __name__ == '__main__': 
    http_server = tornado.httpserver.HTTPServer(application, ssl_options={ 
     "certfile": "/var/pyTest/keys/ca.csr", 
     "keyfile": "/var/pyTest/keys/ca.key", 
    }) 
    http_server.listen(443) 
    tornado.ioloop.IOLoop.instance().start() 
+0

@ 63ek, Czy sprawdzić certFile jest poprawna? Testowałem kod samodzielnie, ale certfile z rozszerzeniem ".pem". – falsetru

+0

Dziękuję bardzo – 63ek

+2

Tornado 2.x i więcej zapewnia wygodną metodę w aplikacji do tworzenia instancji HTTPServer dla ciebie, więc możesz po prostu powiedzieć application.listen (443, ssl_options = etc). Możesz nawet mieć * tę samą * aplikację nasłuchującą na * obu * portach (80 * i * 443) po prostu przez umieszczenie * dwóch * wywołań application.listen przed uruchomieniem IOLoop, chociaż jeśli chcesz móc działać inaczej, w zależności od do którego portu wysłano żądanie, potrzebujesz innej aplikacji dla każdego portu. –