비단 Tomcat 의 catalina.out 뿐만 아니라 모든 생성되는 로그파일에도 적용이 가능한부분입니다.

대부분의 개발에서는 log4j, logback등의 설정을 이용해서 일자별 파일로그를 쌓긴 합니다만

이런 설정이 미적용된 시스템에서는 유용할듯 합니다.

 

linux의 /etc/logrotated.d/  디렉토리에 가면 시스템에서 관리하는 스케쥴러에 의해 로그를 관리하도록 설정이 가능합니다.

yum, syslog numad 같은 파일이 생성되어 있습니다.

이곳에 tomcat 로그용으로 하나 추가하도록 합니다. 설정은 아래것을 그대로 사용해도 무방할듯 합니다.

 

/]#cd /etc/logrotated.d

/]#cat > tomcat
 /data/was/tomcat8/logs/catalina.out{
  copytruncate
  daily
  rotate 30
  compress
  missingok
  notifempty
  delaycompress
  dateext
 }

(위에서 내용저장 후 빠져나오는 명령어는 Ctrl + d 입니다. 이후 수정은 vi로 해도 됩니다.)

 

잘 적용되는제 미리 테스트는 아래와 같이 합니다.

/]#logrotate -f /etc/logrotate.d/tomcat

아래와 같이 로그위치에 일자별 로그파일이 생성되어 있는지 확인합니다.

로그파일 생성결과

catalina.out.1 과 같은 형식으로 생성된 것은 dateext 옵션을 뺀 경우임.

 

그외 apache/logrotate를 활용하는 방법도 있는데, apache가 설치되어 있지 않아 위 방법을 적용.

 

 

 



Write your message and submit

관리하는 사이트로부터 SSL에 적용되는 암/복호화 알고리즘을 몇개 빼달라는 요청을 받았다. (SSL 적용된 Apache, Tomcat)

개발&테스트사이트 정도만 구축했던 상태라 이런 디테일한 부분은 알지 못하는데...

제외대상 Cipher명(일부) : DHE-RSA-AES128-GCM-SHA256, ....., ECDHE-RSA-AES256-GCM-SHA384

실제 적용방법은 간단하다.

Apache2.4.x ( conf.d/ssl.conf )

SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ALL:!DHE-RSA-AES128-GCM-SHA256:... :!ECDHE-RSA-AES256-GCM-SHA384:!RC4:HIGH:!MD5:!aNULL:!EDH

Tomcat8.x ( conf/server.xml )

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
    ... 중략 ...
     clientAuth="false" sslProtocol="TLS"
 ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
  TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,
  TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA"/>

하지만 이를 실제 테스트하기위한 과정이 만만치 않았다. 크게 3개의 과정으로 진행됨.

OpenSSL SSL인증서 발급 => Apache, Tomcat 설치 => 로그 및 Packet검사를 통한 적용사항 확인

1. OpenSSL 발급 ( 참고 : https://www.lesstif.com/pages/viewpage.action?pageId=6979614 )

참고한 블로그가 참 자세히 기술되어 있어 아무생각없이 그대로 따라함. 오호... 도메인만 test를 위한 임의 도메인으로 변경 (어차피 hosts 파일 수정해서 테스트할꺼임)

추가 : 위 링크를 통해 생성된 인증서는 아파치용이다. 이를 톰캣용으로 생성하는 과정은 아래와 같이 진행했다

openssl]# openssl pkcs12 -export -in /root/openssl/test-rootca.crt -inkey /root/openssl/private/test-rootca.key -out /root/openssl/tomcat/test.com.keystore -name tomcat 

 

2. Apache 및 Tomcat 설치

워낙 블로그나 참고자료가 많고, 또 개발/테스트를 위해 자주 설치하던거라 별 문제없이 패스.

apache는 yum으로 설치하고, Tomcat은 archive형태로 다운받아서 압출해제 형태로 설치완료.

하지만 여기서도 한가지 문제. 설치된 OS가 CentOS 7.0 이었고, 방화벽이 오픈되지 않아 또 구글링하여 방화벽 설정완료.

설정과정에서 처음 설정을 하다보니 시간이 오래 걸림. 특히 Apache의 ssl.conf에서 SSLCipherSuite 의 설정법을 어찌해야하는지 나와 있지 않아 느낌으로 설정. ㅎㅎㅎ(내가 봐도 참 개발자스럽지 못하다)

그중에서 처음 SSL 인증서 파일의 위치를 처음 생성한곳에 그대로 두고 진행했더니 apache가 이를 인식하지 못해 apache 설치디렉토리 내부로 옮김.
오류내용이

3. 로그확인

Apache 로그 확인을 위해서는 디폴트 설정에서 다음과 같이 변경해줘야한다.

Apache_home/conf.d/ssl.conf 설정내용

LogLevel debug
CustomLog logs/example.com-ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

정상적으로 설정이 되면 아파치 SSL요청로그는 아래와 같이 나온다.

logs/example.com-ssl_request_log내용 일부

[29/Oct/2018:08:28:00 -0700] 192.168.0.12 TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 "GET / HTTP/1.1" 4897
[29/Oct/2018:08:28:00 -0700] 192.168.0.12 TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 "GET /noindex/css/bootstrap.min.css HTTP/1.1" -
[29/Oct/2018:08:28:00 -0700] 192.168.0.12 TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 "GET /noindex/css/open-sans.css HTTP/1.1" -
[29/Oct/2018:08:28:00 -0700] 192.168.0.12 TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 "GET /images/apache_pb.gif HTTP/1.1" -

