아파치 httpd에 SSL 인증서 설치하기

먼저.. 준비물

  • abc.pem: 인증 기관에서 받은 인증서 파일
  • abc.key: 인증 기관에 줄 인증 파일 만들 때 생성한 키 파일
  • global-abc.pem: 글로벌 인증서 파일
  • 암호: 키 파일 만들 때 사용한 암호 문구
  • mod_ssl.so: apache/modules에 들어있나 확인

1. mod_ssl 로딩 설정하기

apache/conf/httpd.conf 파일 열고 mod_ssl.so 검색.

vim에서 :/mod_ssl.so 쳐보면 됨.

mod_ssl.so 로딩하는 부분이 없으면 다음과 같은 설정 추가.

LoadModule ssl_module modules/mod_ssl.so

여기서 중간에 있는 ssl_module은 일종의 변수명 같은데… 그냥 이대로 쓰지 뭐.

2. httpd.conf하고 apache/conf/extra/httd-ssl.conf 연결하기

httpd.conf에서 ssl_module이라고 검색하면 방금 위에서 설정한 LoadModule말고 <IfModule> 이라는 부분이 있다.. 없으면 추가.

<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
Include conf/extra/httpd-ssl.conf
</IfModule>

그 부분에 저렇게 httpd-ssl.conf 설정을 추가하도록 설정. 아마도 httpd.conf 설정이 너무 복잡해 질까봐 이러식으로 분리하는것 같은데… 이게 더 복잡한거 같에. @_@;;; 어쩌겠어.. 이렇게 하라는데.. 흠냐..

3. httpd-ssl.conf 설정

위에부터 쭉 보면 Listen 443이라고 SSL 적용할 포트 설정이 있고 기타 여러가지 설정이 있는데 이 중에서 다음 설정을 현재 디렉토리 기준으로 잘 맞춰준다.

SSLPassPhraseDialog exec:/apache/conf/ssl/ssl.pass

/apache/conf/ssl/ssl.pass라는 파일은 없다. 이 작업 끝나면 만들꺼임. 파일 경로를 꼭 저렇게 할 필요도 없고.. 단지 실행 가능한 파일이어야 한다. 즉 x 권한이 있어야 한다. 이렇게 설정하지 않으면 기본값이 builtin인데 그렇게 해두면 httpd 띄울때마다 직접 인증서 키 파일 만들 때 사용한 암호를 입력해줘야해서 매우 번거롭다.

ServerName 도메인

인증서 발급받을 때 사용한 도메인을 입력해준다. 이 설정부터는 <VirtualHost> 안에 들어간다.

SSLProtocol -all ====
SSLCipherSuite ====

이건 인증서를 발금해준 인증 기관의 매뉴얼대로 설정해야 할 것 같다. 내가 받은 인증 파일 설명서엔 저렇게 되있던데… 흠.. 중요해 보이는 정보는 ====로 자막처리 했으니 상관없겠지.

SSLCertificateFile “abc.pem 파일 경로”

여기에 abc.pem 파일 경로를 풀로 적어준다.

SSLCertificateKeyFile “abc.key”

여기에 abc.key 파일 경로를 풀로 적어준다.

SSLCACertificateFile “global-abc.pem”

여기에 global-abc.pem 파일 경로를 풀로 적어준다.

나머지 설정은 그냥 기본값 그대로 둔다. 설마.. SSLEngine on이라는 설정이 off로 되어있진 않겠지..

4. 암호 파일 만들기

위에서 SSLPassPhraseDialog 설정을 추가했었는데 거기서 지정한 파일을 다음과 같이 만든다.

#!/bin/sh
echo 암호

즉 이 파일을 실행하면 암호가 입력되도록 하는 것이다. 서버 실행할 때 마다 귀찮지 않게…

아. 그리고 이 파일 만든 다음에 꼭 실행 권한을 주도록 하자.. chmod 755 ./ssl.pass 같은 식으로.. 그래야 httpd가 이 파일을 실행해서 암호를 입력 받을 수 있지… 그렇지 않으면 httpd가 아에 안뜬다.

5. 서버 띄우고 확인

이제 apache/bin으로 가서 ./apachectl start 등으로 아파치를 실행하고 netstat -na | grep 443으로 443번 포트가 동작하는지 확인하고 웹 브라우저에서 https://도메인 입력해서 확인한다. 끝.

아파치 톰캣 연동

URL을 어떻게 사용할꺼냐에 따라 설정하는 방법이 다를 수 있는데, 저는 whiteship.me/wiki whiteship.me/jira 이런식으로 구성하기로 했습니다. wiki.whiteship.me와 jira.whiteship.me 이런식으로 하는 것 보다 URL이 조금 길다는 단점이 있지만, 도메인 네임서버 호스팅 설정을 많이 하지 않아도 되고,(도메인 서비스 업체에서 와일드카드를 제공하면 몰겠지만, 제가 사용하는 곳은 안 그런거 같더라구요.) 아파치에서 버츄얼 호스트 설정 역시 많이 하지 않아도 되기 때문에 이 방법을 선택했습니다.

1. 아파치/conf/workers.properties

work.list 에 워커 추가.

work.list = whiteship

워서 설정

worker.whiteship.type = ajp13
worker.whiteship.port = 연동할 톰캣 포트

2. 아파치/conf/extra/httpd-vhosts.conf

버츄얼 호스트 등록하기

<VirtualHost *:80>
    ServerAdmin 메일계정(ex. whiteship@whiteship.me)
    DocumentRoot /usr/local/apache2/htdocs
    ServerName 도메인주소(ex. www.whiteship.me)
    ErrorLog 로그파일 위치(ex. logs/www.whiteship.me-errorLog)
    CustomLog 로그파일 위치
                                          
    JkMount /* 워커이름(위에서 whiteship이라는 워커를 등록했으니. whiteship으로..) 
    JkMount / 워커이름
</VirtualHost>

3. 톰캣/conf/server.xml

맨 아래 쪽에 name=”localhost”로 설정되어 있는 부분을 2번에서 설정한 도메인 주소로 변경..

   <Host name=”도메인주소”  appBase=”webapps”                          
            unpackWARs=”true” autoDeploy=”true”                                   
            xmlValidation=”false” xmlNamespaceAware=”false”>   

끝… 나머지는 톰캣에서 새로운 App 설정할 때 마다 /wiki /jira 이런식으로만 주면, 버츄얼 호스팅 설정도 안건드려도 되고, 도메인 네임서버 호스팅 설정도 안 해도 됩니다. 적용되는데 시간도 좀 걸리고 번거로운대다가.. 네임서버 호스팅 갯수도 보통 4~5개 로 제한적이더군요.. *.whiteship.me를 쓸 수 있게 해주던지;; 왜 다섯개밖에 못 쓰남;;