HTTPS Python клиент - PullRequest
       13

HTTPS Python клиент

6 голосов
/ 08 ноября 2011

У меня есть сервер торнадо, который обеспечивает соединение https с самозаверяющим сертификатом, который я сгенерировал следующим образом:

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

Код сервера следующий:

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

Я хочу иметь Python-клиент, который подключается к серверу и проверяет, что сервер является правильным сервером (я думаю, через его сертификат).На данный момент я создал простой клиент, подобный этому:

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

Что бы вы мне предложили сделать ( Позже клиент станет мобильным приложением Я использую Python только для создания прототипов)?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 08 ноября 2011

Если вы также контролируете клиентскую часть (как в приложении для Android или iphone), вы можете добавить свой самозаверяющий сертификат в хранилище доверенных сертификатов.

Это хорошо объяснено здесь для Androidприложение

1 голос
/ 08 ноября 2011

У клиента нет возможности убедиться, что сервер говорит правду. Вы можете создать самоподписанный сертификат для google.com.

...