在我看来,SSL 重新协商在这里并不特别适用。您真正想要做的是根据提供的客户端证书授权请求。可能需要 SSL 重新协商的唯一原因是,如果您希望客户端能够通过单个持久 HTTPS 连接请求多个资源,并为每个资源提供不同的客户端证书。我觉得这不太可能是必要的(或者至少,想要这样做的原因 - 而不仅仅是让客户端建立新的 HTTPS 连接,或者只是根据单个客户端证书授权所有资源 - 是模糊的)。
Twisted Web 中的授权很简单。许多人更喜欢类似能力的方法,其中服务器根据客户端提供的凭据选择资源对象。此资源对象可以完全控制其内容及其子对象,因此通过选择适合所提供凭据的资源对象,您可以完全控制哪些内容可供哪些客户端使用。
您可以在 60 seconds 系列的 web 中twisted.web.guard
的http auth 条目中阅读有关内容。
这将使您熟悉 Twisted Web 中身份验证和授权的细节。但是,它不会告诉您如何基于 SSL 客户端证书进行身份验证或授权。
为此,您需要编写类似于-HTTPAuthSessionWrapper
但检查客户端 SSL 证书而不是像执行HTTP 身份验证的内容HTTPAuthSessionWrapper
。这将涉及实施:
IResource
检查接收请求以提取客户端证书的传输
- 实现代表 X509 证书的凭证类型
- 实现一个凭据检查器,它可以根据用户的 X509 证书对用户进行身份验证
- 并可能实现一个可以授权用户的领域(尽管您可能已经编写了这个,因为它与身份验证步骤正交,因此即使您不想使用 SSL 证书进行身份验证也可以重用)
这个功能在 Twisted 本身中会很受欢迎,所以我相信你可以从 Twisted 开发 IRC 频道(freenode 上的#twisted-dev)找到更多帮助,我希望你能将你写回的任何东西贡献给 Twisted!