SSL을 사용하는 WebSocket


115

HTTPS로 WebSocket을 사용할 수 있습니까?

HTTPS로 전환 할 때 내 WebSocket은 보안 오류를 반환하고 일반 HTTP와 완벽하게 작동합니다.

아래는 스 니펫입니다.

socket = new WebSocket("ws://my_www:1235"); 

내 잘못은 내가 사용하고있는 AIR 소켓 서버가 안전하지 않다는 것을 깨달았습니다. flash.net.SecureSocket을 사용하려면 다시 작성해야합니다.
Eric

답변:


170

WebSocket 연결은 HTTP 또는 HTTPS 핸드 셰이크로 시작됩니다. HTTP를 통해 페이지에 액세스 할 때 WS 또는 WSS (WebSocket 보안 : WS over TLS)를 사용할 수 있습니다. 그러나 페이지가 HTTPS를 통해로드되면 WSS 만 사용할 수 있습니다. 브라우저는 보안을 "다운 그레이드"할 수 없습니다.


그게 내가 가진 것이지만 내가 사용하는 AIR 소켓 서버가 안전하지 않다는 것을 깨달았습니다. flash.net.SecureSocket을 사용하도록 다시 작성해야합니다 ...
Eric

Flash에도 심각한 문제가 있습니다. WebSocket 서버를 구축하고 있습니까 (만약 그렇다면 이유), 아니면 앱을 구축하고 있습니까?
Peter Moskovits 2012 년

1
예를 실행하는 AIR 소켓 서버가 있습니다.
에릭

그렇다면 페이지가 HTTP로로드되지 않은 경우 WSS를 선택하는 방법은 무엇입니까?
anatoly techtonik

29

HTTPS를 통해 WebSocket을 사용할 수 없지만 TLS를 통해 WebSocket을 사용할 수 있습니다 (HTTPS는 TLS를 통한 HTTP). URI에서 "wss : //"를 사용하십시오.

최신 버전의 Firefox는 HTTPS 페이지에서 TLS가 아닌 WebSocket을 사용하도록 허용하지 않지만 그 반대는 문제가되지 않습니다.


그렇다면 해결책은 무엇입니까? http를 통해 실행되는 WS 서버가 있습니다. 이제 SSL을 구입했고 브라우저는 더 이상 WS에 연결할 수 없습니다. 나는 WS를 WSS : //로 바꾸었고 이제 WebSocket과 연결되지 않았습니다
muaaz

@muaaz WebSocket 서버는 WSS 모드에서 실행되어야하며 웹 소켓 서버에 연결하려는 원본 웹 페이지를 제공하는 웹 서버와 동일한 SSL 인증서 / 키로로드하는 것이 좋습니다.
kanaka

4
감사합니다. BTW, 난 그냥 프록시 (사용 아파치)의 요청에 의해 그것을 해결했습니다 wss://ws://. 그래서 나는 사용 wss://ws.domain.com하고 아파치는 그것에 프록시를 적용하고 WS 서버가 실행되는 요청을 리디렉션합니다. 예 : ws://10.12.23.45:5641/server.php. 그리고 나는 그것이 매우 나쁜 해결책이라는 것을 알고 있습니다. 아파치 구성을 안내해 주시면 도움을 주시면 감사하겠습니다. 예 : .cert등 을 넣을 곳 감사합니다!
muaaz

@muaaz 죄송합니다, 인터넷 검색을 제외하고 아파치 구성을 알지 못합니다.
kanaka

21

1 추가주의 사항 (kanaka / peter의 답변 외에) : WSS를 사용하고 서버 인증서가 브라우저에서 허용되지 않는 경우 브라우저 렌더링 대화 상자 가 표시되지 않을 수 있습니다 (웹 페이지에서 발생하는 것과 같은). 이는 WebSocket이 소위 "하위 리소스"로 취급되고 인증서 수락 / 보안 예외 / 하위 리소스에 대해 렌더링되지 않는 대화 상자가 있기 때문입니다.


HTTPS에 사용되는 인증서와 동일한 인증서 인 경우에도?
vekah

1
"브라우저 렌더링 대화 상자"란 무엇을 의미합니까? 처럼 alert()?
Ivan Perevezentsev

2
기본적으로 브라우저 내에서 시작되는 대화 상자 (페이지가 아님). "이 인증서가 유효하지 않습니다. 계속 하시겠습니까?"
oberstet

이를 극복 할 방법이 있습니까? 자체 서명 된 인증서를 사용하는 경우에도 websocket을 사용할 수 있습니까?
OhadR
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.