블로그 이미지
키에티스트
그냥 저냥 이거 저거

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Tag cloud

Tistory Cumulus Flash tag cloud by BLUEnLIVE requires Flash Player 9 or better.

'Tomcat'에 해당되는 글 1

  1. 2012.11.14 SSL 통신을 캡처하기위한 Tomcat 구성1
2012. 11. 14. 15:48 개발

SSL 통신을 캡처하기위한 Tomcat 구성


보안 통신 디버깅하기

Dominic Tulley, Leading Architect, DOORS Development Lab, IBM  

요약:  클라이언트와 서버 간의 통신 문제를 조사하는 과정은 가장 좋은 때에도 성가신 일이며 SSL로 통신을 보호하면 이 과정은 더욱 어려워집니다. 이 튜토리얼에서는 캡처한 통신을 Wireshark의 SSL Dissector가 복호화할 수 있도록 Tomcat과 Wireshark를 구성하는 단계를 살펴봅니다. 이렇게 하고 나면 마치 SSL이 관련되지 않은 것처럼 조사할 수 있습니다.

개인 키와 인증서를 작성한다.

먼저, openssl을 사용하여 개인 키를 새로 작성하는 방법을 살펴보자. Cygwin을 시작하고 다음 명령을 실행한다.

openssl genrsa -des3 -out ./serverkey.pem 2048 
            

생성된 pem 파일에 해당하는 암호구를 입력하라는 메시지가 표시된다. 이 튜토리얼 뒷부분에서는 이 암호구를 <서버 키 암호구>로 참조한다. 이 암호구를 입력하여 확인이 되면 명령이 완료되고 개인 키가 새로 생성되어 serverkey.pem 파일에 저장된다.

이제 다음과 같은 명령을 실행한다. (튜토리얼 템플릿에 제한되어 한 행에 입력하지 못했지만, 이 명령은 모두 한 행에 입력해야 한다는 점에 주의하자.)

openssl req -new -x509 -key ./serverkey.pem -out ./servercert.pem -subj 
'/C=GB/ST=XX/O="My Org"/CN="Wireshark dissectable Cert"'

이 명령을 실행하면 암호구를 입력하라는 메시지가 표시된다. 그러면 앞서 선택한 <서버 키 암호구>를 입력해야 한다. 이렇게 하면 앞서 생성한 개인 키에 대응하는 서버 인증서가 servercert.pem 파일에 저장된다.

인증서를 JKS 키 저장소로 변환

불행히도 앞 단계에서 생성된 서버 인증서는 Tomcat에 필요한 형식이 아니다. 따라서 이 인증서를 JKS 키 저장소에 적합한 형식으로 변환해야 한다. 첫 번째 단계에서는 Cygwin에서 실행되는 다음 명령을 사용하여 인증서를 PKCS12 형식으로 변환한다.

openssl pkcs12 -export -in ./servercert.pem -inkey ./serverkey.pem  
-certfile ./servercert.pem -out ./servercert.p12 -name "cert-name"
            

이 시점에서 암호구를 입력하라는 메시지가 다시 표시되면 <서버 키 암호구>를 입력한다. 그러면  암호구를 입력하라는 메시지가 표시된다. 이 암호구는 이 튜토리얼 뒷부분에서 <서버 p12 암호구>로 참조하게 된다. 이 새 암호구를 입력하고 확인이 되면 명령이 완료되고 servercert.p12 파일이 새로 작성된다.

다음에는 Jetty 배포판에 포함된 유틸리키를 사용하여 이 인증서를 JKS 키 저장소로 변환한다. 이 클래스는 Jetty 버전마다 다른 jar 파일 안에 있거나 배포판의 다양한 패키지 아래에 있다. Jetty 6.1.21 배포판에서는 필수 클래스가 org.mortbay.jetty.security 패키지에 있는 기본 jetty-6.1.21 jar 파일에 존재한다. 이 jar 파일이 현재 디렉토리에 있다고 가정할 때, 실행할 명령은 다음과 같다.

java -classpath ./jetty-6.1.21.jar org.mortbay.jetty.security.PKCS12Import 
./server.p12 ./dissectable.keystore
            

이 명령을 실행하면 먼저, 입력 키 저장소 암호구를 입력하라는 메시지가 표시된다. 이 암호구는 앞서 선택한 <서버 p12 암호구>이다. 그러면 새 키 저장소에 맞는 새로운 암호구를 선택하라는 메시지가 표시된다. 나중에는 이 암호구를 <서버 jks 암호구>로 참조한다. 이 암호구를 확인하라는 메시지는 표시되지 않으므로 주의해서 올바르게 입력해야 한다.

참고: PKCS12Import 클래스는 버전마다 다른 jar 파일 안에 있거나 다른 패키지 아래에 있기도 하므로 동일한 Jetty 버전을 명확하게 사용하지 않으면 안 된다.

개인 키 보호 해제

openssl과 관련하여 마지막으로 해야 할 작업은 개인 키를 보호하는 데 사용할 암호구를 제거하는 일이다. Wireshark가 이 키 파일을 올바르게 읽을 수 있도록 하려면 이 작업을 반드시 수행해야 한다. Cygwin에서 다음 명령을 실행하면 키 파일에서 암호구가 보호되지 않는다.

