- 사전준비
- Wireshark 를 적절한 PC에 설치합니다. (pcap 포함)
- 장비에서 원하는 TCP 연결 포트에 대한 캡쳐를 tcpdump를 이용하여 캡쳐합니다.
# tcpdump 'tcp port <캡쳐할 TCP 포트번호>' -i <캡쳐할 인터페이스명> -w <캡쳐된 내용을 저장할 pcap 파일 저장경로>
=> 만약 캡쳐할 인터페이스명을 모르거나 여러개인 경우 any 로 지정할 수 있습니다. => '-i any'
예) https://:8443 에 대한 캡쳐
# tcpdump 'tcp port 8443' -i eth1 -w /tmp/mytrace.pcap
- tcpdump 캡쳐준비가 되면 실제 연결을 수행합니다. (정확히는 첫 연결부가 캡쳐되어야 합니다.)
- 캡쳐된 파일은 wireshark 가 설치된 PC로 다운로드 받습니다.
- Wireshark로 캡쳐된 pcap 파일을 Open 합니다.
- (중요) Wireshark 의 "Analyze > Decode As"를 선택하고 "Current" 항목에 "HTTPS"인 경우 "HTTP" 검색 후 "SSL"검색하여 확인을 누릅니다.
- 이제 캡쳐된 내용이 TLS 해석된 사항으로 보이게 됩니다. 마찬가지로 "SSH"인 경우 "SSH" 검색 후 "SSL"검색하여 확인 누르는 식으로 진행할 수 있습니다.
- Decode As 를 잘 선택해야지만 올바른 해석뷰가 보입니다. 이는 Application layer 이기 때문에 Wireshark가 직접 판단할 수 없기 때문에 사용자가 지정해야 합니다.
- 이제 "Info" 항목에 "Client Hello" 인 부분을 찾아서 세부 내용으로 "Cipher Suites"를 찾아보면 Client 에서 지원가능한 목록이 확인됩니다.
- 그리고 "Info"항목에 "Server Hello"인 부분을 찾아서 "Cipher Suites"를 보면 최종 서버로부터 선택된 알고리즘이 확인 가능합니다.
- 아래 그림에서 보면 우리 장비의 웹 서버측에서는 Server Hello 에서 AES128GCM-SHA256 이 선택되었다는 것을 알 수 있습니다.
[PNG image (325.76 KB)]
tshark -nr mytrace.pcap -Y "ssl.handshake.ciphersuites" -Vx > ssl.output.txt
Secure Sockets Layer
SSL Record Layer: Handshake
Protocol: Client Hello
Content Type: Handshake (22)
Version: TLS 1.0 (0x0301)
Length: 512
Handshake Protocol: Client Hello
Handshake Type: Client Hello (1)
Length: 508
Version: TLS 1.2 (0x0303)
Random
GMT Unix Time: Jun 28, 2097 09:17:21.000000000 W. Europe Daylight Time
Random Bytes: 577f9fb99f0e042633046e9b969fd957b903edb4bbb77449...
Session ID Length: 32
Session ID: 888489fa25a177efb30c21cc89b6e447ae680357a0b762b6...
Cipher Suites Length: 32
Cipher Suites (16 suites)
Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b)
Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)
Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (0xc00a)
Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (0xc009)
Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013)
Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014)