클라이언트 인증서를 잃어버렸나요? 이름이 아니라 일련번호로 폐기하세요
인증서 파일이 없다고 해서 기록이 없는 것은 아니다. 폐기는 CA가 서명한 일련번호를 기준으로 동작하므로, 대체 인증서를 발급하기 전에 그 객체를 찾아야 한다.
클라이언트의 인증서 파일이 사라졌고, 반사적으로 이름을 폐기한 뒤 새로 발급하고 싶어진다. 그런 대응은 원래 인증서를 유효한 채로 남긴다. 폐기는 라벨이 아니라 일련번호를 기준으로 동작하기 때문이다. CA는 발급한 것의 사본을 거의 확실히 보관하고 있으며, 그 사본을 찾는 것이 전체 작업이다.
파일을 잃는 것은 CA의 기록을 잃는 것이 아니다
Easy-RSA PKI는 발급한 공개 인증서를 보관하며, 최신 릴리스는 PKI의 certs_by_serial 디렉터리에 일련번호별 사본도 보관한다. 폐기에는 개인 키가 필요 없다. 중요한 것은 CA가 서명한 정확한 인증서이며, 그것은 이미 CA가 가지고 있다.
올바른 PKI의 백업 사본에서, 그것을 소유한 관리자와 함께 작업한다. 폐기는 감사 가능한 작업이며 자정에 운영 데이터베이스를 고치는 일이 아니다.
배포에서 하나를 보관했다면 클라이언트의 인라인 공개 인증서 사본으로도 충분하다.
먼저 발급자와 일련번호를 읽는다
복구한 PEM을 검사하고 발급자, 일련번호, 주체, 유효 기간을 기록한다. 일련번호는 한 발급자의 범위 안에서 고유하며 환경의 모든 CA에 걸쳐 고유한 것은 아니므로, 발급자는 식별자의 일부다. 여러 인증서가 같은 주체를 공유한다면 그들을 구분하는 것은 바로 이 일련번호다.
그 값을 CA의 기록과, 인증서를 보유했다고 생각하는 기기나 사람과 대조한다.
일반 이름은 재사용할 수 있고 실제로 자주 재사용된다. 일련번호를 적어 두기 전에 어떤 인증서를 철회할지 결정하지 말라.
새 인증서를 폐기해도 아무 일이 없는 이유
같은 일반 이름으로 대체 인증서를 발급하면 다른 일련번호를 가진 두 번째 인증서가 생긴다. 대체 인증서를 폐기하면 새것이 철회되고 원래 것은 만료될 때까지 유효하게 남는다. CA의 관점에서 이들은 독립적인 두 객체이며, CRL은 이름이 아니라 일련번호를 나열한다. CA 인덱스가 발급된 인증서마다 한 행을 유지하는 이유가 바로 이것이다.
같은 혼동이 반대의 실수를 만든다. 클라이언트 쪽 파일을 지우고 CA가 잊었다고 가정하는 것이다. 클라이언트에서의 삭제는 폐기 사건이 아니며, 사본을 가진 누구에게나 인증서는 계속 동작한다.
두 실수 모두 이름을 식별자로 취급하는 데서 온다.
일련번호가 지목하는 인증서를 폐기한다
CA를 건드리기 전에 객체를 식별한다. openssl x509 -in recovered-client.pem -noout -issuer -serial -subject -dates는 네 값을 한 번에 출력하며, CA 보관소와 대조하는 것은 일련번호다. Easy-RSA는 그 보관소를 pki/certs_by_serial 아래에 두고 일련번호마다 파일 하나를 둔다. 폐기 명령은 일련번호가 아니라 일반 이름을 받으므로, 보관된 파일을 pki/issued/<common-name>.crt로 복사하고 이름이 식별한 객체를 가리키게 한다. PKI 디렉터리에서 easyrsa revoke <common-name>를 실행한 뒤 index.txt의 해당 행이 R로 바뀌었는지 확인한다. 일련번호는 객체를 고르는 방법이며 명령이 받는 인자가 아니다.
openssl x509 -in recovered-client.pem -noout -issuer -serial -subject -dates
cp pki/certs_by_serial/A1B2C3D4.pem pki/issued/client-01.crt
./easyrsa revoke client-01
grep -n client-01 pki/index.txt
./easyrsa gen-crl
index.txt가 R를 보여주지 않으면 멈추고 CRL을 생성하기 전에 오류를 읽어야 한다. 아직 유효한 기록으로 만든 CRL은 아무것도 철회하지 않는다. 행이 바뀐 뒤에야 easyrsa gen-crl를 실행하고 파일 배포로 넘어간다.
CRL은 실제로 적용되는 곳에 게시한다
PKI의 지원되는 워크플로로 새 CRL을 생성한 다음, 이 발급자의 폐기를 적용하는 모든 검증자에 게시한다.
CA 위에 놓인 갱신된 파일만으로는 아무것도 바뀌지 않는다. VPN이 자체 검증자에서 결정을 끝내기 때문이다. CRL의 발급자, 유효 기간, 폐기된 일련번호를 확인하고, 서비스가 이전 파일을 캐시하지 않고 다시 로드하는지 확인한다. 소유권과 경로는 내용만큼 중요하다. 데몬이 읽을 수 없는 CRL은 CRL이 없는 것과 구별되지 않는다. OpenVPN의 crl-verify 옵션은 데몬이 읽는 파일을 지정하므로, 서버 구성에서 그 경로와 파일 소유권을 확인한다.
파일 타임스탬프가 아니라 실제 연결 시도로 검증한다.
CRL이 잘못된 도구일 때를 안다
발급자의 개인 키를 더 이상 신뢰할 수 없다면 알려진 일련번호를 철회해도 권한 없는 보유자가 새 인증서에 서명하는 것을 막을 수 없다. 그것은 발급자 신뢰의 전환이며, 새 CA와 배포 계획이 필요한 일이지 CRL에 한 줄 더하는 일이 아니다. 전임 관리자가 접근 권한을 가졌다는 사실만으로 키가 오용되었다는 증거가 되지는 않으므로, 신뢰를 재구축하기 전에 사실을 확보한다.
상태 문자를 뒤집으려고 발급 데이터베이스를 손으로 편집하는 것은 서명된 폐기를 대체하지 못하며, CRL을 기록과 불일치하게 만든다.
일련번호, CRL, 배포 단계를 한 메모에 남기면 다음 감사는 읽기 작업이 된다. Easy-RSA 프로젝트는 설치한 릴리스에서 지원되는 명령을 문서화하며, 이것이 따를 가치가 있는 유일한 인터페이스다.