JJoriping / KKuTu

글자로 놀자! 끄투 온라인
http://jjo.kr/kkutu
GNU General Public License v3.0
328 stars 266 forks source link

Secure WebSocket 연결 에러 질문드립니다. #1071

Closed scm1400 closed 1 year ago

scm1400 commented 1 year ago

환경: ElasticBeanstalk 도커환경에 배포하고있고, AWS ACM 인증서와 ROUTE53 사용하고있습니다.

IS_SECURED 를 true로 한 다음 이런 에러가 발생합니다. Game server #1 has an error: Error: write EPROTO 140353550801768:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:../deps/openssl/openssl/ssl/record/rec_layer_s3.c:1544:SSL alert number 40

이 방법이 맞는지는 모르겠지만 ACM 인증서를 사용하고 있기 때문에 Secure() https.createServer() 코드들은 주석 처리하여 다음과 같이 웹소켓을 생성하고있습니다.

관련하여 제 코드가 잘못된 점이 있다면 지적해주시면 감사하겠습니다. 웹소켓을 잘 몰라서 질문드립니다 ㅠㅠ

                        // const options = Secure();
            // HTTPS_Server = https.createServer().listen(global.test ? Const.TEST_PORT + 416 : process.env["KKUTU_PORT"]);
            Server = new WebSocket.Server({
                port: 8080,
                perMessageDeflate: false,
            });


    if (Const.IS_SECURED) {
        protocol = "wss";
    } else {
        protocol = "ws";
    }
    gameServers[i] = new GameClient(KEY, `${protocol}://${GLOBAL.GAME_SERVER_HOST}:${v}/${KEY}`);
});
function GameClient(id, url) {
    var my = this;

    my.id = id;
    my.socket = new WS(url, { perMessageDeflate: false, rejectUnauthorized: false }); // 이 부분에서 에러가 발생
    ....
    ....
       my.socket.on("error", function (err) {
        JLog.warn(`Game server #${my.id} has an error: ${err.toString()}`);  // 에러로그
    });


글로벌 json 파일은 다음과 같이 작성해서 사용하고있습니다. 아래 json 파일에서 IS_SECURE 을 false로 한 경우에는 잘 작동되었습니다. global.json

{
    "ADMIN": ["admin"],
    "MAIN_PORTS": [8080],
    "GAME_SERVER_HOST": "current_game_1",
    "KKUTUHOT_PATH": "/kkutu/data/kkutuhot.json",
    "PASS": "",
    "PG_HOST": "current_db_1",
    "PG_USER": "postgres",
    "PG_PASSWORD": "postgres",
    "PG_PORT": 5432,
    "PG_DATABASE": "main",
    "GOOGLE_RECAPTCHA_TO_GUEST": false,
    "GOOGLE_RECAPTCHA_TO_USER": false,
    "GOOGLE_RECAPTCHA_SITE_KEY": "Your Google Recaptcha site key Here",
    "GOOGLE_RECAPTCHA_SECRET_KEY": "Your Google Recaptcha secret key Here",
    "IS_SECURED": true,
    "SSL_OPTIONS": {
        "PRIVKEY": "Your SSL Private Key Here",
        "CERT": "Your SSL Certificate Here",
        "CA": "Your SSL CA-Bundle Here",
        "PFX": "Your PFX Bundle Here",
        "isPFX": false,
        "isCA": false
    },
    "USER_BLOCK_OPTIONS": {
        "USE_MODULE": false,
        "USE_X_FORWARDED_FOR": false,
        "BLOCK_IP_ONLY_FOR_GUEST": true,
        "DEFAULT_BLOCKED_TEXT": "관리자에 의해 서비스 이용이 제한되었습니다.",
        "BLOCKED_FOREVER": "영구 이용제한"
    }
}
scm1400 commented 1 year ago

좀더 시도해보고 질문 올리겠습니다