Thursday, June 12, 2014

PKI server & client

라우터를 이용해서 인증서 서버(PKI) 만들고 인증서를 발급 받아 보도록 하자.


기본 토폴로지는 다음과 같다.



[라우터 운영 체제 정보]

- CA, Client : c3660-jk9o3s-mz.124-15.T8.image.bin

- WinXP : Windows XP Professional


우선 라우터와 XP IP 설정하고 통신이 되는지 확인한다.



[CA라우터 설정]


CA라우터는 PKI 서버로 운영될 것이기 때문에 우선 NTP 사용하여 시간을 맞추고 Client CA NTP Server 지정하여 시간을 동기화 한다.

시간 동기화 설정이 끝나면 CA라우터에 PKI 서버 설정을 한다. PKI Server 이름은 CA_Server 지정했다. password 보안을 위해 개인키를 암호화 하기 위해서 사용한다. 적당한 암호를 입력하고 엔터를 누른다. 명령어를 입력하면 암호를 입력하고 서버 설정을 마친다.
PKI 서버 설정 no shutdown 하면 이상 명령어 입력이 된다. 추가적인 명령어를 입력하고 싶으면 shutdown 시킨 명령어를 입력하고 no shutdown 해야 한다.


PKI 서버 설정은 다음과 같이 확인한다.

  • show crypto pki certificates
  • show crypto pki trustpoints status
  • show crypto key public-chain rsa
  • show crypto key public-chain rsa

항목에 대한 의미는 아래와 같다.

  • Status : 인증서의 상태를 나타낸다. Available 사용가능 상태를 말한다.
  • Certificate Serial Number : CA에서 인증서를 발행할 때마다 할당되는 일련번호로 다른 인증서와 중복되지 않는 번호이다.
  • Certificate Usage : 인증서의 용도를 나타낸다. 서명용 (Signature) 이라고 표시된다.
  • Issuer : 인증서를 발행한 발행자를 나타낸다. CA_Server에서 발급한 인증서이다.
  • Subject : CA 발행한 인증서의 증명대상의 Distinguished Name(DN)이다. 이것을 사용자가 수도 있고 서버가 수도 있다. cn Common Name으로 사용자나 서버의 이름이다. CA_Server 증명 대상이 된다. 발행자와 주체의 이름이 같은 인증서를 루트 인증서라고 한다.
  • Validity Data : 인증서의 유효기간을 표시한다.


위에서 받은 인증서를 XP에서 다운로드 받아서 확인해보면 같은 항목이 다음과 같이 표시된다.

버전, 일련번호, 발급자, 유효기간, 주최 등의 정보가 같음을 있다.


이번에는 show crypto pki trustpoints status 명령어를 사용하여 정보를 확인해 본다.


Trustpoint 상태를 확인해보면 주체의 이름과 손도장을 확인할 있다.

손도장(Fingerprint) 서명을 포함한 인증서 전체에 대한 해쉬값으로, 사용자가 인증서를 화면에 표시할 때마다 계산되며, 실제 인증서에는 포함되지 않는다. 손도장을 사용하는 목적은 사람이 서로 다른 인증서에 대하여 서로를 믿을 있도록 하는 것이다. 손도장에 대한 Hash 알고리즘은 MD5, SHA1있고 개의 값을 표시하거나 아니면 하나의 값만 표시하는 경우도 있다.

CA_Server에서 가지고 있는 SHA1 손도장과 Client 가지고 있는 루트 인증서의 손도장, XP 가지고 있는 손도장을 확인해보면 모두 Hash값이 같음을 있다.


client XP에서 발급받은 루트 인증서의 손도장을 잠깐 확인해보면 해쉬값이 같음을 있다.


<Client 발급받은 루트 인증서>

<XP 발급받은 루트 인증서>


이번에는 CA에서 생성한 공개키와 비밀키를 다음 명령어로 확인해 보자.

여기까지 인증서 서버 설정이 완료되었다.




[Client 라우터 설정]


이제 클라이언트 라우터에서 인증서를 받아오기 위한 설정을 한다.

인증서 기반의 통신을 위해서는 Client 공개 키와 개인 키를 만들어야 한다. 이를 위해서 도메인 이름을 지정하고 공개키/개인 키를 생성한다.

클라이언트에서 키를 확인해보면 다음과 같이 키가 만들어진 것을 있다.

이제 인증서를 요청할 CA 지정하고 CA에게 인증서를 다운로드 받는다. 다운로드 받는 방식은 Web enrollment방식을 사용한다. 이를 위해서 CA 라우터에서 web서버를 설정한 것이다.


명령어는 다음과 같다.

처럼 서버이름 지정과 주소를 지정한 다음 CA 인증서를 다운 받고, CA 인증서를 인증한다. CA 인증서를 얻기 위한 명령어는 authenticate라는 명령어이다.


위에서 다운 받은 인증서는 CA에서 발급하고 CA 위해서 만들어 놓은 루트인증서이다. 아직 Client 인증서를 다운받지는 않았다. CA 루트 인증서를 다운받는 이유는, 이후에 CA_Server부터 받는 모든 인증서는 신뢰할 있는 인증서임을 증명하기 위해서 이다.

발급 받은 인증서를 확인해보면 Issuer(발행자) CN 이름과 Subject(주체) CN이름이 같은 것을 있다. 이것이 루트 인증서 이다.


이제 Client자신의 공개 키를 CA_Server에게 전송하여 사용자용 인증서를 요청하고 다운 받아보자.

명령어는 crypto pki enroll CA_Server(CA서버 이름) 이다.
자신의 정보를 담아서 요청할 암호를 물어오는데 암호는 두가지 목적을 가지고 사용된다.

1.    현재 라우터가 CA에게 새로운 인증서를 요청할 사용

2.    CA관리자가 인증서를 취소할 사용


CA에게 인증서를 요청하겠냐는 질문에 Yes라고 응답하면 CA에게 인증서 요청 정보(PKCS#10) 전송하고 승인을 기다린다. 이때 MD5 SHA1으로 Hash 손도장이 화면에 출력된다.


이제 서버에서 등록 요청이 있는지 확인해보면 Client Router 요청한 인증서가 보인다.

서버에서 pending 인증서 요청을 승인해 준다. 명령어는 crypto pki server CA_Server grant 1 이다. 만약 서버에서 인증서 발행 요청을 받았을 자동으로 발급해주고 싶다면 서버 설정할 "grant auto" 명령어를 입력해주면 된다.

Client Router에서 확인해보면 아직 pending상태인 것을 확인할 있다.

한참 승인되면( 3~4 정도) 인증서가 만들어지고 자동으로 라우터로 다운로드 된다.

Client 인증서를 보면 Issuer(발행자) 이름은 CA_Server이고 Subject(주체) 이름은 Client.aegis.com으로 다른 것을 있다. 인증서는 CA_Server에서 Client.aegis.com이라는 주체에 대해서 발급한 것임을 있다.

이상으로 Router에서 PKI설정을 마치도록 한다 

No comments:

Post a Comment