← 문제 라이브러리
Security 중급 SECURITY-034 · 21분

인증서를 갱신한 뒤 모바일 앱과 서버 간 연동만 인증서 오류

만료를 2주 앞두고 API 서버의 인증서를 갱신했습니다.

검수된 문제TLS무료
시나리오

만료를 2주 앞두고 API 서버의 인증서를 갱신했습니다. 새 인증서는 인증 기관이 바꾼 새 중간 인증서로 발급됐습니다. 브라우저에서는 문제가 없는데, 안드로이드 앱 일부와 협력사 서버(Java)가 API 호출에 실패한다는 문의가 쏟아집니다. 서버 설정은 인증서 파일과 체인 파일을 따로 지정하는 방식이고, 이번에는 인증서 파일만 새것으로 바꿨습니다. 담당자는 인증서 발급이 잘못됐다며 다시 발급받으려 합니다. 협력사 정산 연동이 멈춰 오늘 마감 전에 풀어야 합니다.

단서
서버가 보내는 체인
$ openssl s_client -connect api.acme.dev:443 -servername api.acme.dev -showcerts </dev/null 2>/dev/null | grep -E ' s:| i:'
 0 s:CN = api.acme.dev
   i:C = US, O = Let's Encrypt, CN = R11
 1 s:C = US, O = Let's Encrypt, CN = R3
   i:C = US, O = Internet Security Research Group, CN = ISRG Root X1
협력사 오류 · 서버 설정
javax.net.ssl.SSLHandshakeException: PKIX path building failed: unable to find valid certification path to requested target

ssl_certificate     /etc/nginx/tls/api.crt;      # 이번에 교체
ssl_trusted_certificate …
# 체인 파일(chain.pem)은 1년 전 것 그대로

과제 원인을 좁히고, 서비스를 되살리는 순서(검증 포함)와 재발 방지책을 적어 보세요.

먼저 볼 것
  • 서버가 보내는 인증서 체인이 서로 이어지는지
  • 브라우저와 앱·서버 클라이언트가 체인을 다루는 방식의 차이
점검 체크리스트
  1. openssl s_client -showcerts 로 체인의 발급자(i:)와 다음 인증서(s:)가 이어지는지
  2. 서버 설정에서 인증서와 체인을 어떻게 지정하는지
  3. SSL 점검 도구로 'Chain issues' 확인