본문 바로가기
백엔드/WAS

아파치+톰캣 SSL 환경 구축

by david100gom 2019. 9. 15.

1. 기본 환경


  • OpenSSL : openssl-0.9.8j
  • Apache : httpd-2.2.6
  • Tomcat : apache-tomcat-5.5.17
  • Tomcat connector : mod_jk-1.2.28-httpd-2.2.X.so
  • 설치 위치 :  다운받은 모든 프로그램을 /usr/local/src/app 라는 폴더에 넣어서 관리한다. 또한 웹관련 어플리케이션을  /usr/local/server/ 밑에 설치한다. (유지보수의 편리성을 위해 한곳에 집중시킨다.)
    • 위치 예) /usr/local/server/apache, /usr/local/server/tomcat 등등

2.  OpenSSL 설치 하기 


아파치2 버전부터는  mod_ssl (www.modssl.org)를 따로 다운받아서 설치할 필요가 없다.

  1. www.openssl.org 에서 최선버전을 다운받는다. 
  2. 압축을 풀고 해당 폴더안으로 이동
  3. ./config --prefix=/usr/local/server/ssl 
  4. make 
  5. make install  와 같이 설치를 진행한다.

3. 아파치(httpd) 설치하기


http server 구동 방식에는 prefork 방식과 worker 방식이 있다. prefork 방식은 아파치 1.x 대 버전부터 사용해오던 전통적인 방식이다. 2가지 방식중 선택하는것에 따라 아파치 설치 옵션이 달라지니 설치전에 결정하는것이 낫다. 퍼포먼스부분에 있어서는 worker 방식이 좀더 낫다고 알려져 있다. 추후 서버의 접속량에 따라 /usr/local/server/apache/conf/extra/httpd-mpm.conf 의 MaxClients 의 수치를 높여줘야  하는 경우. 아파치 소스를 압축풀고 아래의 폴더로 이동하여 해당 소스를 오픈하면 아래와 같이 설정되어 있다. 

 위에서 설명한 바와 같이 prefork 방식으로 설치할 경우는 prefork.c 를 worker 방식으로 설치할 경우는 worker.c 의 define DEFAULT_SERVER_LIMIT 항목의 수치를 높게 수정해주고 아파치 설치를 진행하면 된다. 수치를 높게 변경하는 이유는 해당 수치에 따라 설정할수 있는 MaxClients 수치의 최대치가 정해지기 때문이다. 서버의 용도에 따라 변경할 필요가 없을수도 있지만 미리 높게 잡아놓고 MaxClients 를 조정하는것이 나중에 아파치를 재컴파일하는 사태를 미연에 방지할수 있다.

worker / prefork 방식 확인방법 : ./httpd -l

/server/mpm/prefork/prefork.c 수정부분 (적절한 수치로 변경한다.)
  define DEFAULT_SERVER_LIMIT 256
  define DEFAULT_THREAD_LIMIT 64


/server/mpm/worker/worker.c  수정부분  (적절한 수치로 변경한다.)
  define DEFAULT_SERVER_LIMIT 16 
  define DEFAULT_THREAD_LIMIT 64 


참고 : ServerLimit * ThreadLimit = MaxClient 수
  1. http://httpd.apache.org 에서 최신버전을 다운받는다.
  2. 압축을 풀고 해당 폴더안으로 이동
  3. 아파치 DSO 방식으로 설치
  4. make
  5. make install
1. prefock 방식 설치의 경우 (파란색 글자는 SSL 관련 옵션이다.) 
 ./configure --prefix=/usr/local/server/apache --enable-mods-shared=all --enable-so --enable-rewrite --enable-ssl --enable-module=ssl --with-ssl=/usr/local/server/ssl

2. worker 방식 설치의 경우 (파란색 글자는 SSL 관련 옵션이다./붉은색 글자는 worker 방식 옵션이다.) 
./configure --prefix=/usr/local/server/apache --enable-mods-shared=all --with-mpm=worker --enable-so --enable-rewrite --enable-ssl --enable-module=ssl --with-ssl=/usr/local/server/ssl

와 같이 설치를 진행한다.

4. 아파치 + SSL 설치 확인


톰캣연동전에 아파치와 SSL 이 제대로 연동되었는지 확인해보자

  • httpd.conf 파일에 LoadModule ssl_module modules/mod_ssl.so 가 있어야 한다.
  • 당연히 mod_ssl.so 파일이 /usr/local/server/apache/modules/ 밑에 있는지 확인한다.

5. 인증서 받기


