Python SSL 套接字客户端身份验证

use*_*820 5 python ssl certificate

我正在尝试在 python 中设置服务器和客户端,其中服务器使用带有证书的 SSL 对客户端进行身份验证。网上有很多 SSL 证书的示例,但我发现的所有内容都是服务器向客户端提供证书并由客户端检查它。我需要服务器来确保客户端有权限连接到服务器。我了解如何生成和发送证书及其工作原理。我会输入我的代码,但是我的客户端/服务器在没有 SSL 的情况下工作正常,并且我一直在引用来获取 SSL。该页面底部的客户端/服务器示例总结了我对 python 中 SSL 证书的理解。

我意识到这没什么可继续的,但如果有人可以解释对该示例的基本修改,让服务器对客户端进行身份验证,而不是相反,那就太棒了。或者,指向示例的链接甚至只是一些要研究的套接字方法都会非常有帮助。如果需要更多信息,请告诉我。我并不是想含糊其辞并保证我自己花了整个上午寻找信息:)。

编辑:我试图坚持基本的 ssl 库。又名“导入 ssl”。

jlu*_*jan 3

您将使用SSLSocket.getpeercert来获取证书。就像服务器端一样,客户端在包装套接字时需要指定密钥和证书。在服务器端,您还需要传递 ca_certs="path_to_ca_cert_file" 并且可能还想指定 cert_reqs=CERT_REQUIRED (请参阅ssl.wrap_socket的 args 。

除此之外,听起来您可能希望进行基于证书的客户端身份验证/授权?这是使用 getpeercert 获取客户端证书并访问证书中的字段以在正常身份验证路径中使用的简单问题(即公用名 == 用户 ID)