2017-04-24 110 views
0

我想通過安全websocket測試服務器的功能。我寫了一個客戶端,它通過常規連接很好地連接,但我似乎無法通過WSS進行連接。這裏是我的功能,通過WSS連接:使用python連接到安全websocket

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的東西很新,所以如果任何人都可以指出我正確的方向,它將不勝感激。

回答

0

您的證書有問題。 您使用的是FQDN還是IP?你應該使用FQDN我認爲它會檢查主機名。 You can check more explanation here

+0

但是如果在服務器端有一個選項,如果啓用,從客戶端請求證書怎麼辦?如果情況如此,我如何提供證書? 在上面的代碼中,我提供了一個證書/ Key/CACert文件作爲ssl選項。它似乎有效果,因爲如果我把一個無效的路徑,然後它抱怨它 'socketOptions = {「ca_certs」:「invalid.path」,「keyfile」:「invalid.path」,「certfile」:「無效.path「}' – Ted

+0

是的,你是對的。看看這裏http://stackoverflow.com/questions/11884704/how-to-set-find-the-ca-certs-argument-in-python-ssl-wrap-socket。因此,您甚至可以信任自簽名證書。 – norekhov

相關問題