Python 我设置了https,但数据仍然响应到没有证书的客户端
我正在开发一个iOS应用程序,我希望服务器返回的数据只能由我的应用程序读取 因此,我创建了自签名证书,并在Tornado中设置了https,如下所示:Python 我设置了https,但数据仍然响应到没有证书的客户端,python,ios,ssl,https,tornado,Python,Ios,Ssl,Https,Tornado,我正在开发一个iOS应用程序,我希望服务器返回的数据只能由我的应用程序读取 因此,我创建了自签名证书,并在Tornado中设置了https,如下所示: http_server = tornado.httpserver.HTTPServer(applicaton, ssl_options={ "certfile": os.path.join(data_dir, "mydomain.crt"), "keyfile": os.path.join(data_dir, "mydomain.
http_server = tornado.httpserver.HTTPServer(applicaton, ssl_options={
"certfile": os.path.join(data_dir, "mydomain.crt"),
"keyfile": os.path.join(data_dir, "mydomain.key"),
})
http_server.listen(443)
当我在chrome/safari中键入服务器的API后,他们警告我,但数据仍然可以读取
浏览器没有我的证书/密钥对,为什么他们可以访问我的服务器并读取数据
根据公共/私人理论:
谢谢。我在这方面一点也不在行,但证书只是为了帮助确保服务器是它所说的那样 任何人都可以查看页面,如果他们信任服务器证书
为了获得您想要的功能,您可能需要使用某种形式的身份验证,甚至是一些基本的身份验证,例如HTTP头字段中的给定值。这里有一个奇怪的提示,您只需黑客攻击您的用户代理,tornado将只允许您提供的字符串,我不知道iOS浏览器是否提供此功能,但在电脑上的Chrome中,你可以覆盖你的用户代理 开发工具->设置->覆盖 使用: 因为它是一个字符串,所以您只允许一些字符串通过:
if personnalized_ua not in self.request.headers["User-Agent"]:
self.redirect("no-way.html")
现在,如果你只想访问iPhone,使用
根据公共/私人理论:
certfile
和keyfile
,这意味着您已将服务器配置为仅对服务器进行身份验证的连接。当您绕过浏览器警告时,您只是告诉它信任服务器证书(因为它在您的情况下是自签名的),因此连接确实可以继续
如果要对客户端进行身份验证,则需要将服务器配置为请求(并要求)客户端证书。您还需要在客户端(无论是浏览器还是应用程序)中设置客户端证书(及其私钥)。这与服务器证书及其私钥无关
Tornado文档似乎表明ssl\u选项
参数使用了,因此如果要使用客户端证书身份验证(特别是cert\u reqs
和ca\u证书
),您应该研究这些选项
请注意,一般来说,使用客户端证书对应用程序(而不是应用程序的用户)进行身份验证只在没有人能够反编译应用程序时有效。该应用程序将以某种方式包含私钥,因此有人可以获得它。如果你对应用程序的所有副本使用相同的私钥,这个问题当然会更糟。我就知道!我知道一定有一些参数需要设置,但我就是找不到。谢谢。关于“反编译”,我使用密码加密我的.p12文件。密码是一个字符串,以二进制状态存在于应用程序中。当你说“反编译”时,你的意思不是解码源代码,我的意思是“反编译”相当松散,从应用程序的二进制分布形式的逆向工程的意义上来说,至少足以获得私钥。获取包含PKCS#12内容的二进制部分以及旁边的密码就是一个例子。当涉及到从二进制形式进行反向工程时,不会有任何安全性。幸运的是,逆向工程并没有被大多数人所掌握。
if personnalized_ua not in self.request.headers["User-Agent"]:
self.redirect("no-way.html")