Tomcat로그를 위해서는 catalina.sh 파일의 JAVA_OPTS 부분에 -Djavax.net.debug=ssl을 추가한다.

변경된 catalina.sh 파일의 일부는 아래와 같다.

# Register custom URL handlers
# Do this here so custom URL handles (specifically 'war:...') can be used in the security policy
JAVA_OPTS="$JAVA_OPTS -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Djavax.net.debug=ssl"
# Set juli LogManager config file if it is present and an override has not been issued
if [ -z "$LOGGING_CONFIG" ]; then
... 생략 ... 

재시작 후 브라우져를 통해 호출하면 아래와 같은 로그를 확인할수 있다.

... 생략 ...
Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
Compression Method: 0
Extension renegotiation_info, renegotiated_connection: <empty>
Extension extended_master_secret
***
Cipher suite:  TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
https-jsse-nio-8443-exec-10, WRITE: TLSv1.2 Application Data, length = 84
https-jsse-nio-8443-exec-7, READ: TLSv1.2 Change Cipher Spec, length = 1
https-jsse-nio-8443-exec-7, READ: TLSv1.2 Handshake, length = 96
*** Finished
verify_data:  { 192, 181, 216, 241, 42, 135, 60, 93, 75, 149, 214, 205 }
***
CONNECTION KEYGEN:
... 이하 생략... 

다른 테스트 방법을 더 알아봐야겠으나 1차적으로 Apache, Tomcat 모두 handshake과정에서 고객사에서 요구한 알고리즘을 사용하지 않고있는것을 확인할수 있다.

Apache_tomcat Connector에서 사용하는 Protocol종류는 3가지이다.

(참고 : https://tomcat.apache.org/tomcat-8.0-doc/ssl-howto.html )

<!-- Define a HTTP/1.1 Connector on port 8443, JSSE NIO implementation -->
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
           port="8443" .../>

<!-- Define a HTTP/1.1 Connector on port 8443, JSSE NIO2 implementation -->
<Connector protocol="org.apache.coyote.http11.Http11Nio2Protocol"
           port="8443" .../>

<!-- Define a HTTP/1.1 Connector on port 8443, JSSE BIO implementation -->
<Connector protocol="org.apache.coyote.http11.Http11Protocol"
           port="8443" .../>

 

 



Write your message and submit

기본적으로 윈도우용 아파치를 구하기가 쉽지 않다.

아래 사이트에서 아파치와 톰캣연동을 위한 mod_jk를 구한다.

 

64비트용으로 다운받음

https://www.apachelounge.com/download/win64/

 

Apache2.x 를 설치한다.

다운받은 아파치를 적당한위치에 풀고 압축을 해제한다.

윈도우 서비스에 등록한다. : 서비스하지 않고 테스트용이라면 무시

 

~bin> httpd -k install

 

설치하려는 아파치가 2개이상이거나 별도의 서비스이름으로 서비스등록하고자 하다면  -n <service_name> 을 추가한다.

apache_2.4_server 라는 service 이름으로 등록하고자 한다면

~bin> httpd -k install -n apache_2.4_server

와 같이 입력한다.

 

기본 아파치가 설정정보에서 경로정도만 변경한다.

 

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

 

 - ServerRoot "C:/ADMIN_UIS/Server/Apache24"

 - Listen 80

 - ServerName admin.domain.com:80

 - <Directory "C:/Server/Apache24/htdocs">

 - ScriptAlias /cgi-bin/ "C:/Server/Apache24/cgi-bin/"

 - <Directory "c:/Server/Apache24/cgi-bin">


#####  MOD_JK 설정 추가 ####
LoadModule jk_module modules/mod_jk.so
<IfModule mod_jk.c>
  JkWorkersFile conf/workers.properties
  JkLogFile logs/mod_jk.log
  JkLogLevel info
</IfModule>

 

#vhost는 미사용이므로 일단 주석처리

 

 

------------------------------  workers.properties ---------------------------------

worker.list=tomcat_admin
worker.tomcat_admin.type=ajp13
worker.tomcat_admin.host=admin.domain.com
worker.tomcat_admin.port=8009

 

------------------------------  uriwokermap.properties ----------------------------

/*=tomcat_admin

 

https를 적용하기 위한 처리

 

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

Listen 443
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5

SSLPassPhraseDialog  builtin


SSLSessionCache none
SSLSessionCacheTimeout  300

<VirtualHost *:443>

#   General setup for the virtual host
DocumentRoot "C:/Server/Apache24/htdocs"
ServerName admin.domain.com:443
ServerAdmin admin@domain.com
ErrorLog "logs/error.log"
TransferLog "logs/access.log"

#   SSL Engine Switch:
#   Enable/Disable SSL for this virtual host.
SSLEngine on

SSLCertificateKeyFile "conf/cerFiles/key.pem"
SSLCertificateFile "conf/cerFiles/cert.pem"
SSLCertificateChainFile "conf/cerFiles/caChain.pem"
SSLCACertificateFile "conf/cerFiles/ca.pem"

 

#<FilesMatch "\.(cgi|shtml|phtml|php)$">
#    SSLOptions +StdEnvVars
#</FilesMatch>
<Directory "c:/Server/Apache24/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>

BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

#   Per-Server Logging:
#   The home of a custom SSL log file. Use this when you want a
#   compact non-error SSL logfile on a virtual host basis.
CustomLog "logs/ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>                                 

 

 

 



Write your message and submit
« PREV : 1 : 2 : 3 : NEXT »