trust — 신뢰 저장소에서 믿는 뿌리 찾기
체인 검증의 마지막 물음은 «이 중간 인증기관을 서명한 것이 우리가 미리 믿기로 한 인증서인가» 다. 그 «미리 믿기로 한» 인증서들이 사는 곳이 신뢰 저장소이고, 리눅스에서는 PEM 인증서를 이어 붙인 묶음 파일이다. 이 모듈은 그 묶음에서 주체 이름이 이것인 인증서 한 장을 찾아 준다.
여기서 «믿는다» 는 «이 파일을 믿는다» 다
그 파일을 누가 쓰는지는 이 모듈의 물음이 아니라, 열 권한(
cap file_system)을 건네준 쪽의 물음이다. 그 사실을 감추지 않으려고 파일 경로를 인자로 받는다(안에 박아 두지 않는다).묶음을 통째로 들지 않는다#
시스템 묶음은 200 KB 가 넘는다(실측 224,449 바이트 · 인증서 150 장). 이 언어의 힙 아레나는 64 KiB 다. 그래서 흘려 읽는다 — 창 하나를 굴리며 PEM 덩이를 하나씩 풀어 이름만 견주고 버린다. 찾은 한 장만 남긴다.
파일: [ 인증서 1 ][ 인증서 2 ][ 인증서 3 ][ 인증서 4 ] …
창 1: [ 인증서 1 ][ 인증서 2 ][ 인증서 3 의 앞]
└─ 끝나지 않은 덩이는 이번 창에서 풀지 않는다
창 2: [ 인증서 3 의 앞 ][ 뒤 ][ 인증서 4 ] …
└─ 남은 꼬리를 앞으로 당기고, 그 뒤를 다음 읽기로 채운다꼬리를 당기지 않으면 창 경계에 걸친 인증서 하나가 조용히 «없는 것» 이 된다 — 그리고 그 하나가 하필 우리가 찾는 뿌리일 수 있다.
op#
| op | 하는 일 |
|---|---|
find_anchor | 묶음 파일 path 에서 주체 이름이 want(자리 wo)인 인증서를 찾아 out 에 DER 로 담고 길이를 낸다. effects io — 파일을 읽는다 |
표 50.1 — trust 의 op
find_anchor 의 답은 넷이다.
| 답 | 뜻 |
|---|---|
ok n(n > 0) | 찾았다 — out 의 앞 n 바이트가 그 인증서다 |
ok 0 | 끝까지 읽었고 없다 — 잰 뒤에 하는 말은 이것뿐이다 |
error short_workspace | 창(win, 16 KiB 넘게)이나 푸는 자리가 모자라 끝까지 재지 못했다 — 창보다 큰 덩이를 만났거나 걸음 상한에 닿았다 |
error unreadable | 묶음 파일을 열지 못했거나 읽다가 실패했다 — 경로가 틀렸는지 먼저 본다 |
표 50.2 — «못 찾았다» 와 «재지 못했다» 는 다르다
예전에는 아랫줄 둘이 없었다. 창이 좁아 다 못 읽어도 0, 파일을 아예 못 열어도 ok 0 이었다(2026-09-25 에 고쳤다). 그래서 도구가 «믿는 뿌리가 없다» 고 말했는데, 그것은 없는 것이 아니라 재지 못한 것이었다.
읽는 중 실패 ───────────────▶ error unreadable
창보다 큰 덩이 / 걸음 상한 ─▶ error short_workspace
끝까지 읽음 ─┬─ 있음 ───────▶ ok n
└─ 없음 ───────▶ ok 0 ← «없다» 는 여기서만찾은 뿌리로 마지막 마디를 잇는 일은 verify 의 link_ok 가 한다. 쓰는 모듈: files · pem · x509 · verify.