クイズ:ACME と cert-manager
한국어 원문으로 표시합니다.
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-challengeTXT 레코드로 증명한다 - HTTP-01 로 받되 각 서브도메인마다 챌린지 파일을 둔다
- HTTP-01 과 DNS-01 을 함께 통과해야 한다
- TLS 핸드셰이크 기반 챌린지를 80 포트에서 돌린다