2011-11-08 28 views
6

Tengo un servidor tornado que proporcionan una conexión HTTPS con un certificado firmado que me genera de esta manera:HTTPS Python cliente

openssl genrsa -out privatekey.pem 1024           
openssl req -new -key privatekey.pem -out certrequest.csr 
openssl x509 -req -in certrequest.csr -signkey privatekey.pem -out certificate.pem 

El código del servidor es la siguiente:

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

class MainHandler(tornado.web.RequestHandler): 
    def get(self): 
     print "new client "+str(self) 
     self.write("Hello, world") 

application = tornado.web.Application([ 
    (r"/", MainHandler), 
]) 


http_server = tornado.httpserver.HTTPServer(application, 
              ssl_options={ 
     "certfile": os.path.join("./", "certificate.pem"), 
     "keyfile": os.path.join("./", "privatekey.pem"), 

}) 

if __name__ == "__main__": 
    http_server.listen(443) 
    tornado.ioloop.IOLoop.instance().start() 

Quiero tener un cliente de Python que se conecte al servidor y verifique que el servidor sea el correcto (supongo que a través de su certificado). Para el momento en que lo hicieron un cliente simple como esto:

import httplib 
HOSTNAME='localhost' 
conn = httplib.HTTPSConnection(HOSTNAME) 
conn.putrequest('GET','/') 
conn.endheaders() 
response = conn.getresponse() 
print response.read() 

¿Qué sugieres que haga (El cliente será más tarde ser una aplicación móvil Yo sólo uso de Python para la creación de prototipos)?

Gracias.

+0

Si usted me puede proporcionar a un cliente en Java que también está bien. – lc2817

+0

relacionado http://www.heikkitoivonen.net/blog/2010/08/23/ssl-in-python-2-7/ – jfs

+0

relacionado: http://stackoverflow.com/questions/1087227/validate-ssl-certificates -with-python – jfs

Respuesta

3

Si controla el lado del cliente también (como en una aplicación para Android o iPhone) puede agregar su certificado autofirmado a su tienda de certificados de confianza.

Es bien explicado here for an Android app

+0

Gracias, ¿podría darme más información sobre cómo hacerlo en una aplicación de iPhone? – lc2817

1

No hay forma de que el cliente se asegure de que el servidor dice la verdad. Puede crear un certificado autofirmado para google.com.

+0

Digamos que podría registrar mi certificado en una autoridad de certificación, ¿qué debo hacer entonces? – lc2817

+0

@ lc2817: entonces podría usar [una de las respuestas] (http://stackoverflow.com/questions/1087227/validate-ssl-certificates-with-python) He vinculado anteriormente. – jfs

+0

No respondió a mi último comentario en los otros enlaces. – lc2817

Cuestiones relacionadas