Fiddler4 프록시
Fiddler4 프록시 소개
단말에서 송수신하는 HTTP(S) 패킷을 조회하는 데스크톱 응용입니다. 흔히 보는 브라우저 개발자 툴, 네트워크 분석 도구과 흡사합니다.
차이점은 해당 데스크탑을 포워드 프록시 서버로 만들어 준다는 점입니다.
- FIddler4를 켜면 기본적으로 8888번 포트로 프록시 서버가 실행됩니다.
- 내 스마트폰의 네트워크 설정에서 본인 데스크탑을 프록시로 지정하면, 폰을 오고가는 HTTP(S) 패킷을 디버깅 할 수 있습니다. 이것이 제가 FIddler4를 쓰는 주 사용처입니다.
한 편, 오고 가는 패킷을 인터셉트하여 커스터마이징 하는 기능도 제공하고 있습니다. 엄청 재밌는 기능이에요.
웹 페이지의 i18n을 테스트할 때 리퀘스트의 로케일을 ko-KR에서 ja-JP로 덮어 씌우는 등... 활용처가 있습니다.
이런 Fidder4의 다양한 기능과 UI에 의지하며 스프링 RestTemplate이 타사 API와 주고 받는 요청을 디버깅하고자 했습니다. JVM의 HTTP 요청이 프록시 서버를 거쳐 다니도록 하면 될 일입니다. 이렇게 하면 자바 웹 클라이언트(예를 들어, RestTemplate)가 송수신하는 패킷을 들여다 볼 수 있습니다.
JVM 發 요청이 프록시를 거쳐가도록 설정
(링크 글의 내용을 옮겨왔습니다. )
피들러는 프로그램을 켜면 자동으로 8888번 포트에 프록시 서버를 엽니다. 그럼 바로 HTTP 패킷을 엿볼 수 있게 되는데요.
하지만 HTTPS 패킷을 보려면 인증서가 필요하죠?
- 상대 측 인증서를 신뢰하기 위한 CA 인증서 체인
JVM에서는 인증서 신뢰를 위한 키스토어를 생성하고, CA 인증서를 이곳에 보관합니다. 이를 위한 절차가 아래 소개됩니다.
인증서와 키스토어 생성하기
- Fiddler4> Tools> Options> HTTPS> Actions> Export Root Certificate to Desktop 클릭
- CMD 열기
- echo %JAVA_HOME%
- %JAVA_HOME%> bin 폴더 이동> keytool 명령어로 키 스토어 생성 (1단계에서 만든 인증서 번들 필요함)
keytool.exe -import -file C:\Users\\\Desktop\\FiddlerRoot.cer -keystore FiddlerKeystore -alias Fiddler
- 키스토어 비밀번호 설정 후 인증서 신뢰 Y
JVM과 프록시 서버 간 연결 설정
방법1. 실행 옵션 넣어주기
JVM 실행 시에 실행 옵션을 주어 프록시 서버와의 연결을 설정을 할 수 있습니다. 일반적으로 IDE에서 실행 환경 설정이 가능합니다. 아래 옵션들을 입력해 주면 됩니다.
-DproxySet=true
-DproxyHost=127.0.0.1
-DproxyPort=8888
-Djavax.net.ssl.trustStore="path\to\java_home\bin\FiddlerKeyStore"
-Djavax.net.ssl.trustStorePassword="password_used_during_keystore_creation"
방법2. System.property 호출로 넣어주기
자바 코드로 프록시 서버를 설정해 보겠습니다. 실행 옵션을 부여하는 것 대신, 코드에서 System.setProperty()
를 호출하여도 됩니다. 스프링 프레임워크를 사용한다면 프록시 설정 빈을 만들어 부트스트랩 하실 수 있겠습니다.
[ProxyEnabler.java] 파일
@Profile("proxy")
@Component
public class ProxyEnabler {
@PostConstruct
void enableProxy() {
Properties props = new Properties();
try {
props.load(new ClassPathResource("proxy-config.properties").getInputStream());
System.setProperties(props);
} catch (IOException e) {
e.printStackTrace();
}
}
}
스프링 컨텍스트가 ProxyEnabler
빈을 생성하게 되면, 프로퍼티 파일을 읽어와서 시스템 프로퍼티로 옮겨주게 됩니다.
그럼 JVM을 오가는 패킷을 Fiddler4가 볼 수 있습니다!
[proxy-config.properties] 파일
이 때 프로퍼티 파일의 내용은 위에서 본 JVM 실행 옵션과 동일한 것들입니다.
http.proxyHost=127.0.0.1
https.proxyHost=127.0.0.1
http.proxyPort=8888
https.proxyPort=8888
javax.net.ssl.trustStore=C:\\Users\\wnwoq\\.jdks\\azul-1.8.0_275\\bin\\FiddlerKeystore
javax.net.ssl.trustStorePassword=password
설정 끝
이제 JVM 측이 생성하고 수신하는 HTTP 패킷은 Fiddler4를 거쳐갑니다.
한 번 RestTemplate로 웹 API 요청을 날려 보았습니다.
해당 요청들이 피들러 프록시에 캡쳐되는 것을 확인할 수 있습니다.
'웹 개발 > 스프링 프레임워크' 카테고리의 다른 글
[스프링MVC] javax.servlet.http.Part가 파일을 받지 못할 때 (0) | 2021.12.15 |
---|---|
[스프링MVC] MultipartFile말고 Part로 파일 업로드 - 주의사항 있음 (0) | 2021.12.15 |
[스프링 Web] 웹 API 호출 이야기 - RestTemplate을 사용하는 서비스 구조와 구현 (0) | 2021.12.14 |
[스프링MVC] 어노테이션 이야기 - REST와 @ResponseBody (0) | 2021.12.14 |
[스프링] 다양한 작업 실행 전략 이야기 - 스케줄링 및 비동기 실행 (0) | 2021.12.14 |