이문서는 공개되어 있으며 해당 URL로 방문하시면 SpringNote 버젼으로 보실수 있습니다.

[ http://eloid.springnote.com/pages/455122.xhtml ]

 

이 문서는 2007년 9월 4일 화요일에 최초 작성되었습니다.

최종 수정일 : 2007년 9월 6일 목요일

 

작성자 : 엘로이드(Eloid)

http://eloid.tistory.com

 

0. 목차

  1.  개요
    1. SSL에 대한 일반적 이해
  2. 설치준비 
    1. 제반사항
    2. 필요한 프로그램 및 라이브러리 

      1. 설치 버젼으로 세팅하기 위한 준비
      2. 수작업으로 세팅하기 위한 준비
    3. 기타사항
  3. 설치 
    1. OpenSSL 라이브러리 설치
    2. mod_ssl.so 모듈의 설치
    3. 인증서 설치
      1. 인증서 생성의 개략적 과정
      2. Commamd Mode 에서의 Test 인증서 생성
  4. 설정 
    1. httpd.conf 파일의 수정
    2. ssl.conf 파일의 수정
  5. 문제해결
    1. 들어가기에 앞서
    2. 문제의 종류에 따른 몇몇 해결 가이드라인
      1. 모듈이 로딩되었는지 어떻게 확인을 합니까
      2. ssl_error_log 에 아래와 같은 형식의 로그가 남았습니다.
      3. Error: Init: SSLPassPhraseDialog builtin is not supported on Win32 에러
  6. 참고 사이트

 

 

1. 개요

1.1 SSL에 대한 일반적 이해

  • 이 주제에 대해서는 이미 잘 작성되어 있는 문서들이 많으므로 링크로 대체합니다.
  • 해당 링크가 문제가 발생할 경우를 대비해 하위폴더로 웹페이지를 저장 해 두었으니 라이브 링크가 열리지 않는다면 1.1 폴더로 가 보시기 바랍니다.

 2. 설치준비

2.1 제반사항

  1. OS - Win32 기반의 OS (Windows Server군 권장)
    => 저같은 경우 Windows 2000의 환경에서 세팅을 하였습니다.
  2. Apache Server + (연동된 WAS)
    => 저같은 경우 Apache + Tomcat을 연동하여 사용하고 있습니다.
    => 여기에서는 Apache의 버젼이 굉장히 중요하므로 미리 버젼을 체크하여 두도록 합니다.
    => 마지막으로 성공한 구성은 Apache 2.0.59를 다시 세팅한 것이였습니다. 참고해 주세요.

 

2.2 필요한 프로그램 및 라이브러리

2.2.1 설치버젼으로 세팅하기 위한 준비 (편하게 하시려거나 처음으로 다루시는 분들)

  •  이 방법은 아파치는 msi로 설치를 하셨고 SSL도 설치버젼으로 손쉽게 설치하여 나름 반자동으로 시간을 아낄 수 있기는 합니다만 프로그램 추가 삭제에 프로그램 목록이 등록되어 관리가 되게 됩니다.
  • 몇몇 사람들은 이런것들을 오히려 번거로워 하기도 하기 때문에 아래에 수작업으로 세팅하는 방법을 다루도록 하겠습니다.

 

  1. OpenSSL - http://openssl.org/
    •  OpenSSL은 직접 컴파일을 하는 방법과 누군가 컴파일을 해 놓은 버젼을 구해 설치하는 방법으로 설치할 수 있습니다.
    직접 컴파일 하는 방법은 다음 사이트를 참고하도록 하세요.
         [ 사이트1(영문) ] [ 사이트2 (네이트tong) ]
    친절하게도 누군가가 컴파일하여 패키지로 묶어 배포를 하고 있는 버젼이 있습니다. 설치버젼에서는 아래를 이용하여 해 보려고 합니다.
    다음 사이트를 방문해 보세요. 공식 사이트의 최신 버젼과 이곳의 최신 릴리즈된 버젼을 잘 비교해 보시기 바랍니다.
         [ http://www.slproweb.com/products/Win32OpenSSL.html ]
    •  둘 중 하나만 선택하면 됩니다. 단순히 인증 서버를 구축하기 위한다면 컴파일 된 버젼(win32)을 구하시는 것이 편합니다.
    •  컴파일/설치 후 필요한 파일은 openssl.exe, ssleay32.dll, ssleay32.lib, libeay32.dll, libeay32.lib 5개입니다. 미리 복사해서 준비해주세요.
    •  OpenSSL 의 버젼은 최종 성공 버젼은 0.9.8e였지만 0.9.8d 에서도 현재 구성으로 동작함을 확인했습니다.
  2. Apache와 mod_ssl - http://hunter.campbus.com/
    • mod_ssl.so 모듈파일은 위 사이트에서 제공하는 Apache_2.0.59-Openssl_0.9.8d-Win32.zip 을 받아 modules 에서 뽑아 사용하였습니다.
    • 0.9.8d 버젼이 필요하시면 Openssl-0.9.8d-Win32.zip 를 받으시면 됩니다. 위의 링크는 Apache에 Openssl 모듈 및 라이브러리가 포함된 버젼입니다.

 
2.2.2 수작업으로 세팅하기 위한 준비 (기존 서버 사용자나 설치버젼이 찝찝하신 분들)


2.3 기타 사항

 

 

 3. 설치

3.1 OpenSSL 라이브러리 설치

1. 컴파일을 한 경우
     => 2.2 부분 직접 컴파일 하는법 사이트 링크 설명에 따라 컴파일을 합니다.
     => 결과물을 적당한 폴더에 넣습니다. (C:\bin\OpenSSL)
     => 이후 결과로 나온 파일 libeay32.dll, ssleay32.dll, 파일을 Windows\System32 혹은 WINNT\system32 폴더에 복사하도록 합니다.
     => System32 폴더가 환경변수 PATH로 잡혀있는지 확인해 봅니다.

 

 2. Win32OpenSSL 을 받은 경우
     => 적당한 폴더에 설치합니다. (C:\bin\OpenSSL)
     => 설치 프로그램이 알아서 dll 파일들을 System32 폴더안에 복사해 넣으므로 재설치의 경우라면 설치 전에 아파치가 해당파일을 참고하고
       있지 않은지 확인합니다.

 

3.2 mod_ssl.so 모듈의 설치

1. %APACHE_HOME%\modules 폴더 안에 mod_ssl.so 파일을 복사해 넣습니다. 이후 httpd.conf 에서 모듈을 로드할 것입니다.

2. 옆 사이트에서 ssl.conf 파일을 받아 %APACHE_HOME%\config 폴더 안에 넣습니다. [ http://www.thompsonbd.com/tutorials/files/ssl.conf ]
     => 위 파일은 ssl 관련 세팅을 위한 config 파일이며 이후에 httpd.conf 에서 Include 시켜 줄 것입니다.

 

3.3 인증서 설치

3.3.1 인증서 생성의 개략적 과정

  •  인증서의 생성과 설정에는 전체적으로 다음과 같은 과정을 따릅니다.
    1. RSA키 생성 -> *.key
    2. Certificate Signing Request(CSR) 생성 -> *.csr
    3. rootCA에 csr을 보냄.
    4. crt파일을 받음(인증서,CA인증서)
    5. 적당한 경로에 올리고 버츄얼 호스트 및 인증서 파일의 경로 세팅

 

 3.3.2 Command Mode 에서 Test 인증서 생성

이 작업을 하기 전 다음 사이트를 참고하면 전체적으로 SCR 파일을 생성하는 과정에 대해 도움을 받을 수 있습니다.
Apache 웹서버(1.3.xx , 2.0.xx 공통) CSR(Certificate Signing Request) 생성 ]
[ http://www.webkebi.com/bbs/zboard.php?id=webkebi_qna&no=133 ]
     => 반드시 작업을 하며 생성되는 개인키의 백업을 잊지 않도록 합니다.
          키가 뒤죽박죽되어 설치가 되면 서버 가동 및 실행에 이후에 에러가 발생 할 수 있으니 생성중 문제가 생겼다면 처음부터 다시 하도록 합시다.
         (문제해결 부분 참고)

  1.  설치한 openssl 폴더로 들어가 다음과 같은 명령어를 수행합니다.  (key RSA 파일 생성)
  1.  C:\bin\openssl>openssl genrsa -out domain.key 1024

 => domain.key 라는 이름의 RSA key 파일을 생성한다. 1024 비트의 암호화.
 => 몇몇 사이트에서 -des3 옵션을 주고 있지만 옆과 같은 이유로 win32환경에서는 옵션을 빼야합니다. (http://blog.divira.com/8)

 


2.  CSR(Certificate Signing Request) 파일 생성을 위해 아래 명령어를 수행합니다.

  1.  C:\bin\openssl>openssl req -new -config openssl.cnf -days 365 -key domain.key -out domain.csr

  => win32상에서 돌리므로 -config 옵션으로 cnf파일을 명시해 줍니다.

 

   3. 아래와 같은 입력 폼이 나오면 알맞게 입력합니다.

  1. Country Name (2 letter code) [AU]:KR
    State or Province Name (full name) [Some-State]:Seoul
    Locality Name (eg, city) []:Gangnam
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:ljunesoft
    Organizational Unit Name (eg, section) []:DevelopTeam
    Common Name (eg, YOUR name) []:www.ljunesoft.co.kr
    Email Address []:admin@ljunesoft.co.kr
  2. Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:

 

 [팁]
[Tue Sep 04 20:01:13 2007] [warn] RSA server certificate CommonName (CN) `www.ljune.co.kr' does NOT match server name!?
[Tue Sep 04 20:01:14 2007] [warn] RSA server certificate CommonName (CN) `www.ljune.co.kr' does NOT match server name!?
CN 부분을 서버 이름에 맞춰서 넣지 않으면 서버를 시작할때 위와 같은 warn 메세지가 log 파일에 쓰입니다.

 

  4. 여기까지 진행하면 domain.key 파일과 domain.csr 파일이 생성됩니다.
        =>  RootCA 기관에 보내는 것이라면 여기까지 진행하고 위 파일을 보내어 서명된 crt파일을 받아 서버에 세팅하면 됩니다.

 

  5. 테스트를 위한 crt 파일 생성하기

  1.  C:\bin\openssl>openssl x509 -in domain.csr -out domain.crt -req -signkey domain.key -days 365
  2. Loading 'screen' into random state - done
    Signature ok
    subject=/C=KR/ST=Seoul/L=Gangnam/O=ljunesoft/OU=DevelopTeam/CN=www.ljunesoft.co.kr/emailAddress=admin@ljunesoft.co.kr
    Getting Private key

 

6. domain.key 파일과 domain.crt 파일을 적당한 경로에 복사합니다. ( %APACHE_HOME%\conf\ssl 폴더 권장)

 

4. 설정

 4.1 httpd.conf 파일의 수정

 개략적인 설정에 관해서는 아래 사이트를 참고하면 도움이 될 수 있습니다.

  [ http://www.thompsonbd.com/tutorials/apachessl.php ]

 

 

  •  %APACHE_HOME%\conf 폴더로 가서 httpd.conf 파일을 에디터로 엽니다.
  1.  LoadModule ssl_module modules/mod_ssl.so

 

  •  IfModule 부분이 있다면 주석처리 하고 ssl.conf 파일을 Include 해줍니다.
  1. #<IfModule mod_ssl.so>
        Include conf/ssl.conf
    #</IfModule>

 

 

4.2 ssl.conf 파일의 수정

  •  %APACHE_HOME%\conf 폴더로 가서 ssl.conf 파일을 엽니다. (혹은 사용자가 저장한 폴더로 갑니다.)
     443 포트를 사용하도록 합니다. IfDefine SSL 태그 는 주석처리 해 줍니다.
    저같은 경우 이 사이의 구문들이 실행되지 않아 애를 먹었으므로 이 이후 나오는 같은 태그들도 전부 주석처리 하여 그 사이의 문장들이 조건 없이 무조건 실행되도록 하였습니다. 어차피 SSL을 가동시켜야 하므로 굳이 조건을 체크할 필요는 없거든요.
  1.  #<IfDefine SSL>
    Listen 443
    #</IfDefine>

 

  •  선택사항. 포트기반의 VirtualHost를 이용할 것입니다. 80번 포트로 들어오게 되면 SSL엔진을 꺼서 효율을 높입니다.
  1. <VirtualHost *:80>
        SSLEngine off
    </VirtualHost>

 

 

 

  • VirtualHost를 설정합니다. 아래 설정은 테스트로 localhost를 지정했지만 실제로는 인증서의 CN과 일치하게 작성해야 합니다.
    포트기반으로 되며 인증서가 멀티도메인이라면 추가적인 설정이 더 필요하지만, 현재 여기에서는 일반적인 인증방식만 다루도록 합니다.
    아래 설정된 옵션에 대해서는 이후 오류해결 부분에서 좀 더 상세히 다루겠습니다.
    제대로 설정한다면 이후 https:// 프로토콜로 접속하는 페이지에서는 암호화 과정을 거쳐 페이지가 로딩되게 됩니다.
  1. #<IfDefine SSL>
  2. .....
    <VirtualHost *:443>
  3. .....
  4. ServerName localhost
    DocumentRoot "C:/Program Files/Apache Group/Tomcat 5.5/webapps"
    ErrorLog logs/ssl_error_log
    TransferLog logs/ssl_access_log
    .....
  5. #crt 확장자가 인식되도록 설정되어 있는지 확인합니다.
  6. AddType application/x-x509-ca-cert .crt
    AddType application/x-pkcs7-crl    .crl
  7. .....
  8. SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    .....
    SSLEngine on
    .....
  9. SSLCertificateFile conf/ssl/www.ljune.co.kr.crt
  10. SSLCertificateKeyFile conf/ssl/www.ljune.co.kr.key
  11. .....
    #체인 인증서가 존재한다면 아래 구문을 설정해 주어야 합니다.
  12. #SSLCertificateChainFile conf/ssl/www.ljune.co.kr.chain.crt
  13. .....
  14. # SSL 을 통해서만 접근할 수 있는 디렉토리 설정.
     <Directory "C:\Program Files\Apache Group\Apache2\conf\ssl">
       SSLRequireSSL
     </Directory>
  15. .....
  16. </VirtualHost>                     
  17. #</IfDefine>

 

 

 5. 문제해결

 5.1 들어가기에 앞서

 
5.2 문제의 종류에 따른 몇몇 해결 가이드라인

  • 제가 서버구축을 하며 만났던 몇몇 에러들을 정리해 두었습니다.
  • 위 사이트에 언급이 되어 있기는 하지만 영문이기도 하고 제가 적은대로 하신다면 만나기 쉬울 확률이 높기때문에 따로 작성을 하게 되었습니다.

 

 5.2.1 모듈이 로딩되었는지 어떻게 확인을 합니까.

기본적으로 Apache Service Monitor을 실행하면 아래 상태표시줄에 로딩된 모듈들이 표시가 됩니다.

 

 apache.jpg

 

5.2.2  ssl_error_log 에 아래와 같은 형식의 로그가 남았습니다.

  1.  [Tue Sep 04 20:07:35 2007] [error] SSL Library Error: 218529960 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
    [Tue Sep 04 20:07:35 2007] [error] SSL Library Error: 218595386 error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error
    [Tue Sep 04 20:07:35 2007] [error] SSL Library Error: 218734605 error:0D09A00D:asn1 encoding routines:d2i_PrivateKey:ASN1 lib


 1. 인증키가 다른것과 섞이지 않았는지 확인합니다. (key 파일,crt 파일)
 2. ssl.conf 의 구문에 태그가 제대로 열리고 닫혔는지 확인합니다. (VirtualHost 안에 또 VirtualHost가 들어갔다던지..IfModule을 한개만 주석처리했다던지..)
 3. 위 방법이 되지 않으면 SSL 키로부터 passphrase를 제거합니다.
         [ http://help.metaltoad.com/apache/removing-a-passphrase-from-an-ssl-key.html ]

  1.  openssl rsa -in server.key -out new.key

 4. 그래도 되지 않으면 OpenSSL 라이브러리를 최신으로 업데이트 해 보시기 바랍니다.

5.3.3 Error: Init: SSLPassPhraseDialog builtin is not supported on Win32 에러

1. 다음 사이트 참고 [ http://blog.divira.com/8
 위에서 언급하였지만 key 생성시 옵션에서 -des3 를 주지 않으면 위 에러가 해결 될 수 있습니다.

 

 6. 참고 사이트

 

 

'Infrastructure' 카테고리의 다른 글

SSL 인증키 관련  (0) 2009.11.24
openssl-for-windows  (0) 2009.11.20
Windows용 Apache 2.0.4x 에서 SSL 지원하도록 컴파일  (0) 2009.11.20
Apache Module mod_ssl  (0) 2009.11.20
Apache + SSL on Windows 관련 URL  (0) 2009.11.20

+ Recent posts