HTTPS Python 客户端

6 投票
2 回答
2097 浏览
提问于 2025-04-17 05:50

我有一个 Tornado 服务器,它提供一个 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 个回答

1

客户端无法确保服务器说的是真的。你可以为google.com创建一个自签名证书。

3

如果你也能控制客户端,比如在安卓或苹果手机的应用里,你可以把自己签发的证书添加到信任的证书库里。

关于这个内容,这里有个很好的解释,专门针对安卓应用

撰写回答