Python SSL Socket 客户端身份验证

5
我正在尝试在Python中设置服务器和客户端,其中服务器使用SSL证书对客户端进行身份验证。网上有很多SSL证书的示例,但我发现所有示例都是服务器提供证书给客户端并由客户端检查。我需要服务器确保客户端有权连接到服务器。我了解如何生成和发送证书以及它们的基本工作原理。我可以打出我的代码,但我没有SSL的客户端/服务器运行良好,我一直在参考这个页面有关SSL的信息。该页面底部的客户端/服务器示例总结了我对Python SSL证书的理解。

我意识到这还不足以操作,但如果有人能够解释一下那个示例的基本修改方式,使服务器认证客户端而不是反过来,那将非常棒。或者,一个示例链接或仅提供一些要调查的套接字方法也将非常有帮助。如果需要更多信息,请告诉我。我并不是故意含糊其辞,并承诺我已经花了整个早上寻找信息:)。

编辑:我尝试坚持使用基本的ssl库,即"import ssl"。

2个回答

3
您可以使用SSLSocket.getpeercert来获取证书。客户端需要在套接字包装时指定密钥和证书,就像服务器端一样。在服务器端,您还需要传递ca_certs="path_to_ca_cert_file",并且可能还想指定cert_reqs=CERT_REQUIRED(请参见ssl.wrap_socket的参数)。
此外,您似乎正在寻求基于证书的客户端身份验证/授权?这只是使用getpeercert获取客户端证书,并访问证书中的字段以在正常身份验证路径中使用(例如:通用名称==用户ID)。

0

据我所知,我链接的示例代码是让服务器向客户端发送其证书。然后客户端会检查该证书是否在其证书链中,以确保可以连接到服务器。但我需要相反的操作。我需要客户端向服务器发送其证书,让服务器将客户端的证书与其允许的证书列表进行比对,并最终完成与客户端的握手。我会继续阅读...也许我并不像我想象的那样理解。感谢提供的链接。 - user1777820

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接