【问题标题】:Mutual SSL Authentication - Client and Server sides. Python -> Django/Twisted/Tornado相互 SSL 身份验证 - 客户端和服务器端。 Python -> Django/Twisted/Tornado
【发布时间】:2012-04-08 04:56:24
【问题描述】:

我正在构建一个 python 应用程序,其中客户端将从服务器(也运行 python)请求 xml 页面。

我想做一些关于puppet配置管理系统的事情。木偶的工作原理如下:

1) 如果客户端第一次运行,它会生成一个证书签名请求和一个私钥。前者是自签名的 x509 证书。
2)客户端连接到master(此时客户端没有被认证)并发送它的CSR,它也会收到CA证书和CRL作为回报。
3) master 将 CSR 存储在本地
4) 管理员检查 CSR 并最终对其进行签名(此过程可以通过自动签名自动化)。我强烈建议在此阶段验证证书指纹。
5) 客户端然后等待他的签名证书,主机最终发送该证书。
6) 所有接下来的通信都将使用这个客户端证书。主服务器和客户端都将通过共享同一个 CA 来相互验证。
(来自http://www.masterzen.fr/2010/11/14/puppet-ssl-explained/

我不知道该怎么做的主要事情是:
- 最好使用哪些库?
- 在服务器端使用什么? apache/nginx 后面的 Django 是否能够在第一次运行时签署证书并在之后使用证书进行身份验证,或者我需要在前端使用类似 twisted 的东西?
- 发送 CSR 的最佳方式是向服务器发送 POST?
- 有人知道是否有一些代码示例可以同时涵盖客户端和服务器端吗?
- 有没有其他方法可以在无需人工迭代的情况下在客户端/服务器之间建立可信连接(Web 服务之间身份验证的最佳实践是什么)?

【问题讨论】:

    标签: python django ssl twisted


    【解决方案1】:

    M2Crypto 周围有一个名为pki 的 Python 包装器,它可以让创建 CSR 变得如此简单。你应该可以使用 Django,我看不出你为什么需要 Twisted。

    您也可以通过 POST 发送 CSR,是的,里面没有任何机密信息 - 这就是重点。

    我链接到的 pki 包有相当详尽的文档字符串,应该可以帮助你。

    我认为如果没有任何人为干预,您将无法建立“可信连接”。信任是人类的概念 - 因此您至少需要批准第一个连接请求,并希望您能验证尝试连接的人是否真正获得授权。

    请注意,在这种情况下,“验证”意味着打电话给某人并询问他们是谁以及他们为什么要尝试连接到您的服务,并要求他们确认用于 CSR 的私钥的指纹。

    【讨论】:

    • 谢谢!我会看看你链接的包。关于信任,是的。在我获得 CSR 之后,我的想法是负责客户的人员将登录并为该特定客户签署证书。关于 django 的使用,我怀疑我是否能够在后续请求中检查证书。
    • @Leon:您将为 Django 编写一个身份验证中间件(在 Django 代码库中有远程用户身份验证的示例,您可以这样做,但使用 SSL 证书)。在中间件中,您可以从请求对象中获取证书,然后使用它进行身份验证。然后,您将看到另一个视图,其中新客户端可以发送不需要身份验证的 CSR。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    相关资源
    最近更新 更多