테스트 용도 및 내부 어플리케이션 사용 용도라면 굳이 돈주고 Verisign 인증서 같은걸 사서 쓸 필요 없이 간단히 OpenSSL로 만들어 사용하는 것도 좋은 방법이지요.

인증서란 것이 발급한 기관이 어디냐에 따라서 브라우저 같은 Application에서 그냥 넘어가느냐 못믿을 놈이니 확인해라 라는 컴플레인을 하거나의 차이일 뿐 표준에 따라 만드는 것이라 다를 것이 없으니까요....

OpenSSL로 인증서 생성 및 변환하는 것을 아주 간략히 정리해봅니다.
OpenSSL을 설치하면 openssl 이라는 이름의 실행파일이 있으며 이는 OpenSSL 패키지에 대한 데모 및 샘플 코드 제공, 각종 암호키에 대한 변환 등의 기능을 제공하는 툴입니다.
이 툴로 사실 우리가 필요로 하는 거의 대부분의 키 핸들링이 가능하다고 볼 수 있습니다.


1. Demo CA 설정
- 현재 디렉토리에 demoCA 디렉토리 생성 : mkdir demoCA
- demoCA 디렉토리 안에 시리얼 파일 생성 : serial 이란 이름의 text 파일에 00 을 적는다.
- index 파일 생성 :  index.txt 란 이름으로 빈 파일을 만든다.

2. CA 인증서 생성
- CA 개인키 생성 :  openssl genrsa -des3 -out ca.key 1024
- Self-Signed CA 인증서 생성 :  openssl req -new -x509 -days 365 -key ca.key -out ca.crt

3. 하위 인증서 생성 (예: HTTPS Web 서버용..)
- server 개인키 생성 : openssl genrsa -des3 -out server.key 1024
- server 인증서 발급을 위한 요청파일 생성 : openssl req -new -days 365 -key server.key -out server.csr
- server 인증서 발급 : openssl ca -in server.csr -out server.crt -keyfile ca.key -cert ca.crt -outdir .

위 작업의 결과로 server.crt 라는 server용인증서가 생성되고 index 파일에 발급내역이, serial이 16진수로 1씩 증가한다.

4. 인증서 인코딩 포멧 변경
- openssl 이 생성하는 인증서의 인코딩은 발급 시 옵션을 주지 않으면 디폴트가 PEM (base64 encoding)이다.
- Java 등에서 사용하기 위한 DER 포맷(바이너리)으로 변경은 다음과 같이 수행한다.
   : openssl x509 -in ca.crt -out ca.der -outform DER

5. 인증서 내용 보기
- openssl x509 -in ca.crt -text   (PEM 포맷인 경우)
- openssl x509 -in ca.der -inform DER -text (DER 포맷인 경우)
Posted by Golmong

댓글을 달아 주세요

  1. 강춘운 2009.11.10 10:52 신고 Address Modify/Delete Reply

    자료 알차게 정리 잘되있네요. 잘 보고 갑니다.

  2. 아가비룡 2012.02.01 12:40 신고 Address Modify/Delete Reply

    안녕 하세요 위에 게시글보고 작업중인 1인입니다.

    1, 위에 방법으로 테스트용 뿐만아니라 실제로도 사용이 가능한지 궁금합니다.
    2, 5번 항목에 인증서 내용 보기 라는것이 잇는데 그것이 어더한기능을 하는지 궁금합니다.
    3, CA 인증서와 서버 인증서만 만들어지면 HTTPS 로 접근이 가능한지 궁금합니다. 그리고 클라이언트에서 접근시 인증서 오류가 발생할경우 어떻게 대처해야하는지 궁금합니다.
    참고로 전 iis 7.0 을 사용하고 있습니다.

    • golmong@gmail.com 2012.02.14 16:06 신고 Address Modify/Delete

      안녕하세요. 요즘 잘 보지 않아서 늦게 봤네요..ㅋ
      1. 실제로도 당연히 동작합니다. 다만 Thawte나 베리사인 같은 공인된 CA가 발행하지 않은 웹서버 인증서를 사용하면 브라우저에서 믿을 수 없는 인증서인데 계속 할거나 묻는 경고창이 나옵니다.,
      2. 인증서 데이터는 DER 과 같은 표준화된 인코딩 방법으로 되어 있습니다. 이를 DER 디코딩해서 안에 들어 있는 내용을 텍스트로 사람이 읽을수 있게 보여줍니다.
      3. HTTPS 를 위해서는 서버 인증서만 있으면 되구요, CA 인증서는 서버 인증서를 발급하기 위해 필요하구요, CA 인증서가 없어도 사실 self-signed 인증서로 서버 인증서를 만들수도 있구요. 클라이언트 접근시 인증서 오류는 위에 얘기한 것처럼 공인된 CA가 발급하지 않았다면 반드시 보여주게 되어 있습니다.

      혹시 더 궁금하신 것이 있으시면 golmong@gmail.com 으로 문의주세요.~~