gpt4 book ai didi

python - 我设置了 https,但数据仍然响应没有证书的客户端

转载 作者:太空宇宙 更新时间:2023-11-03 13:12:57 26 4
gpt4 key购买 nike

我正在开发一个 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.key"),
})

http_server.listen(443)

当我在 chrome/safari 中输入我服务器的 API 后,他们警告我,但数据仍然可以读取。

浏览器没有我的证书/ key 对,为什么他们可以访问我的服务器并读取数据?

根据公/私理论:

  1. 浏览器必须发送其证书中涉及的公钥
  2. 如果我的服务器以某种方式信任证书,我的服务器会使用浏览器的公钥加密响应
  3. 浏览器收到响应并使用自己的私钥解密

在第 2 步中,我的服务器不应该信任浏览器的证书!我说得对吗?

谢谢。

最佳答案

According to public/private theory:

  1. the browser have to send its public key, which involved in its certificate
  2. if my server trust the certificate by some ways, my server encrypt the response using the browser's public key
  3. browser receive the response and decrypt it using itself's private key

不,这不是它的工作原理。

在只有服务器身份验证的 SSL/TLS 中(大多数 HTTPS 站点),服务器首先发送其证书,客户端检查它是否信任该证书,客户端和服务器使用服务器的公钥协商共享 secret (如何完成取决于密码套件),并使用从此共享 secret 派生的 key 设置加密 channel 。

在具有相互身份验证的 SSL/TLS 中,一个额外的步骤涉及客户端将其证书发送到服务器并在握手结束时签署一些东西,以向服务器证明它确实是该证书的持有者。

只有在第二种情况下,浏览器才有证书和私钥,而且在任何情况下都不会用于任何加密。

您在此处使用的代码仅设置certfilekeyfile,这意味着您已将服务器配置为仅对服务器进行身份验证的连接。当您绕过浏览器警告时,您只是告诉它信任服务器证书(因为在您的情况下它是自签名的),因此连接确实可以继续进行。

如果您想对客户端进行身份验证,您需要将服务器配置为请求(并要求)客户端证书。您还需要在客户端(无论是浏览器还是您的应用程序)中设置客户端证书(及其私钥)。这与服务器证书及其私钥无关。

Tornado 文档似乎表明 ssl_options 参数使用 ssl.wrap_socket options ,因此如果您想使用客户端证书身份验证(特别是 cert_reqsca_certs),您应该查看这些内容。

请注意,一般来说,只有在没有人能够反编译应用程序的情况下,使用客户端证书对应用程序(而不是应用程序的用户)进行身份验证才有效。该应用程序将以某种方式包含私钥,因此有人可以掌握它。如果您对应用的所有副本使用相同的私钥,这个问题当然会更糟。

关于python - 我设置了 https,但数据仍然响应没有证书的客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16063899/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com