2010년 2월 3일 수요일

Wireshark에서 TLS/SSL 까보기

TLS/SSL 작업을 할 때 갑갑한 것 중에 하나가 - 당연하겠지만 - 트래픽 내용을 볼 수 없다는 것이다. 기껏 볼 수 있는 정보는 인증서를 포함한 몇몇 보여도 상관 없는 인증 과정 중에 일부분이다. 물론 NULL cipher를 서버와 클라이언트 모두 우선순위로 지원하도록 설정한다면, 인증이 끝난 뒤에도 트래픽을 볼 수 있지만, 그것도 최초 개발시기 이야기. 배포 바로 전에 QA하기 위한 클라이언트를 수정할 수는 없지 않은가. 클라이언트 수정 없이 패킷만 덤프해서 볼 수 있으면 얼마나 좋을까...

만약 서버측 PrivateKey를 알고 있다면, 트래픽을 까서 볼 수 있다. (이래서 PrivateKey 관리가 중요하다.) ssldump라는 유틸리티도 있지만, GUI를 깔꼼하게 사용할 수 있는 Wireshark에도 TLS/SSL을 까서 볼 수 있는 기능을 제공한다. 일단 Wireshark는 암호가 걸리지 않은 PEM규격 PrivateKey만 읽을 수 있으니, 암호가 걸린 PrivateKey를 변환해서 보도록 하자. 변환 방법은 공식위키 사이트를 애용해보자. (추측컨데 TLS/SSL 네고과정을 PrivateKey를 이용해서 SessionKey를 비롯한 패킷을 깔 때 필요한 정보를 얻어내어 덤프한 것을 바로 까서 보여주는 듯 하다. Proxy/MITM attack을 예상했는데, 그건 아닌 듯.)

키를 준비했다면, Edit-Preference를 들어가자.



왼쪽에 Protocol 트리가 보일 것이고, 거기에서 SSL을 선택하자.





여기서부터 중요한데, 이 부분이 Wireshark에서 불편한 부분이다. Wireshark에서 이 부분을 살짝 수정해준다면 좋으련만... 오른쪽 속성창에 RSA key list 항목이 보일 것이고, 그곳에 아래와 같은 형식으로 내용을 채워넣으면 패킷을 까볼 수 있다.

<IP>,<PORT>,<PROTOCOL>,<KEY_FILE_PATH>;<반복>

IP, PORT, PROTOCOL은 해당 키를 적용할 정보인데, PROTOCOL은 적당히 붙이도록 하자. KEY_FILE_PATH에는 암호가 없는 PEM형식 PrivateKey를 저장한 위치를 지정한다. 더 넣고 싶으면, 세미콜론을 붙이고 앞에 형식을 반복하면 추가할 수 있다. 예를 들면 아래와 같다.

127.0.0.1,7000,SSL,C:\mykey.pem;192.168.0.5,8000,SSL,C:\yourkey.pem

모두 준비하였으면, 패킷을 덤프하고, 알맞게 까여진(?) 패킷을 즐기면(?) 된다. 잇힝~*