openssl rsa –in ./serverkey.pem –out ./open-private-key.pem

이 명령을 실행하면 암호구를 입력하라는 메시지가 표시된다. 앞서 선택한 <서버 키 암호구>를 입력한다. 이 명령이 완료되면 보호되지 않은 개인 키 사본이 포함된 open-private-key.pem 파일이 새로 작성된다.


출처 : http://www.ibm.com/developerworks/kr/web/tutorials/wa-tomcat/section2.html#ibm-pcon



Tomcat 구성

이제까지 필요한 암호화 아티팩트를 살펴보았으므로 이 아티팩트를 사용할 Tomcat을 구성하자. 다음과 같은 세 가지 구성 단계를 완료해야 한다.

  • dissectable.keystore를 Tomcat 루트 디렉토리에 복사한다.
  • 생성한 서버 인증서를 사용하도록 Tomcat에 명령한다.
  • 암호 세트를 Wireshark에서 처리할 수 있는 암호로 제한한다.

마지막 두 가지 조치는 동일한 파일을 편집하는 과정을 통해 이루어진다. Tomcat 설치판에서 conf 디렉토리를 탐색하여 server.xml파일을 편집한다. 이 파일에서 목록 1과 같은 SSL 커텍터 정의 섹션을 찾는다.


목록 1. 기본 SSL 커넥터 정의
    <!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
    <!--
    <Connector port="8443" 
        maxHttpHeaderSize="8192"
        maxThreads="150"
        minSpareThreads="25" 
        maxSpareThreads="75"       
        enableLookups="false" 
        disableUploadTimeout="true"          
        acceptCount="100" 
        scheme="https" secure="true"           
        clientAuth="false" 
        sslProtocol="TLS" />
    -->

이 XML 코드가 목록 2에 있는 코드와 같아지도록 두 번째 행과 마지막 행을 제거한다.


목록 2. 주석을 제거한 SSL 커텍터 정의
    <!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
    <Connector 
        port="8443" 
        maxHttpHeaderSize="8192"      
        maxThreads="150" 
        minSpareThreads="25" 
        maxSpareThreads="75"     
        enableLookups="false" 
        disableUploadTimeout="true"        
        acceptCount="100" 
        scheme="https" 
        secure="true"       
        clientAuth="false" 
        sslProtocol="TLS" 
    />

그런 다음, 아래에 굵은체로 된 텍스트를 포함하도록 커넥터 요소를 수정한다. 여기에서는 dissectable.keystore 파일을 Tomcat 설치판 루트 디렉토리(LICENSE 및 NOTICE 파일이 있는 디렉토리)에 복사한다고 가정한다. 아래 예제의 "password here" 부분에 앞서 선택한 <jks 서버 암호구>를 입력해야 한다.


목록 3. 수정된 SSL 커넥터 정의
    <!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
    <Connector 
        port="8443" 
        maxHttpHeaderSize="8192"      
        maxThreads="150" 
        minSpareThreads="25" 
        maxSpareThreads="75"     
        enableLookups="false" 
        disableUploadTimeout="true"        
        acceptCount="100" 
        scheme="https" 
        secure="true"       
        clientAuth="false" 
        sslProtocol="TLS" 
 keystoreFile="dissectable.keystore"
        keystorePass="password here"
        ciphers="SSL_RSA_WITH_RC4_128_SHA,
 TLS_RSA_WITH_AES_128_CBC_SHA, 
 SSL_RSA_WITH_3DES_EDE_CBC_SHA"
    />
           

Tomcat 구성 확인

이제 Tomcat이 올바르게 구성되었는지 확인한다. 이렇게 하려면 bin 디렉토리에서 startup.bat 스크립트를 실행하면 된다. 모든 것을 올바르게 구성했고 dissectable.keystore 파일을 올바른 위치에 복사했으면 Tomcat이 아무런 오류 없이 시작된다.

Tomcat이 올바르게 시작하지 않고 화면에 오류가 표시되거나 단순히 시작에 실패하면 XML 코드를 편집하는 과정에서 오자가 입력되지 않았는지, 그리고 키 저장소 파일이 올바른 위치에 있는지 재확인해야 한다.

일단 Tomcat이 시작되면 웹 브라우저에서 https://localhost:8443/ URL을 탐색하여 SSL 연결이 작동하는지 확인할 수 있다. 이렇게 하면 처음에는 서버 인증서에 대해 문제를 제기하면서 이 서버를 신뢰할 것인지 묻는 메시지가 표시된다. (정확한 용어는 사용하는 브라우저에 따라 다르다.) 이러한 현상은 앞서 작성한 자기 서명 인증서로 인한 것이므로 해당 서버를 믿는다고 응답해야 한다. 그러면 Tomcat 시작 페이지가 표시된다. 이렇게 되면 보안 연결을 지원하도록 Tomcat을 올바르게 구성한 것이다.


출처 : http://www.ibm.com/developerworks/kr/web/tutorials/wa-tomcat/section2.html


'개발' 카테고리의 다른 글

SSL 패킷 캡처를 위한 wireshark 설정  (0) 2012.11.14
winapi wininet 사용하여 https post 날리기  (0) 2012.11.13
PostgreSQL ALTER TABLE  (0) 2010.11.02
posted by 키에티스트
prev 1 next