메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

한빛랩스 - 지식에 가능성을 머지하다 / 강의 콘텐츠 무료로 수강하시고 피드백을 남겨주세요. ▶︎

IT/모바일

자신만의 CA(Certificate Authorities) 생성하기

한빛미디어

|

2003-09-25

|

by HANBIT

12,776

저자: 『Linux Server Hacks』의 저자 롭 플리켄저 작성/『리눅스 서버 관리 Hacks 100』의 역자 김대영, 김태경 역

자신만의 인증기관을 만들어서, 자신 또는 타인의 SSL 증서에 직접 서명해 줄 수 있다!

널리 알려진 인증서 발행 기관(CA, 예를 들어 Thawte나 VeriSign)은 인증 서비스를 해주고, 이 인증이 유효하다는 것을 증명해주는 역할을 한다. 이들 회사는 중요한 정보(은행 계좌번호나 비밀번호 같은 것들)를 다루는 사이트에서 사용되는 SSL 인증서를 서명해주는 사업을 하고 있다. 신뢰할 수 있는 기관에서 서명한 SSL 인증서를 제공하는 사이트라면, 아마도 인증서에 대한 증명서를 제공함으로써 서버의 신원을 확인할 수 있을 것이다. 널리 알려진 CA가 발행한 인증서를 받기 위해서는 자신의 신분 및 증서를 사용하려는 목적을 정확히 밝혀야 한다.

예를 들어 CA에 필자가 진짜 Rob Flickenger라는 사실을 증명하더라도 마이크로소프트사에 대한 인증서에 서명을 해주지는 않는다. 왜냐하면 필자에게는 마이크로소프트사라는 이름을 사용할 권한이 없기 때문이다.

이 기사에서, 필자는 OpenSSL를 통해 자신만의 인증서 발행 기관을 만드는 방법을 소개하고자 한다. CA.pl 유틸리티를 사용하면 아주 간단한 일이다.


리눅스 서버 관리 Hacks 100

참고 도서

리눅스 서버 관리 Hacks 100
롭 플리켄저(Rob Flickenger)




아래 예제에서 굵게 표시된 부분과 패스워드 부분을 입력한다(입력한 패스워드는 화면에 나타나지 않는다). 새로운 인증서 발행 기관을 만들려면 다음과 같이 한다.
hagbard@fnord:~/certs$  /usr/local/ssl/misc/CA.pl -newca
CA certificate filename (or enter to create)

Making CA certificate ...
Using configuration from /usr/local/ssl/openssl.cnf
Generating a 1024 bit RSA private key
...............++++++
......................................++++++
writing new private key to "./demoCA/private/cakey.pem"
Enter PEM pass phrase:
Verifying password - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ".", the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:California
Locality Name (eg, city) []:Sebastopol
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Illuminatus
   Enterprises, Ltd
Organizational Unit Name (eg, section) []:Administration
Common Name (eg, YOUR name) []:Hagbard Celine
Email Address []:hagbardceline1723@yahoo.com
축하한다! 이제, 인증서 발행기관 소유주가 되었다. 다음을 살펴보자.
hagbard@fnord:~/certs$  ls
demoCA/
hagbard@fnord:~/certs$ cd demoCA/
hagbard@fnord:~/certs/demoCA$ ls -l
total 24
-rw-r--r--    1 rob      users        1407 Sep  8 14:12 cacert.pem
drwxr-xr-x    2 rob      users        4096 Sep  8 14:12 certs/
drwxr-xr-x    2 rob      users        4096 Sep  8 14:12 crl/
-rw-r--r--    1 rob      users           0 Sep  8 14:12 index.txt
drwxr-xr-x    2 rob      users        4096 Sep  8 14:12 newcerts/
drwxr-xr-x    2 rob      users        4096 Sep  8 14:12 private/
-rw-r--r--    1 rob      users           3 Sep  8 14:12 serial
새 인증서 발행 기관의 공개키는 cacert.pem에, 개인키는 private/cakey.pem에 담겨있다. 이제 이 개인키를 사용해서 여타 SSL 인증서에 서명할 수 있다.

SSL 인증서에 서명하기 위해서 CA의 권한을 사용하려면 아파치 같은 웹 서버가 사용할 수 있는 새 인증서를 만들어야 한다. 제일 먼저 개인키와 인증서 요청을 만든다(CA.pl 맨페이지나 『리눅스 서버 관리 Hacks 100』에서 "[Hack #93] SSL 인증서 생성과 서명 요청"을 참고한다). 이제 새로운 요청에 대해서 CA의 키로 서명할 수 있다.
hagbard@fnord:~/certs$ openssl ca -policy policy_anything \
  -out propaganda.discordia.eris.crt \
  -infiles propaganda.discordia.eris.csr

Using configuration from /usr/local/ssl/openssl.cnf
Enter PEM pass phrase:
Check that the request matches the signature
Signature ok
The Subjects Distinguished Name is as follows
countryName           :PRINTABLE:"US"
stateOrProvinceName   :PRINTABLE:"Texas"
localityName          :PRINTABLE:"Mad Dog"
organizationName      :PRINTABLE:"Discordia, Inc."
organizationalUnitName:PRINTABLE:"Operations"
commonName            :PRINTABLE:"propaganda.discordia.eris"
emailAddress          :IA5STRING:"hail@discordia.eris"
Certificate is to be certified until Sep  8 22:49:26 2003 GMT (365 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
이제 아파치 + mod_ssl(또는 Apache-ssl)에서 .crt.key를 사용하기 위해 평상시와 마찬가지로 설치한다. 아마도 다음과 같을 것이다.
SSLCertificateFile /usr/local/apache/conf/ssl.crt/propaganda.discordia.eris.crt
SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/propaganda.discordia.eris.key
정말 재미있지 않은가? 클라이언트가 실제로 https://propaganda.discordia.eris/로 접속하면 무슨 일이 일어날까? SSL 인증서를 서명한 인증 기관을 승인할 수 없다면서 에러를 내지 않을까? 당연히 에러를 낸다. 물론 CA의 공개키를 클라이언트의 브라우저에 미리 설치했다면 에러를 내지 않는다. CA 공개키를 설치하려면 필자의 다음 기사를 기대하기 바란다.(기다리는 것이 싫다면, 필자가 쓴 책에서 Hack #95를 참고하기 바란다.)

† 첨언: 필자는 마이크로소프트사의 인증서에 혼란을 줄 의도는 전혀 없다. 다만, 온라인 상에서 "누구를 신뢰할 수 있는지를 결정하는 것이 어렵다"는 근본적인 사실을 일깨워주려고 한 것 뿐이다.
TAG :
댓글 입력
자료실

최근 본 상품0