네크워크 공부

WSL Ubuntu와 Windows 11 환경에서 Squid SSL Inspection과 mitmproxy를 구축한 과정

otopligrm 2026. 4. 7. 21:19

프록시 서버 + 트래픽 수집 구간을 만들기 위한 작업을 하였습니다.

실습 내용을 정리하고 다시 공부를하면서도 느끼는것은

프록시 서버를 띄우는것도 중요하지만 HTTPS로 암호화된 웹 요청이 

실제로 어떤 구조로 오는지 확인을 하고, 그리고 프록시가 중간에서 

역할을 하는지에 대해서 이해는것이 가장 중요하다고 생각합니다.


배경

가장 중요한건 SSL Inspection이라고 생각합니다.

SSL Inspection에 대해서는 제가 따로 정리해 놓은 글이 있습니다

HTTPS는 암호화되어 있기 때문에 Squid의 SSL Bump 기능을 사용해

프록시가 HTTPS 통신을 중간에서 해독할 수 있도록 구성해야 했습니다.

이 작업이 가능하려면 프록시가 각 사이트에 대한 인증서를 대신 만들어 줄 수 있어야 하고,

클라이언트는 그 인증서를 신뢰해야합니다.

 

결국 이 실습은 프록시 설치가 아니라,

프록시를 하나의 내부 인증 기관처럼 동작시키는 과정이라고 볼 수 있습니다.

 


squid-openssl 설치

 

sudo apt update
sudo apt install squid-openssl

 

중요한 것은 그냥 squid가 아니라 squid-openssl을 설치했다는 것입니다.

그 이유는 제가 사용하려는 기능이 단순 프록시 기능이 아니라 SSL Bump,

HTTPS를 중간에서 처리하는 기능이었기 때문이다.

반드시 squid-openssl 버전을 설치해야

SSL Bump 기능 사용이 가능하다고 정리되어 있습니다.

HTTPS를 다루지 않을 것이라면 일반 squid도 충분할 수 있지만,

저는 중간에서 TLS를 끊고 내부 내용을 봐야 했기 때문에

OpenSSL 지원이 포함된 버전이 필요했습니다. 

 

TLS를 끊는다는 표현에 대한 정리를 해놓았습니다

https://otopligrm.tistory.com/37

 


내부 CA 인증서를 직접 생성

 

Squid로 HTTPS를 들여다보려면,

프록시가 클라이언트와 서버 사이에서 클라이언트에게는 서버인 척,

실제 서버에게는 클라이언트인 척 동작해야합니다.

그런데 브라우저는 아무 인증서나 믿지 않습니다.

예를 들어 사용자가 chatgpt.com에 접속했는데,

프록시가 그 사이트 대신 인증서를 내밀면 브라우저는 당연히

이 인증서 발급자는 누구인지를 확인합니다.

 

그래서 이 문제를 해결하기 위해 내부 CA 인증서를 직접 생성합니다.

먼저 인증서 파일을 저장할 디렉토리를 만들고 권한을 설정했습니다.

 

sudo mkdir -p /etc/squid/ssl_cert

sudo chown -R proxy:proxy /etc/squid/ssl_cert

sudo chmod 700 /etc/squid/ssl_cert

 
 

이 작업을 한 이유는 보안 때문입니다.

일단 인증서? 대충 이름만 들어도 굉장히 중요해보입니다.

근데이 디렉토리 안에는 나중에 CA 개인키가 들어가는데,

이 키는 프록시가 각 사이트의 인증서를 대신 만들어 줄 때 사용하는

매우 중요한 정보입니다. 그래서 Squid가 동작하는 proxy 계정이 접근할 수 있도록

소유권을 주고, 다른 사용자는 접근하지 못하도록 700 권한으로 제한한 것입니다.

만약 이 개인키가 유출되면 그냥 아무래도 큰일이납니다.

인증서 디렉토리 권한 설정은 선택이 아니라 거의 필수라고 볼 수 있습니다.


CA인증서와 키

 
그다음 실제로 키와 루트 CA 인증서를 만들었습니다.
 
 
openssl genrsa -out /etc/squid/ssl_cert/myCA.key 4096
sudo openssl req -new -x509 -days 3650 -key /etc/squid/ssl_cert/myCA.key -out /etc/squid/ssl_cert/myCA.crt
 
 

여기서 myCA.key는 비밀키이면서 루트키입니다 

myCA.crt는  myCA.key로 만들어진 공개 인증서입니다.

 

 

비밀키와 루트키는 프록시가 사이트별 인증서를 발급할 때 서명하는 데 사용하고,

(안감 도장마냥 결제 서류에 최종 도장을 찍는 느낌입니다.)

  • 비밀키같은 경우 프록시 서버만 갖고 있어야합니다.

 

공개 인증서는 나중에 Windows에 설치해서 이 CA가 발급한 인증서는 믿겠다.

라고 등록하는 데 사용합니다.

즉, 프록시가 가짜 인증서를 만들어도 브라우저가 그것을 정상으로 인식하게 하려면,

이 내부 CA를 먼저 신뢰하게 만들어야 한다.

왜냐! CA가 인증서를 발급하니까 당연히 CA를 먼저 믿어야겠죠?

 

그리고 -x509 -days 3650은 자체 서명된 루트 CA 인증서를

오랜 기간 사용할 수 있도록 생성하는 의미입니다.

인증서 생성 과정에서 국가 코드, 지역, 조직명, Common Name 등을 입력하는 이유는

암호화 강도 때문이 아니라,인증서의 주체 정보를 명확하게 표시하기 위함입니다.

나중에 Windows 인증서 저장소에서 이 인증서를 보고

내가 만든 내부 CA이네....라고 식별할 수 있게됩니다.

 

생성 후에는 아래처럼 파일이 생겼는지 확인했습니다.

 

sudo ls /etc/squid/ssl_cert

 

잘 되었다면 myCA.key, myCA.crt가 보여야합니다.

이 확인 과정이 중요한 이유는 이후 모든 설정이 이 파일들을 경로로 참조하기 때문입니다.

 

 

 

 

 

'네크워크 공부' 카테고리의 다른 글

RDP와VNC  (0) 2026.04.12
TLS에 대하여  (0) 2026.04.07
Rocky Linux 기반 서버 구축 및 네트워크 초기 설정  (0) 2026.03.31
가상 데스크톱 인프라(VDI) 개념  (0) 2026.03.08
Proxy(프록시)에 대하여  (2) 2026.03.07