2011-11-08 14 views
6

Mam serwer tornado, które zapewniają połączenia https z siebie podpisane zaświadczenia, że ​​wygenerowany w ten sposób:HTTPS Python klient

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 

Kod serwera jest następujący:

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

Chcę mieć klienta Pythona, który łączy się z serwerem i sprawdza, czy serwer jest właściwym serwerem (jak sądzę przez jego certyfikat). Na razie zrobiłem prosty klient tak:

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

Co proponujesz mi zrobić (klient będzie później być mobilna aplikacja używam tylko Pythona dla prototypów)?

Dzięki.

+0

Jeśli możesz podać mi klienta w Javie, który jest również OK. – lc2817

+0

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

+0

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

Odpowiedz

3

Jeśli kontrolujesz stronę klienta (tak jak w aplikacji na Androida lub iPhona), możesz dodać samopodpisany certyfikat do zaufanego magazynu certyfikatów.

Jest dobrze wyjaśniony here for an Android app

+0

Dzięki, możesz dać mi więcej informacji na temat tego, jak to zrobić w aplikacji IPhone? – lc2817

1

Klient nie ma możliwości upewnienia się, że serwer mówi prawdę. Możesz utworzyć samopodpisany certyfikat dla google.com.

+0

Powiedzmy, że mogę zarejestrować mój certyfikat w urzędzie certyfikacji, co powinienem zrobić? – lc2817

+0

@ lc2817: wtedy możesz użyć [jednej z odpowiedzi] (http://stackoverflow.com/questions/1087227/validate-ssl-certificates-with-python) Połączyłem wcześniej. – jfs

+0

Nie odpowiedziałeś na mój ostatni komentarz do innych linków. – lc2817