2015. 1. 21. 13:37

SSL nego 중 서버가 클라이언트로 인증서(certificate)를 주게 된다.

서버나 클라이언트에서 인증서를 확보하지 않고 패킷 덤프에서 추출하는 방법을 기술한다.


1. wireshark로 SSL 패킷 덤프를 연다.

2. TCP 프로토콜 설정에서 "Allow subdissector to reassemble TCP streams" 옵션을 켠다.

3. SSL handshake 중 "Certificate" 가 포함된 패킷을 연다.

4. packet detail 부분에서 SSL protocol을 확장

5. "Certificate" TLS record 확장

6. "cettificate" handshake protocol 확장

7. certificates list 확장. 첫번째 certificate가 서버의 것이고 뒤에 오는 certificate은 CA 및 root CA의 것이다. certificate chaining 참조

8. 첫번째 certificate에다 오른쪽 클릭.

9. "Export selected packet bytes..." 선택. 

10. 이름 적고 세이브


여기까지 진행하면, DER format의 certificate가 추출된다.


human readable하게 바꾸기 위해서는 openssl 명령을 이용한다.


>> openssl x509 -inform der -in <파일명> -text (-onout)


많이 쓰는 PEM 방식으로 저장하려면,


>>  openssl x509 -inform der -in <파일명> -out <파일명.pem>


참고로 der과 pem은 인코딩 방식이며, 특히 pem은 ascii(base64)로 표현됨. '-- BEGIN' 으로 시작

crt, cer, key 확장자는 각각 다음과 같다.


* crt: certificate의 확장자. der 또는 pem 으로 인코딩 된다.

* cer: crt의 alterate form이며 MS convention. IE에서 인식.

* key: private 또는 public key의 확장자. crt와 마찬가지로 der 또는 pem으로 인코딩 된다.

Posted by k1rha