시작하기 전에
현재의 분산 환경에서는 네트워크 통신이 포함된 시스템을 개발하는 것이 매우 일반적인 현상이다. 이러한 시스템을 개발하는 과정에서는 소프트웨어의 성능을 측정하거나 디버깅하는 작업을 통해서는 조사하기 어려운 통신 문제가 발생할 수 있다. 이런 때에는 시스템의 모든 네트워크 트래픽을 캡처하여 읽을 수 있게 표시하는 Wireshark와 같은 도구를 고려해 볼 필요가 있다. 이 도구는 문제를 해결하는 데 필요한 통찰력을 제공하곤 한다. 해당 시스템에서 통신을 보호하기 위해 SSL을 사용하는 경우에도 네트워크 트래픽을 캡처할 수 있지만, 캡처한 데이터가 모두 암호화되어 있기 때문에 개발자가 유용한 정보를 얻을 수 없다. 다행히도, Wireshark에는 조건이 맞을 경우에 캡처한 트래픽을 복호화할 수 있는 SSL Dissector가 함께 제공된다. 이 튜토리얼에서는 Tomcat을 서버로, 웹 브라우저를 클라이언트로 사용하여 이러한 조건을 설정하는 방법을 단계별로 설명한다.
이 튜토리얼을 마칠 즈음에는 Wireshark SSL Dissector를 사용하기 전에 충족시켜야 하는 다양한 조건을 이해하게 된다. 더불어, 이러한 조건을 조정하여 Tomcat을 설치하는 과정에서 조건이 충족되게 할 수 있다.
네트워크 통신 메커니즘을 기본적으로 이해하고 있다고 가정한다. Tomcat과 Wireshark를 모두 다뤄본 적이 있으면 유리하지만 그렇지 않더라도 아무런 문제가 없다. 특히 이 튜토리얼에서는 Wireshark가 올바르게 구성되어 있다고 가정하여 Wireshark를 사용하는 방법에 관해서는 깊이 다루지 않는다.
참고: 이 튜토리얼에서는 이러한 명령 세트가 작동하는 이유나 이러한 명령을 실행했을 때 나타날 수 있는 차이에 대한 고려사항은 다루지 않는다. 그 대신 개발 환경에서 네트워크 트래픽을 기록하고 디코드할 수 있게 하는 데 그 목적이 있다. 여기에서 수행한 절차와 생성된 일부 암호화 아티팩트는 보안에 매우 취약하며 따라서 프로덕션 환경에는 적용하지 말아야 한다.
이 튜토리얼에서는 독자가 Windows®를 사용하고 있다고 가정한다. 이 튜토리얼을 따라하려면 다음과 같은 소프트웨어를 설치해야 한다. (다운로드 사이트는 참고자료를 참조한다.)
- Tomcat 5.5
- Tomcat에 적합한 JVM
- Wireshark — 이 튜토리얼에서는 Wireshark 버전 1.2.2를 사용한다. 다운로드한 Wireshark는 반드시 GnuTLS와 Gcrypt와 함께 컴파일해야 한다. 이것은 Wireshark의 "About" 창에서 확인할 수 있다.
- openssl이 포함된 Cygwin — 이 튜토리얼에서는 openssl 버전 0.9.8i를 사용한다.
- Jetty — 이 튜토리얼에서는 버전 6.1.21을 사용한다. 기타 최신 버전과 이전 버전도 작동할 수 있지만 이 소프트웨어에 안에 있는 필수 클래스 파일의 위치가 변경되었을 수 있다.
이외에도 웹 브라우저를 사용하여 Tomcat 서버를 액세스할 두 번째 시스템이 필요하다.
Wireshark를 이용하여 보안 연결을 복호화하려면 다음과 같은 주요 조건이 충족되어야 한다.
- 서버 인증서를 사용하여 Tomcat을 구성해야 한다.
- 클라이언트와 서버 간(브라우저 및 Tomcat)에 사용된 특정 암호는 Wireshark의 복호화 방법을 따라야 한다.
- Wireshark가 서버 인증서와 관련된 개인 키에 액세스할수 있어야 한다.
이 튜토리얼에서는 이와 같은 단계를 다음과 같은 순서로 살펴보며 Tomcat 서버로 연결되는 브라우저를 사용하여 요청과 응답을 캡처하여 Wireshark에서 시험한다.
이 튜토리얼에서는 별도의 세 가지 비밀번호를 정의한다. 이 튜토리얼에서는 각 비밀번호를 신중하게 지정하고 참조하지만, 편리하게 세 가지 모두 동일한 비밀번호를 사용할 수도 있다.
