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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了相互SSL身份验证 - 客户端和服务器端。 Python - > Django / Twisted / Tornado相关的知识,希望对你有一定的参考价值。

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

我想在puppet配置管理系统上做点什么。 Puppet的工作原理如下:

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服务之间的身份验证的最佳实践是什么)?

答案

M2Crypto周围有一个名为pki的Python包装器,它可以创建CSR等等。 你应该可以使用Django,我看不出你为什么需要扭曲。

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

我链接到的pki包有相当彻底的文档字符串,可以让你去。

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

请注意,在此上下文中的“验证”意味着呼叫一个人并询问他们是谁以及他们为什么尝试连接到您的服务,并要求他们确认用于CSR的私钥的指纹。

以上是关于相互SSL身份验证 - 客户端和服务器端。 Python - > Django / Twisted / Tornado的主要内容,如果未能解决你的问题,请参考以下文章

OpenSSL 的相互身份验证始终成功

使用 WCF 进行相互 SSL 身份验证:握手阶段没有 CertificateRequest 和 CertificateVerify

相互证书身份验证失败并出现错误 403.16

SSL和TLS协议如何提供身份验证机密性和完整性

无需 ssl 重新协商的 ssl 客户端身份验证

不是很明白ssl双向认证和单向认证有啥区别吗?