웹과 스마트폰 클라이언트에서 WS, WSS 사용
- WebBrowser HTTP > Node HTTP > Socket.io WS
- WebBrowser HTTPS > NOde HTTPS > Socket.io WSS
- SmartPhone > Socket.io WS
- SmartPhone(SSL) > Socket.io WSS
평문/보안 연결 모두를 만족하는 방법은 노드에서 WS, WSS를 모두 제공하는 방법뿐입니다.
그 외 HTTPS > HTTP Proxy > WS 연결은 WS가 SSL연결이 되지 않은 관계로 SmartPhone > WSS 이 의미가 없으므로 고려 대상이 아니며, HTTP Proxy > WSS 은 wss handshake faild로 통신이 되지 않습니다.
이 부분은 KT클라우드 서비스를 이용 시 LB에서 이상동작이 있을 수 있습니다.
특히 GET 이외 POST/PUT/DELETE/WS/WSS 등에서 NULL문자가 포함되는 문제가 있을 수 있습니다.
해결책은 딱히 없으며 LB를 내렸다가 다시 올리거나 새롭게 구성해서 올릴 경우 정상 동작이 되는것을 2017.01.04 일 확인 했었습니다.
경험적인 내용이니 다른 결과가 나올 수 도 있습다.
특히 GET 이외 POST/PUT/DELETE/WS/WSS 등에서 NULL문자가 포함되는 문제가 있을 수 있습니다.
해결책은 딱히 없으며 LB를 내렸다가 다시 올리거나 새롭게 구성해서 올릴 경우 정상 동작이 되는것을 2017.01.04 일 확인 했었습니다.
경험적인 내용이니 다른 결과가 나올 수 도 있습다.
모든 연결은 HTTPS > WSS, SmartPhone(SSL) > WSS 두 가지만 하는게 보안을 감안한다면 정석이지만 현재 이슈는 안드로이드5.0미만(4.4이하)에서 WSS Connection 에러가 발생(일반적인 상황이 아닌 특수한 상황입니다.)하는 관계로 어쩔 수 없이 WS, WSS 모두 서비스 해야 하는 상황에서 아래 코드를 적용해서 WS, WSS를 모두 사용.
코드
# cluster.js var cluster = require('cluster'); //var numCPUs = require('os').cpus().length * 2; // http, https를 위해서 2배수 설정 var numCPUs = Math.round( require('os').cpus().length * 1.5 ); cluster.setupMaster({ exec: './app.js'}); if( cluster.isMaster ){ for( var i=0, i < numPCUs; i++){ cluster.fork({fork: i}); } cluster.on('fork', function(worker){ console.log("worker %s (%s) fork", worker.id, worker.process.pid); }); cluster.on('online', function(worker) { console.log("worker %s (%s) online", worker.id, worker.process.pid); }); cluster.on('listening', function(worker, address) { console.log("worker %s listening %s:%s", worker.id, address.address||null, address.port||null); }); cluster.on('disconnect', function(worker){ console.log("worker %s (%s) disconnect", worker.id, worker.process.pid); }); } cluster.on('exit', function(worker, code, signal) { console.log('worker ' + worker.process.pid + ' exit'); // cluster.fork(); // console.log('worker restart'); });
# app.js if( process.env.fork % 2 === 0 ){ // HTTPS, WSS 설정 }else{ // HTTP, WS 설정 }
하나의 서버에 WS와 WSS를 사용하니 운영서버에서 SSL인증서가 깨지는 요상한 에러가 발생한다. 뭣 때문일까? 일단은 HTTPS+WSS만 사용하도록 설정을 돌려 놓았다.
인증서가 깨지는 원인은 체인인증서 적용이 잘 못되어서 문제가 된 경우이다. 하지만 위 내용으로 적용시 정상 동작은 운영서버에서 확인 하지 못 했으므로 아직은 실제 적용은 보류... 개인서버에서 테스트 후 다시 사용 유무에 대해서 덧글 추가할 예정이다. 2015.09.29
인증서는 문제가 없었다. 다만 node에서 체인인증서는 아파치나 엔진엑스와는 다르게 반대로 구성되어야 한다.
반응형
'lang > node' 카테고리의 다른 글
__file, __line 사용 magic-globals (0) | 2015.09.24 |
---|---|
Node.js Chain 인증서 설정 (0) | 2015.09.23 |
nodejs https > http Proxy (0) | 2015.09.17 |
Node.js SSL (0) | 2015.09.11 |
Node Mysql Reconnection (0) | 2015.09.04 |