Python Twisted TLS连接与STARTTLS和身份验证 - 示例代码中的错误?

时间:2014-09-29 11:03:09

标签: python authentication ssl twisted

我一直在尝试基于https://twistedmatrix.com/documents/14.0.0/core/howto/ssl.html#client-authenticationhttps://twistedmatrix.com/documents/14.0.0/core/howto/ssl.html#using-starttls创建一个简单的python twisted TLS客户端/服务器应用程序。即,我想创建纯文本连接,然后在客户端发出STARTTLS命令时,切换到安全连接,并使用适当的证书身份验证。到目前为止,我没什么快乐。

我首先关注的是上面的URL中的客户端身份验证示例是错误的。这似乎表明客户端和服务器需要“server.pem”(私钥和自签名证书在一起)和“public.pem”(服务器的公共证书本身)。我对身份验证的理解是,如果客户端具有服务器的私钥,那么这会使身份验证/安全性变得多余?假设我是对的,应该这个例子看起来怎么样?

其次,尽管我已经尝试过 - 我仍然在努力让我的头脑绕着Twisted的方式工作。有人可以举例说明如何修改上面的URL中的starttls示例以合并身份验证吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

  

我首先关注的是上面的URL中的客户端身份验证示例是错误的。这似乎表明客户端和服务器都需要" server.pem" (私钥和自签名证书在一起)和" public.pem" (服务器的公共证书本身)。我对身份验证的理解是,如果客户端具有服务器的私钥,那么这会导致身份验证/安全性大部分是多余的吗?假设我是对的,这个例子应该怎么样?

您链接的网址是"客户端身份验证" TLS文档的一部分。它演示了如何使用客户端证书对服务器的客户端进行身份验证(请注意,TLS的常见问题 - HTTPS - 是向客户端验证服务器)。

在客户端身份验证的情况下,客户端确实需要私钥和证书(自签名或其他方式)。这类似于" normal" TLS(只有服务器向客户端验证自身)服务器必须具有私钥和证书(自签名或其他)。

但是,客户端不需要服务器的私钥。它需要它自己的。 (实际上,如果双方都有相同的密钥,它会起作用,但这不是典型的情况。)

  

其次,尽管我已经尝试过 - 我仍然在努力让我的头脑绕过Twisted的工作方式。有人可以举例说明如何修改上面的URL中的starttls示例以合并身份验证吗?

您想要什么样的身份验证?如果您正在进行TLS客户端身份验证,那么这是一种身份验证形式。如果这就足够了,您只需要正确配置服务器。客户端通常为所提供的服务器证书执行的相同证书验证逻辑已完成 - 但方向相反 - 当您使用客户端证书时。如果证书中的有效签名到其信任根之一,服务器将查找链。