相互 SSL 身份验证 - 客户端和服务器端。Python -> Django/Twisted/Tornado



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

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

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

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

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

你也可以用POST发送CSR,是的,里面没有任何机密——这就是重点。

我链接到的pki包有相当全面的文档字符串,应该会让你开始。

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

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

最新更新