Ssl 使用twisted webserver对特定资源进行基于客户端证书的访问

Ssl 使用twisted webserver对特定资源进行基于客户端证书的访问,ssl,webserver,certificate,twisted,authentication,Ssl,Webserver,Certificate,Twisted,Authentication,我想知道twisted Web服务器是否能够使用基于客户端证书的身份验证限制对某些资源的访问,并允许在没有证书的情况下访问其他资源 我搜索了所有问题,找到了以下帖子: 现在我的问题是,是否有人知道twisted是否实现了ssl重新协商,以及一个示例会是什么样子 还是从那时起就有了不同的方法 为了让事情变得清楚,并提供更多信息: 我真正想要实现的是这样的目标: 新用户访问站点,但尚未授予对资源的访问权限,因为他还没有允许他查看站点的令牌 因此,他会被重定向到请求客户端证书的登录资源。如果一切正

我想知道twisted Web服务器是否能够使用基于客户端证书的身份验证限制对某些资源的访问,并允许在没有证书的情况下访问其他资源

我搜索了所有问题,找到了以下帖子:

现在我的问题是,是否有人知道twisted是否实现了ssl重新协商,以及一个示例会是什么样子

还是从那时起就有了不同的方法


为了让事情变得清楚,并提供更多信息:

我真正想要实现的是这样的目标:

  • 新用户访问站点,但尚未授予对资源的访问权限,因为他还没有允许他查看站点的令牌
  • 因此,他会被重定向到请求客户端证书的登录资源。如果一切正常,则从证书检索的附加数据将存储在会话中,该会话构成令牌
  • 然后他被重定向回入口站点,验证令牌,并根据他的授权级别显示特定内容
如果我理解你的意思,Jean-Paul,这似乎可以用你的策略来实现,对吗?
如果我遗漏了什么或做错了,请纠正我。

在我看来,SSL重新协商在这里并不特别适用。实际上,您要做的是根据提供的客户端证书对请求进行授权。可能需要SSL重新协商的唯一原因是,如果您希望客户端能够通过单个持久HTTPS连接请求多个资源,并为每个资源提供不同的客户端证书。我觉得这不太可能是必要的(或者至少,想要这样做的原因——而不仅仅是让客户端建立一个新的HTTPS连接,或者仅仅基于一个客户端证书授权您的所有资源——是不清楚的)

TwistedWeb中的授权非常简单。许多人更喜欢类似功能的方法,即服务器根据客户端提供的凭据选择资源对象。此资源对象可以完全控制其内容及其子对象,因此,通过为提供的凭据选择一个合适的资源对象,您可以完全控制哪些内容可供哪些客户端使用

您可以在中的中阅读有关
twisted.web.guard

这将使您熟悉Twisted Web中身份验证和授权的细节。不过,它不会告诉您如何基于SSL客户端证书进行身份验证或授权

要做到这一点,您需要编写类似于
HTTPAuthSessionWrapper
,但它检查客户端SSL证书,而不是像
HTTPAuthSessionWrapper
那样实现。这将涉及实施:

  • IResource
    检查接收提取客户端证书请求的传输
  • 实现表示X509证书的凭据类型
  • 实现一个凭据检查器,它可以根据用户的X509证书对用户进行身份验证
  • 并且可能实现一个可以授权用户的领域(尽管您可能已经编写了这个领域,因为它与身份验证步骤正交,因此即使您不想使用SSL证书进行身份验证,它也是可重用的)

Twisted本身非常欢迎此功能,因此我相信您可以从Twisted development IRC频道(freenode上的Twisted dev)中找到更多帮助,我希望您能为Twisted贡献您写的任何东西

在我看来,SSL重新协商在这里并不特别适用。实际上,您要做的是根据提供的客户端证书对请求进行授权。可能需要SSL重新协商的唯一原因是,如果您希望客户端能够通过单个持久HTTPS连接请求多个资源,并为每个资源提供不同的客户端证书。我觉得这不太可能是必要的(或者至少,想要这样做的原因——而不仅仅是让客户端建立一个新的HTTPS连接,或者仅仅基于一个客户端证书授权您的所有资源——是不清楚的)

TwistedWeb中的授权非常简单。许多人更喜欢类似功能的方法,即服务器根据客户端提供的凭据选择资源对象。此资源对象可以完全控制其内容及其子对象,因此,通过为提供的凭据选择一个合适的资源对象,您可以完全控制哪些内容可供哪些客户端使用

您可以在中的中阅读有关
twisted.web.guard

这将使您熟悉Twisted Web中身份验证和授权的细节。不过,它不会告诉您如何基于SSL客户端证书进行身份验证或授权

要做到这一点,您需要编写类似于
HTTPAuthSessionWrapper
,但它检查客户端SSL证书,而不是像
HTTPAuthSessionWrapper
那样实现。这将涉及实施:

  • IResource
    检查接收提取客户端证书请求的传输
  • 实现表示X509证书的凭据类型
  • 实现一个凭据检查器,它可以根据用户的X509证书对用户进行身份验证
  • 并且可能实现一个可以授权用户的领域(尽管您可能已经编写了这个领域,因为它与身份验证步骤正交,因此即使您不想使用SSL证书进行身份验证,它也是可重用的)
这一功能在Twisted本身是非常受欢迎的,所以我相信您可以从中找到更多帮助