2011-11-08 16 views
6

Ho un server tornado che forniscono una connessione HTTPS con un certificato auto firmato che ho generato in questo modo: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 

Il codice del server è la seguente:

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() 

Voglio avere un client python che si connette al server e verificare che il server sia il server giusto (suppongo attraverso il suo certificato). Per il momento ho fatto un semplice client come questo:

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

Cosa suggerirebbe che io faccia (Il cliente sarà in seguito un app mobile Io uso solo pitone per la prototipazione)?

Grazie.

+0

Se mi è possibile fornire un client in Java che è anche OK. – lc2817

+0

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

+0

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

risposta

3

Se si controlla anche il lato client (come in un'app per android o iphone) è possibile aggiungere il certificato autofirmato all'archivio certificati attendibili.

È ben spiegato here for an Android app

+0

Grazie, potresti darmi ulteriori informazioni su come farlo su un'app IPhone? – lc2817

1

Non c'è modo per il client di assicurarsi che il server dice la verità. È possibile creare un certificato autofirmato per google.com.

+0

Diciamo che potrei registrare il mio certificato su un'autorità di certificazione cosa dovrei fare allora? – lc2817

+0

@ lc2817: quindi è possibile utilizzare [una delle risposte] (http://stackoverflow.com/questions/1087227/validate-ssl-certificates-with-python) che ho collegato in precedenza. – jfs

+0

Non hai risposto al mio ultimo commento sugli altri link. – lc2817

Problemi correlati