2.5. 인증서 관리

2.5.1. 인증 요구서 생성과 서명하기

CA.pl -newreq 
(openssl req -config /etc/openssl.cnf -new -keyout newreq.pem -out newreq.pem -days 365) 
   

새로운 Private Key와 인증 요구서를 newreq.pem에 저장한다.

CA.pl -sign 
(openssl ca -config /etc/openssl.cnf -policy policy_anything -out newcert.pem -infiles newreq.pem) 
   

인증 요구서를 아까 만든 루트 인증 기관의 키로 서명한 후, newcert.pem이란 새로운 인증서를 생성한다. 이 때 인증 기관의 암호문(Passphrase)을 넣어야 서명이 될 것이다. 그리고 난 후 newcerts/xx.pem이란 파일이 openssl.cnf에서 지정한 경로에 생기며, index.txt, serial이 자동으로 갱신된다.

Private Key는 newreq.pem 파일에 ---PRIVATE KEY--- 라고 되어 있으며, 인증서는 newcert.pem에 ---CERTIFICATE---라고 되어 있다.

방금 말했다시피 newcerts/란 디렉토리에 newcert.pem파일이 생기며 index.txt가 갱신된다. 클라이언트는 이 정보를 바탕으로 웹서버에게 인증 기관에 대한 정보를 요청할 수 있다.

newreq.pem파일을 조심해서 다루어야 한다. 그 파일에는 인증 요구서 뿐만 아니라, Private Key까지 들어있기 때문이다. Private Key는 서명할 시에 필요가 없으며, 같이 보낼 경우 인증 기관에게 보안이 노출될 수 있다. 그래서 만약 다른 인증 기관에게 인증 요구서를 보낼 때는 반드시 ---PRIVATE KEY--- 부분은 잘라내야 한다. 반대로 당신이 서명을 할 때는 ---CERTIFICATE REQUEST---부분만 보내주도록 요구해야한다.

2.5.2. 인증서 철회하기

인증서를 철회하기 위해서는 아래와 같이 명령하면 된다:

openssl ca -revoke newcert.pem
   

그러면 데이터베이스가 업데이트되고, 인증서가 철회되었다고 표시된다. 다음은 인증서의 인증 철회 리스트를 작성해야 한다.

openssl ca -gencrl -out crl/crl.pem
   

(역주:MS Windows에서는 .crl이란 확장자를 인증 철회 리스트로 인식한다. 위 pem확장자를 crl으로 바꾸면 MS Windows에서 사용할 수 있다.)

2.5.3. 인증서 갱신하기

날짜 제한이 지나거나 Private Key가 누출되면 더 이상 인증서를 사용할 수 없으므로 새로운 인증서를 발행해야 한다. 이 때 유저들이 인증서를 분실해서 인증 요구서나 Private Key를 보내주면서 철회 요구를 할 수도 있다.

우선 예전의 인증서를 철회하고 인증 요구서를 다시 서명해야 한다.

예전의 인증서를 찾기 위해서는 index.txt 파일에 Distinguished Name (DN) 부분, serial 파일의 Serial Number 부분을 인증 요구서와 함께 비교하면 된다. 그리고 그에 맞는 cert/<xx>.pem 에 저장된 인증서를 인증 철회시에 사용하면 된다.

시작과 만기일을 확실히 하기 위해 수동으로 서명할 수도 있다.

openssl ca -config /etc/openssl.cnf -policy policy_anything -out newcert.pem -infiles newreq.pem -startdate [now] -enddate [previous enddate+365days]
   

[now] 부분과 [previous enddate+365days] 부분을 정확한 값으로 수정해서 실행하면 된다.

2.5.4. 웹 기반 Certificate Authority 만들기

아래는 인증 기관을 운영할 때 필요한 것이다.

  1. 루트 인증 기관의 인증서를 발행해서 응용 프로그램에 설치되도록 해야 한다.

  2. 인증 철회 리스트를 발행해야 한다.

  3. 인증서의 정보를 Serial Number를 포함해서 자세히 출력되도록 해야 한다.

  4. 유저들로 하여금 인증 요구서를 받을 수 있도록 폼(form)을 제공해야 한다.

웹서버와 몇몇 스크립트 언어를 이용하면 위와 같은 것들을 할 수 있다.