그럼 위의 2가지를 확인했으니 테스트용 인증서를 받아서 SSL이 적용된 아파치를 구동시켜 보자. 인증서 관련 프로세스는 아래의 1번 내용처럼 진행된다. 중요한것은 key 파일과 CRT 파일이다. 

  1. OpenSSL 를 이용하여 개인키생성 -> CSR 생성 -> CSR파일을 가지고 인증기관을 통해서 CRT 파일 얻음 (자기 자신이 직접 인증서를 제작하여 테스트로 직접 운영 할 수도 있다)
    1. 개인키 생성 : openssl genrsa -des3 -out test.key 1024  
    2. 생성된 개인키 확인방법  : openssl rsa -noout -text -in test.key
    3. CSR(인증요청서) 파일 생성 : openssl req -new -key test.key -out test.csr
      1. Country Name (2 letter code) [GB]:KR   (국가 코드명)
      2. State or Province Name (full name) [Berkshire]:Seoul   (도시명)
      3. Locality Name (eg, city) [Newbury]:Seoul   (지역명) 
      4. Organization Name (eg, company) [My Company Ltd]:Gom(기업명)
      5. Organizational Unit Name (eg, section) []:Gom   (부서명)
      6. Common Name (eg, your name or your server's hostname) []:onjava.co.kr  (ssl 서버 도메인)
      7. Email Address []:test@onjava.co.kr  (이메일 주소)
      8. 다음에 나오는 마지막 2개 항목은 입력하지 않고 그냥 넘어가도 된다.
    4. 생성된 test.csr 파일을
      1. 인증기관에 넘기고 인증기관에서 인증서 (*.crt 파일) 를 보내줄때까지 기다린다
      2. 또는 직접 테스트용으로 생성한다
        1. openssl req -x509 -key test.key -in test.csr > test.crt
      3. 또는 http://www.verisign.com 에서 테스트용 인증을 받는다
        1. 만든 test.csr 파일을 업로드하면 바로 14일짜리 테스트용 crt파일을 받을수 있다.
  2. 이제 CRT 파일이 준비가 완료되었다.
    1. 아파치에 SSL를 연동하기 위해서는 key 파일과 crt 파일이 반드시 필요하니 잘 보관하자. ^^  (위의 예에서는 test.key 와 test.crt 가 되겠다.)
    2. httpd.conf 파일중 Include conf/extra/httpd-ssl.conf 부분의 주석을 제거하자.
    3. conf/extra/httpd-ssl.conf 파일 수정 (+ 버추얼 호스트설정도 포함되어 있으니 활용해도 좋겠다.) 아래의 2개의 항목에 key파일과 crt 파일 경로를 넣어준다. key파일과 crt파일은 어느폴더든 상관없다. 기왕 관리가 편하게 usr/local/server/apache/conf/ssl 라는 폴더를 만들어서 ssl 폴더에 key파일과 crt 파일을 넣어놓는것도 좋을듯 싶다.
      1. SSLCertificateFile 경로 수정 (*.crt 경로)
      2. SSLCertificateKeyFile 경로 수정 (*.key 경로)

6. SSL 적용된 아파치 구동하기 


준비는 다 되었다.. 이제는 아파치를 구동해보자. 

  1. /usr/local/server/apache/bin/apachectl start (apachectl startssl 명령어는 아파치2 버전부터는 없어졌다.)
  2. 아파치를 구동한다. 
    1. 아파치 구동시 보안에러가 발생하면 
      1. chcon -t texrel_shlib_t /usr/local/server/apache/modules/mod_ssl.so 의 명령어로 해결해 준다.
  3. 아파치 구동명령어를 치면 바로 암호를 넣으라는 내용이 나올것이다 이럴때는 개인키생성 할때 사용했던 암호를 넣어주면 된다.
    1. 암호입력없이 인증하기
      1. /usr/local/server/apache/conf/passphrase 파일을 만들고, chmod 700 으로 권한을 준다.
      2. 아래 소스 참고
      3. http-ssl.conf 파일안의 SSLPassPhraseDialog builtin 을 아래와 같이 변경한다.
      4. SSLPassPhraseDialog exec:conf/passphrase
  4. 보통의 아파치의 경우는 80 포트를 사용하지만 SSL 적용하게 되면 443포트를 사용하게 된다. 당연히 브라우저에서도 http://www.onjava.co.kr (기본포트 80) 가 아니라 https://www.onjava.co.kr  (기본포트 443) 로 접근해야 된다.
# passphrase 파일

#!/bin/bash
echo "패스워드"

7. 톰캣과 연동하기


  1. 톰캣과의 연동은 일반적인 아파치 톰캣연동으로 구성.
  2. http://theserverside.tistory.com/228 기존에 작성했던 내용을 보고 구성하면 됩니다.

8. Key Point


아파치와 톰캣을 연동해서 사용하는경우 아파치에 SSL를 적용해야 할지 톰캣에 적용해야 할지 고민하는 경우가 있습니다.  신규서버를 구축하시는 분은 아파치쪽에 SSL를 설치하고 나서 톰캣과 연동하여 사용하시면 됩니다.

하지만 이미 운영되고 있는 서버에  SSL을 적용하려는 분들중 아파치 재컴파일이 부담이 되신다면 아파치가 아니라 톰캣에 SSL 를 적용하여 운영하는 방법도 있으니 선택해서 사용하시면 됩니다. 

지금까지 아파치+톰캣 SSL 환경 구축 이였습니다.

 

댓글