게이트웨이는 설정된 대상이 신뢰할 수 있는 발급자이고 인증서가 핸드셰이크 도중에 도착하기 때문에, 한 번도 본 적 없는 클라이언트 인증서를 받아들입니다. 프로토콜은 그렇게 동작해야 하며, 그래서 서버의 디렉터리 목록은 형편없는 목록이 됩니다. 발급자는 무엇을 만들었는지 알고, 서버는 무엇이 접속했는지 알며, 폐기 상태는 무엇이 철회되었는지 압니다. 이 세 기록을 섞은 목록은 결국 어느 것도 말하지 않은 것을 주장하게 됩니다.

게이트웨이는 파일 목록이 아니라 발급자를 신뢰한다

검증은 제시된 인증서를 신뢰 앵커와 비교하므로, 같은 발급자가 어제 만든 신원은 서버 디스크에 한 번도 존재하지 않고도 접속합니다. 그렇게 되도록 무엇인가를 복사할 필요가 없고, 누구도 수작업으로 승인하지 않습니다. 따라서 서버 자체의 기록은 도착을 설명하며, 도착할 수 있는 신원의 전체를 설명하지는 않습니다.

반대쪽 격차도 똑같이 불편합니다. 디렉터리에는 만료된 인증서, 폐기된 인증서, 한 번도 배포되지 않은 장치용으로 발급된 신원이 남아 있을 수 있습니다. 파일을 세면 파일이 몇 개인지 알 수 있지만, 그것은 아무도 묻지 않은 질문입니다. 대신 의미를 지닌 기록에서 시작하십시오.

네 가지 질문, 네 가지 다른 기록

각 기록 유형은 한 질문에는 잘 답하고 나머지에는 잘 답하지 못하므로, 이들을 합친 보고서는 완전해 보이면서도 특정한 방식으로 틀립니다. 아래 표는 어떤 시스템이 만들었는지가 아니라 어떤 질문을 해결하는지에 따라 정렬합니다.

Question you are answeringWhere the answer livesHow quickly it changesWhat it will never show
Was this identity ever created?The issuer's issuance databaseOnly when something is issuedWhether the device still exists
Is a copy sitting on this host?The paths you actually inspectedWhenever anyone copies filesCertificates that were never copied here
Has the issuer withdrawn it?Published revocation stateWhen the issuer next publishesWithdrawals that are not published yet
Is it connected right now?The live session tableContinuouslyAnything about past or future sessions

공개 인증서 보관소는 개인 키를 담고 있지 않으므로 비밀은 아니지만, 공유할 수도 없습니다. 주체와 장치 이름은 운영 세부를 드러내므로, 보고서는 그것이 필요한 대상에게만 머물러야 합니다. 개인 키는 목록에서 완전히 제외하는데, 목록에 필요한 것은 자격 증명이 아니라 메타데이터이기 때문입니다.

발급자와 일련번호만이 유일하게 안정적인 키다

주체는 재활용되고 파일 이름은 다시 사용되므로, 작년에 한 장치를 가리키던 이름이 지금은 다른 장치를 가리킬 수 있습니다. 둘 다 키가 아니며, 어느 쪽에 기반한 보고서든 결국 두 신원을 한 줄로 합칩니다.

발급자와 일련번호의 쌍이 인증서를 고유하게 식별하며, 두 필드 모두 인증서 자체에서 나옵니다. 주체, 유효 기간 날짜, 사본의 출처, 그리고 책임자나 장치와 함께 기록하십시오. 폐기와 배포 상태는 유효 기간 안에 있는 인증서가 자동으로 승인되는 것은 아니므로, 각자의 관측 시각을 가진 별도 필드로 추가합니다. 이 두 사실은 서로 다른 시스템에 존재하며, 합치면 파일은 최신으로 보이는데 신원은 철회된 경우가 가려집니다.

인증서를 한 번에 하나씩 읽는다

디렉터리 전체로 확장되는 와일드카드는 일괄 인터페이스가 아니며, 어느 파일이 어느 출력을 만들었는지 감춥니다. 메타데이터는 인증서마다 읽고, 폐기 측면은 그 자체의 산출물에서 읽으십시오. OpenSSL x509 참조는 그 옵션들이 출력하는 필드를 나열합니다.

openssl x509 -in <cert>.pem -noout -issuer -serial -subject -dates -fingerprint -sha256
openssl crl -in <issuer>.crl -noout -text | head -n 40

관리되는 Easy-RSA PKI에서는 도구가 지원하는 워크플로로 발급 데이터베이스를 조회하고 디렉터리 배치를 가정하는 대신, 목록을 구성하는 동안 원본을 읽기 전용으로 두십시오. 장부 형식은 충분히 규칙적이어서 데이터베이스를 직접 열지 않고도 유효한 항목을 세고 철회된 항목을 나열할 수 있습니다.

grep -c '^V' pki/index.txt
grep '^R' pki/index.txt | cut -f4,5

다음 발급에도 살아남는 목록

디렉터리의 일회성 덤프는 다음 인증서가 발급되는 순간 낡으므로, 보고서는 발급 워크플로에서 만들고 정상 운영의 일부로 갱신되게 하십시오. 이렇게 하면 보고서가 재현 가능해지며, 무엇이 발급되었는지에 대해 두 사람이 다툴 때 중요합니다.

결과는 스프레드시트 연습이 아니라 갱신과 폐기 결정에 사용하십시오. 로컬 사본을 지워도 이미 존재하는 원격 사본은 무효가 되지 않습니다. 설정된 폐기 및 권한 부여 워크플로로 신원을 철회한 뒤, 철회를 날짜와 함께 기록하십시오. 서버에서 사라졌지만 발급자가 여전히 신뢰하는 신원은 폐기된 것이 아니며, 그 차이가 정확한 목록과 단지 안심시키는 목록을 구분합니다.

관련 글