2017-04-24 9 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,()) 

나는 그냥 sslopt 분야에

"cert_reqs": ssl.CERT_NONE 

을 추가 할 수 있다는 걸하지만 서버가 있는지 확인하기 위해 인증서를 사용하여 WSS를 통해 연결하려는 실제로 그들을 확인합니다. 나는 모두 서버에 대한 자체 서명 된 인증서를 사용하고

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

: 나는에 실행하고 문제는 내가 내 암호 나는 다음과 같은 오류가 점점 오전에 들어갔을 때이

Enter PEM pass phrase: 

나를 메시지를 표시 할 때입니다 클라이언트, 그래서 나는 openssl을 사용하여 직접 인증서를 생성했습니다. 인증서에 문제가 있습니까? 아니면 코드에 누락 된 부분이 있습니까? 나는 누군가가 올바른 방향으로 나를 가리킬 수 있다면,이 보안 websocket 물건에 아주 새로운입니다, 그것은 크게 감사하겠습니다.

답변

0

인증서에 문제가 있습니다. FQDN 또는 IP를 사용하고 있습니까? FQDN을 사용해야합니다. 왜냐하면 호스트 이름을 검사 할 것이기 때문입니다. You can check more explanation here

+0

그러나 서버 측에서 클라이언트 쪽에서 인증서를 요청하는 옵션이 있으면 어떻게해야합니까? 그렇다면 어떻게 인증서를 제공 할 수 있습니까? 위의 코드에서 ssl 옵션으로 인증서/키/CACert 파일을 제공하고 있습니다. 잘못된 경로를 입력하면 불만을 토로하기 때문에 효과가있는 것 같습니다. 'socketOptions = { "ca_certs": "invalid.path", "keyfile": "invalid.path", "certfile": "invalid" .path "}' – Ted

+0

네, 맞습니다. 여기를보세요 http://stackoverflow.com/questions/11884704/how-to-set-find-the-ca-certs-argument-in-python-ssl-wrap-socket. 따라서 자체 서명 인증서조차도 신뢰할 수 있습니다. – norekhov