代码可以在Python3.6上运行,但不能在3.7中运行

2024-09-28 01:32:45 发布

您现在位置:Python中文网/ 问答频道 /正文

那几天我开始学习python和sockets,我做了一个简单的客户机-服务器应用程序来做一些测试,它可以很好地与python3.6配合使用,但在最新版本中给了我错误。在

服务器.py

import socket, ssl

context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
context.verify_mode = ssl.CERT_REQUIRED
context.load_cert_chain(certfile="SSL/server.crt", keyfile="SSL/server.key")
context.load_verify_locations("SSL/client.crt")

bindsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
bindsocket.bind(("127.0.0.1", 65405))
bindsocket.listen(10)

while True:
    newsocket, fromaddr = bindsocket.accept()
    print(newsocket)
    connstream = context.wrap_socket(newsocket, server_side=True)
    try:
        print(connstream.getpeercert())
    finally:
        connstream.shutdown(socket.SHUT_RDWR)
        connstream.close()

客户端.py

^{pr2}$

错误

Traceback (most recent call last):
    File "C:/Users/nicol/Desktop/Kyuu/Bot/Kaori/Python/server.py", line 15, in <module>
    connstream = context.wrap_socket(newsocket, server_side=True)
    File "C:\Users\nicol\AppData\Local\Programs\Python\Python37\lib\ssl.py", line 412, in wrap_socket
    session=session
    File "C:\Users\nicol\AppData\Local\Programs\Python\Python37\lib\ssl.py", line 853, in _create
    self.do_handshake()
    File "C:\Users\nicol\AppData\Local\Programs\Python\Python37\lib\ssl.py", line 1117, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [SSL: SSLV3_ALERT_BAD_CERTIFICATE] sslv3 alert bad certificate (_ssl.c:1056)

编辑1

我试着用ssl.ssl上下文(ssl.PROTOCOL\u TLS\u服务器)以及ssl.ssl上下文(ssl.PROTOCOL\u TLS\u客户端),但我也犯了同样的错误。在

编辑2

当我使用命令“s_client-connect 127.0.0.1:65405-cert”时客户.pem-钥匙客户.pem-咖啡馆服务器.crt“在OpenSSL中,它工作得很好


Tags: inpysslserver错误contextlinesocket

热门问题