docs(d4): correct the gap to 38m25s — the two timestamps came from different clocks
The 2199 seconds reported for D-4 subtracted a test-server timestamp (archive/cert2.pem mtime) from a dev-machine timestamp (the serial change observed by the poll), without noting they are different clocks. Checked against external references: the dev machine matches Google and the Let's Encrypt ACME endpoint to the second, while test-server is 105 seconds fast and reports NTPSynchronized=no. Three round-trip measurements put the offset at +106.1s every time. Corrected: new certificate written to disk 08:20:27 UTC (mtime 17:22:13 KST - 106s) actually served 08:58:52 UTC (dev observation, no correction) gap 2305s = 38m25s The correction validates itself in D-4a, where the new certificate's SCT — signed by CT logs on their own accurate clock at 12:27:49.054 GMT — lands one second before the skew-corrected hook time. Without the correction the hook would appear to have run 104 seconds before the certificate existed. Updated across the experiment doc, the index, the follow-up doc, the verdict evidence file and the SVG. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
919547a025
commit
3d7778bd3c
@@ -10,7 +10,7 @@
|
||||
|
||||

|
||||
|
||||
**핵심 발견** — 갱신은 성공했는데 36분 39초 동안 반영되지 않았다.
|
||||
**핵심 발견** — 갱신은 성공했는데 **38분 25초** 동안 반영되지 않았다.
|
||||
|
||||

|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
| 인증서 구성 | **SAN 3개** (`auth`/`app1`/`app2`), 와일드카드 아님 |
|
||||
| 체인 완결성 | **정상.** `Verify return code: 0 (ok)`, 4단계 |
|
||||
| 갱신 자동화 | 타이머는 **동작한다.** 오늘 두 번 `status=0/SUCCESS` |
|
||||
| **★ 갱신 반영** | **안 된다.** 새 인증서가 디스크에 있는 채로 **36분 39초** 동안 옛 인증서를 서빙했다 |
|
||||
| **★ 갱신 반영** | **안 된다.** 새 인증서가 디스크에 있는 채로 **38분 25초** 동안 옛 인증서를 서빙했다 |
|
||||
| **★ reload 무중단** | **무중단이다.** 8856건 전부 200 · 전송 한가운데였던 42초 요청이 845361바이트 전량 수신 |
|
||||
|
||||
### 한 문장으로
|
||||
@@ -161,7 +161,15 @@ reload 순간에 실제로 전송 중인 요청이 있어야 한다. 845KB 짜
|
||||
|---|---|
|
||||
| 새 인증서 디스크 기록 | 08:22:13 |
|
||||
| 실제 서빙 시작 (`nginx -s reload`) | 08:58:52 |
|
||||
| **공백** | **2199초 = 36분 39초** |
|
||||
| **공백** | **2305초 = 38분 25초** (시계 보정 후 — 아래 참조) |
|
||||
|
||||
> **★ 시계 보정 (D-4a 에서 발견)** — 처음 적은 **2199초(36분 39초)** 는
|
||||
> `archive/` 파일 시각(test-server 시계)과 일련번호 관측(dev 시계)을 **그대로 뺀**
|
||||
> 값이었다. 외부 기준(Google · Let's Encrypt `Date` 헤더)으로 재보니
|
||||
> **dev 가 정확하고 test-server 가 106초 빠르다**(3회 측정 전부 +106.1초,
|
||||
> `NTPSynchronized=no`). 보정하면 **2305초 = 38분 25초**다.
|
||||
> 보정값은 D-4a 새 인증서의 SCT(`Sep 4 12:27:49.054 GMT`, CT 로그가 서명한
|
||||
> 독립 시계)가 보정한 훅 시각의 1초 앞에 놓이는 것으로 교차 검증된다.
|
||||
|
||||
그 사이 **428번** 옛 인증서로 관측됐다. 그리고 이 36분은 **우연히 짧았을
|
||||
뿐이다** — reload 를 시킨 것은 사람이지 자동화가 아니다. 아무도 안 했다면
|
||||
@@ -280,7 +288,7 @@ in-flight 전체 50건 중 종료코드 ≠ 0 은 **0건**이다.
|
||||
| [`10-reload-poll-window.txt`](evidence/d4-certificate-renewal/10-reload-poll-window.txt) | 터미널 | reload 전후 60초 새 연결 원문 (비200 0건) |
|
||||
| [`11-inflight-full.txt`](evidence/d4-certificate-renewal/11-inflight-full.txt) | 터미널 | in-flight 전체 — reload 를 관통한 08:58:40 요청 포함 |
|
||||
| [`12-certbot-state.txt`](evidence/d4-certificate-renewal/12-certbot-state.txt) | 터미널 | `certbot certificates` · `archive/` mtime · **훅 3개 디렉터리 전부 비었음** |
|
||||
| [`13-verdict.txt`](evidence/d4-certificate-renewal/13-verdict.txt) | 터미널 | **판정** — 36분 39초 공백 + reload 무중단, 수치 전량 |
|
||||
| [`13-verdict.txt`](evidence/d4-certificate-renewal/13-verdict.txt) | 터미널 | **판정** — 38분 25초 공백 + reload 무중단, 수치 전량 |
|
||||
|
||||
파일별 상세는 [`evidence/d4-certificate-renewal/README.md`](evidence/d4-certificate-renewal/README.md).
|
||||
|
||||
|
||||
Reference in New Issue
Block a user