로그인·API·패치 서버의 인증서가 만료되거나 중간 인증서가 빠지면, 그 순간부터 새로 연결하는 클라이언트의 TLS 연결이 실패합니다.
왜 인증서 유효 기간이 지났거나, 서버가 중간 인증서를 빼고 보내거나, 유저 기기의 날짜·시간이 틀림 → 그러면 클라이언트가 인증서 검증에 실패해 TLS 연결을 끊음 → 화면에서는 로그인·패치 단계에서 접속 불가·무한 로딩, 상점 같은 HTTPS 기능만 실패. 이미 접속해 있던 사람은 대개 멀쩡
주 담당 인프라팀·네트워크 인프라 · 함께 인프라팀·서버 인프라, 게임개발팀·클라이언트 개발
게임개발팀 할 일
인증서 오류를 다른 접속 실패와 구분한 오류 코드로 남기고 안내, 날짜 오류면 기기의 날짜·시간을 자동으로 맞추라고 안내, 인증서 고정(pinning)을 쓰면 예비 키를 함께 넣고 인증서 교체 일정을 인프라팀과 맞추기.
인프라팀 할 일
네트워크: 로드밸런서·CDN에서 TLS를 끝내는 경우 관리형 인증서의 자동 갱신 상태와 남은 일수 경보(ACM은 DaysToExpiry), 검증용 DNS 레코드 유지. 서버 장비·OS: 서버에서 TLS를 끝내는 경우 갱신 자동화와 갱신 뒤 설정 다시 읽기, 중간 인증서까지 넣은 체인으로 설정, 로그인·API·패치 주소마다 남은 유효 기간을 밖에서 주기적으로 검사해 경보.
수치 감각
Let’s Encrypt 인증서는 90일짜리라 60일마다 갱신을 권하고 AWS Certificate Manager는 DNS로 검증한 인증서를 만료 45일 전에 확인해 자동 갱신합니다. 자동 갱신이 조용히 실패하면 정확히 만료 시각에 새 접속이 한꺼번에 막힙니다.
그래프에서는
연결이 한꺼번에 끊김 · 로그인 성공 수, TLS 핸드셰이크 오류 수
확인할 곳
openssl s_client -connect HOST:443 -showcerts로 서버가 실제로 보내는 인증서 목록을 보고, 각 인증서의 만료일(notAfter)을 openssl x509 -noout -enddate로 확인. 로드밸런서에서 TLS를 끝낸다면 TLS 협상 오류 수(AWS ALB·NLB는 ClientTLSNegotiationErrorCount)와 로그인 성공 수
이러면 맞음
만료일이 지났거나 서버가 보낸 목록에 중간 인증서가 빠져 있고 오류가 늘기 시작한 시각이 만료 시각이나 인증서를 바꾼 시각과 겹침
이러면 아님
인증서 목록과 만료일이 정상인데 일부 유저만 실패하면 그 유저 기기의 날짜·시간이나 오래된 OS의 루트 인증서 목록을 봄
확인 수단
인프라 도구로 확인(게임 코드 불필요)
더 알아보기
중간 인증서가 빠진 설정은 PC 브라우저로 열면 멀쩡해 보일 수 있습니다. 브라우저는 다른 사이트에서 받아 둔 중간 인증서를 기억해 빈 곳을 채우지만, 안드로이드 앱처럼 그런 기억이 없는 클라이언트는 실패합니다. 유효 기간도 짧아지는 중입니다. Let’s Encrypt는 기본 유효 기간을 2027년 64일, 2028년 45일로 줄일 예정입니다. 60일마다 갱신하도록 고정해 둔 설정은 64일짜리 인증서에서는 여유가 나흘뿐이고 45일짜리에서는 만료를 넘깁니다. AWS Certificate Manager도 가져온(import) 인증서는 자동 갱신하지 않고, 검증용 DNS 레코드를 지우면 갱신에 실패합니다. 로그인이 막히는 모양은 “DNS 장애·지연”과 비슷하지만 인증서 문제는 서버 주소를 찾은 뒤 TLS 핸드셰이크에서 실패하고 시작 시각이 만료 시각이나 인증서를 바꾼 시각과 겹칩니다.
Security with network protocolsAndroid (Google) 서버가 중간 인증서를 빼고 보내면 안드로이드 앱은 SSLHandshakeException으로 실패하지만 PC 브라우저는 받아 둔 중간 인증서로 채워 오류가 안 날 수 있음, openssl s_client로 서버가 보내는 체인 확인