Python 2.7 使用python连接到安全websocket

Python 2.7 使用python连接到安全websocket,python-2.7,websocket,ssl-certificate,Python 2.7,Websocket,Ssl Certificate,我试图通过安全websocket测试服务器的功能。我已经编写了一个客户端,它通过常规连接可以很好地连接,但我似乎无法通过WSS连接。以下是我通过WSS连接的功能: def connectWSS(self, certCAFile, certFile, keyFile): self.ws = websocket.WebSocketApp(self._wss_url, on_message = self.on_message, on_error = self.on_error, on

我试图通过安全websocket测试服务器的功能。我已经编写了一个客户端,它通过常规连接可以很好地连接,但我似乎无法通过WSS连接。以下是我通过WSS连接的功能:

def connectWSS(self, certCAFile, certFile, keyFile):
    self.ws = websocket.WebSocketApp(self._wss_url, on_message = 
    self.on_message, on_error = self.on_error, on_close = self.on_close)
    self.ws.on_open = self.on_open

    socketOptions = {"ca_certs": certCAFile, "keyfile": keyFile, 
    "certfile": certFile}

    def run(*args):
        print "Starting..."
        logger = logging.getLogger(__name__)
        logger.info("Connecting to websocket")
        self.ws.run_forever(sslopt=socketOptions)

    thread.start_new_thread(run, ())
我意识到我可以添加

"cert_reqs": ssl.CERT_NONE
到sslopt字段,但我希望使用证书通过WSS进行连接,以验证服务器是否正在实际检查它们。我遇到的问题是当它提示我

Enter PEM pass phrase:
当我输入密码短语时,出现以下错误:

EOF occurred in violation of protocol (_ssl.c:590)

我正在为服务器和客户端使用自签名证书,所以我自己使用openssl生成了证书。这是我的证书的问题还是我的代码中缺少了什么?我对这种安全的websocket非常陌生,因此如果有人能为我指出正确的方向,我将不胜感激。

您的证书有问题。 您使用的是FQDN还是IP?我认为您应该使用FQDN,因为它将检查主机名。

但是如果服务器端有一个选项,如果启用该选项,将从客户端请求证书,该怎么办?如果是这样,我如何提供证书?在上面的代码中,我提供了一个certificate/Key/CACert文件作为ssl选项。它似乎有一种效果,因为如果我放了一个无效的路径,它就会抱怨它
socketOptions={“ca_certs”:“invalid.path”,“keyfile”:“invalid.path”,“certfile”:“invalid.path”}
是的,你是对的。看这里。因此,您甚至可以信任自签名证书。