2015/07/31 14:42

apache + tomcat 환경에 ssl 적용하기 Server/WAS



일단 인증서를 준비한다.. 

직접 생성하는 방법은 구글링을 통해 찾아서 하는 걸로 하고,
난 인증서가 준비되었다는 가정하에 적는다.. 

상용 인증서를 사용하게 되면 기본적인 설정방법은 가이드 된다..
그래서 난 아는 내용 말고 다른 이야기를 하고자 한다..

그 다른 이야기라는 건,, 
www.a.com 이라는 도메인은 하나이지만 
연동된 서비스는 세개, 즉 port를 통해 서비스를 구별하는 경우이다.. 

일반적인 ssl 설정이라고 하면 아래와 같이 세팅할 것이다. 
( apache 버전이 2.0.x 이기 때문에 ssl.conf 파일을 사용함)


httpd.conf -----------------------------

LoadModule ssl_module modules/mod_ssl.so

Include conf/ssl.conf


ssl.conf -----------------------------

Listen 443

<VirtualHost _default_:443>
DocumentRoot /Apache2/htdocs
ServerName www.a.com
ServerAdmin admin@a.com
ErrorLog logs/error_log
TransferLog logs/access_log

SSLEngine on

SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:MEDIUM:!SSLv2:!PSK:!SRP:!ADH:!AECDH

SSLCertificateFile conf/ssl/cert.pem
SSLCertificateKeyFile conf/ssl/newkey.pem
SSLCACertificateFile conf/ssl/name-Chain.pem

JkMount /* example

</VirtualHost>  


여기서 보면, 가이드에 잘 안나온 설정이 위에 표시된 JkMount /* example

그래야 https로 넘어온 요청이 지정된 tomcat으로 연결되는 것이다.. 
example에 대한 설명은 workers.properties 등에 기록... 





이 상황에서 

apache + 다수의 tomcat 인 경우에 도메인도 www.a.com 같이 하나만 있고 
다수의 tomcat은 port로 구별되는 경우.... 

위와 같이 설정할 필요 없이 (ssl.conf 사용),
기존에 apache + tomcat 연동에 사용한 설정을 이용, 응용하면 된다. 


httpd.conf -----------------------------

LoadModule ssl_module modules/mod_ssl.so

#Include conf/ssl.conf

LoadModule jk_module modules/mod_jk-1.2.28-httpd-2.0.52.so

<IfModule mod_jk.c>

    JkWorkersFile conf/workers.properties

    JkLogFile logs/mod_jk_new.log
    JkLogLevel error
    JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
    JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
    JkRequestLogFormat "%w %V %T"

</IfModule>


Listen 80
Listen 443
Listen 7301
Listen 7302
NameVirtualHost *:80
NameVirtualHost *:443
NameVirtualHost *:7301
NameVirtualHost *:7302

<VirtualHost *:80>
   ServerName www.a.com
   Redirect permanent / https://www.a.com
</VirtualHost>

<VirtualHost *:443>
  ServerName www.a.com:443
  JkMount /* example

  SSLEngine on

  SSLProtocol all -SSLv2 -SSLv3
  SSLCipherSuite HIGH:MEDIUM:!SSLv2:!PSK:!SRP:!ADH:!AECDH

  SSLCertificateFile conf/ssl/cert.pem
  SSLCertificateKeyFile conf/ssl/newkey.pem
  SSLCACertificateFile conf/ssl/name-Chain.pem
</VirtualHost>

<VirtualHost *:7301>
  ServerName www.a.com:7301
  JkMount /* example1

  SSLEngine on

  SSLProtocol all -SSLv2 -SSLv3
  SSLCipherSuite HIGH:MEDIUM:!SSLv2:!PSK:!SRP:!ADH:!AECDH

  SSLCertificateFile conf/ssl/cert.pem
  SSLCertificateKeyFile conf/ssl/newkey.pem
  SSLCACertificateFile conf/ssl/name-Chain.pem
</VirtualHost>

<VirtualHost *:7302>
  ServerName www.a.com:7302
  JkMount /* example2

  SSLEngine on

  SSLProtocol all -SSLv2 -SSLv3
  SSLCipherSuite HIGH:MEDIUM:!SSLv2:!PSK:!SRP:!ADH:!AECDH

  SSLCertificateFile conf/ssl/cert.pem
  SSLCertificateKeyFile conf/ssl/newkey.pem
  SSLCACertificateFile conf/ssl/name-Chain.pem
</VirtualHost>

80으로 들어오면 https 를 이용하도록 redirect 되어 있고,
443 포트로 들어오면 (https) 기존에 80 포트에 세팅된것과 동일하게 세팅하되
SSL 설정만 추가되면 되는 것이다..

그외에 7301이나 7302 포트의 경우에도 
마찬가지로 기존의 설정에 SSL 설정만 추가하면 정상적으로 SSL 동작 한다.. 

이해 되는가?? 

당연한거다... 보면..
근데 막상 세팅을 하는 중에는 이렇게 응용해내기가 쉽지 않는거 같다..
(물론,, 창의력, 응용력 떨어지는 나만의 이야기일 수도 있다..;;; )

암튼,
오랜만에 재미있는 시간을 보냈다.... 허허허...;;;


덧글

댓글 입력 영역