아파치 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://도메인 입력해서 확인한다. 끝.

Tomcat에 SSL 인증서 설치하기

검색하면 무지하게 많이 나옵니다. 그런데 저에게 필요한걸 찾기는 어렵더군요. 하지만 결국에 찾았죠. 캬캬

http://www.agentbob.info/agentbob/79-AB.html

http://wiki.eclipse.org/Generating_a_Private_Key_and_a_Keystore

이 두 글이 없었으면…. 아마.. 포기했거나 훨씬 더 오래 걸렸겠죠. 어흑.. 너무 고마운 블로거들…

일단 나한테 주어진 파일은..

  • abc.key => 키 파일
  • abc.csr => 인증서 요청용 파일
  • abc.pem => 인증 기관에서 받은 파일
  • abc.key 생성할 때 사용한 암호.

체인파일이라고 pem 파일이 하나더 있긴한데.. 그건 패스;; httpd에 설정하는건 그냥 이 파일들 경로만 지정해주면 되는데 톰캣에 설정하려면 왜 이렇게 복잡한 건지… 에효.. 하나 하나 적어 둡니다.

1. 키 파일 변환

openssl pkcs8 -topk8 -nocrypt -outform der -in abc.key -out tmpfile

2. 인증 파일 변환

openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER

3. 자바 파일 다운

http://www.agentbob.info/agentbob/80/version/default/part/AttachmentData/data/ImportKey.java

이 파일이 필요합니다. 애초에 ~.key 파일로 keystore를 만들 수 있으면 좋았을텐데.. 그러질 못하니까 지금 이런짓을 하고 있는 겁니다. 이 자바 파일을 이용해서 keystore를 생성할껍니다. 혹시라도 링크가 짤릴 수도 있으니까 깃헙에도 올려두겠습니다. 이런거 가지고 뭐라하진 않겠지;;

그런 다음 여기서 keypass  변수를 찾아서 abc.key를 생성할 때 사용한 암호를 적어줍니다.

4. 컴파일

별거 없죠. javac ImportKey.java

5. keystore 생성

java ImportKey tmpfile cert.der tomcat

첫번째 변수는 키를 변환한 파일, 두번째 변수는 인증서를 변환한 파일, 세번째는 톰캣 설정에 사용할 alias입니다.

이 명령어를 사용하면 콘솔에 어떤 경로에 파일이 생겼다고 알려줍니다. 기본값은 사용자 홈 디렉토리/keystore.ImportKey인데.. 자바 파일을 수정하기 나름이겠죠.

6. 확인

잘 만들어졌나 확인하려면

keytool -list -keystore ~/keystore.ImportKey

이렇게 찍어보면 tomcat이라는 alias로 뭔가 들어있는게 보일겁니다.

7. 톰캣 설정

<Connector port=”포트” maxThreads=”512″ connectionTimeout=”10000″ protocol=”HTTP/1.1″ redirectPort=”8443″ URIEncoding=”UTF-8″ SSLEnabled=”true” scheme=”https” secure=”true” sslProtocol=”TLS” clientAuth=”false” keystoreFile=”키스토어경로” keystorePass=”키생성시 사용한 암호” keyAlias=”tomcat” />

이 네개의 값만 잘 설정해 주시면 됩니다. 물론 maxThreads나 connectionTimeout 같은 값도 잘 설정해야겠죠. 포트는 기본값이 443이긴한데.. 원하면 다른 포트를 사용하셔도 됩니다. 여기서는… keystoreFile은 ~/keystore.ImportKey가 되고 keystorePass는 최초에 abc.key 생성할 때 사용한 암호.. 그 암호를 그대로 ImportKey.java 에 사용했으니.. 그 값을 그대로 적어주면 되겠죠. keyAlias는 ImportKey를 자바로 실행할 때 준 마지막 매개변수인 그 값을 설정했습니다.

8. 톰캣 재시작

이건 뭐 알아서..

9. 포트 확인

netstat -na | grep 포트

이 명령으로 SSL을 적용한 포트가 동작하고 있는지 확인하시면 됩니다.

 

끝!!!