2012-03-23 151 views
3

我正在构建一个python应用程序,客户端将从服务器(也运行python)请求xml页面。相互SSL身份验证 - 客户端和服务器端。 Python - > Django/Twisted/Tornado

我想在木偶配置管理系统上做些事情。木偶工作如下:

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能够在第一次运行时签署证书,然后使用证书进行身份验证,或者我需要在前端使用类似扭曲的东西?
- 发送CSR的最佳方式是发送到服务器的POST?
- 是否有人知道是否有一些代码示例可以覆盖客户端和服务器端?
- 有没有其他方法可以在客户端/服务器之间建立可信连接而无需人工迭代(web服务之间进行身份验证的最佳实践是什么)?

回答

1

围绕M2Crypto有一个叫做pki的Python包装器,可以轻松创建CSR等。你应该可以使用Django,我没有看到你需要Twisted的理由。

你也可以用POST发送CSR,是的,那里没有任何机密 - 这就是要点。

我链接到的pki包有相当彻底的文档,应该让你去。

我不认为你可以建立一个“可信任的连接”,而不需要人为干涉任何。信任是一种人性化的概念,因此您至少需要批准第一个连接请求,并希望您能验证试图连接的人是否真正获得授权。

注意,在此背景下,“验证”是指呼叫一个人,并要求他们他们是谁,为什么他们正试图连接到您的服务,并要求他们确认用于CSR的私有密钥的指纹。

+0

谢谢!我会看看你链接的软件包。关于信任,是的。在获得CSR后,我们的想法是,负责客户的人员将登录并签署该特定客户的证书。关于django的用法,我的疑问是,如果我能够在随后的请求中检查证书。 – 2012-03-23 16:28:23

+0

@Leon:您会为Django编写身份验证中间件(在Django代码库中有远程用户身份验证的示例,您可以使用SSL证书执行相同操作)。在中间件中,您可以从请求对象获取证书,然后使用它进行身份验证。然后,您将看到新客户可以发送不需要身份验证的CSR的另一个视图。 – cha0site 2012-03-23 16:48:52

相关问题