인증서는 갱신됐는데 브라우저는 옛것을 보여줬다 · 리다이렉트 한 줄이 갱신을 막았다 · 퀴즈
퀴즈: ACME 와 cert-manager
문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
HTTP-01 챌린지에서 CA 의 검증 서버가 요청하는 경로와 확인하는 내용은?
- `/.well-known/acme-challenge/<token>` 을 GET 해 본문이 token.계정키지문(키 인가)과 같은지 본다
- `/acme/<token>` 을 POST 해 서버가 서명한 응답을 검증한다
- `_acme-challenge.<도메인>` 의 TXT 레코드를 조회해 토큰과 비교한다
- TLS 핸드셰이크에서 서버 인증서의 SAN 에 토큰이 있는지 본다
게이트웨이의 HTTP→HTTPS 리다이렉트가 ACME 갱신을 막았는데도 몇 주 동안 아무 증상이 없었다. 이유는?
- 리다이렉트가 캐시돼 검증 서버에는 아직 옛 응답이 갔기 때문
- Let's Encrypt 가 리다이렉트를 따라가지 못해 조용히 재시도만 하기 때문
- 첫 발급은 이미 끝나 있었고 cert-manager 는 renewBefore 시점에야 챌린지를 다시 돌리기 때문
- HTTPS 리스너가 챌린지를 대신 처리해 주다가 인증서가 바뀌면서 멈췄기 때문
홈랩에서 '솔버의 Exact 경로 라우트가 더 구체적이니 리다이렉트를 이길 것' 이라는 가정을 실측한 결과는?
- 예상대로 구체적인 경로가 이겨 챌린지가 통과했다
- 두 라우트가 충돌해 게이트웨이가 기동하지 않았다
- 챌린지 경로만 HTTPS 로 가고 나머지는 HTTP 에 남았다
- 리다이렉트가 이겼다 — 경로 구체성은 우선하지 않았다
`curl -sI http://<도메인>/.well-known/acme-challenge/x | head -1` 로 상시 확인할 때, 갱신이 막혔다고 봐야 하는 응답은?
- 404 Not Found
- 301 Moved Permanently
- 200 OK
- 405 Method Not Allowed
cert-manager `Certificate` 의 `renewBefore` 를 `15d` 로 적었다. 무슨 일이 생기나?
- 15일 전에 정상적으로 갱신된다
- d 는 시간으로 자동 변환돼 360h 로 저장된다
- d 는 Go 시간 문자열이 아니라 받아들여지지 않으며 h·m·s 로 적어야 한다
- renewBefore 는 무시되고 항상 만료 당일에 갱신된다
와일드카드 인증서(`*.example.com`)를 ACME 로 받으려면?
- DNS-01 로만 받을 수 있다 — `_acme-challenge` TXT 레코드로 증명한다
- HTTP-01 로 받되 각 서브도메인마다 챌린지 파일을 둔다
- HTTP-01 과 DNS-01 을 함께 통과해야 한다
- TLS 핸드셰이크 기반 챌린지를 80 포트에서 돌린다