2015-10-05 1 views
2

En parcourant les documents Tornado, je n'arrive pas à trouver un traitement à propos de l'authentification SSL bidirectionnelle . Actuellement, les codes ressemble à ceci en utilisant des certificats auto-signés:Authentification mutuelle dans Tornado avec des certificats auto-signés

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

class fooHandler(tornado.web.RequestHandler): 
    def get(self): 
     #Do Something 

if __name__ == "__main__": 
    application = tornado.web.Application([ 
     (r"/foo/", fooHandler), 
    ]) 
    http_server = tornado.httpserver.HTTPServer(application, ssl_options={ 
      "certfile": "./cert.pem", 
      "keyfile": "./key.pem", 
     }) 
    http_server.listen(8888) 
    tornado.ioloop.IOLoop.instance().start() 
+0

[Certificats liés à l'origine: une nouvelle approche du client fort Authentification pour le Web] (https://www.usenix.org/system/files/conference/usenixsecurity12/sec12-final162.pdf) et [The Token Protocole de liaison] (https://tools.ietf.org/html/draft-ietf-tokbind-protocol). – jww

Répondre

1

Vous devez définir le verify_mode de votre ssl.SSLContext:

ssl_ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH) 
ssl_ctx.load_cert_chain("cert.pem", "key.pem") 
# If your certs are not self-signed, load your CA certificates here. 
#ssl_ctx.load_verify_locations("cacerts.pem") 
ssl_ctx.verify_mode = ssl.CERT_REQUIRED 
http_server = HTTPServer(application, ssl_options=ssl_ctx) 

Ensuite, vous pouvez utiliser self.request.get_ssl_certificate pour obtenir le certificat du client.