포트 443이란? HTTPS 포트 443 기술 가이드
포트 443에 대해 들어보신 적이 있으신가요? 보안과 관련된 용어라는 생각은 들지만, 정확히 무엇을 의미하는 지 감이 오지 않을 수 있습니다. SSL, HTTPS랑은 또 어떤 관련이 있는지 헷갈리기만 합니다. 사실 이 포트는 VPN에서도 보안을 위하여 흔히 사용되고 있습니다. 이쯤 되면 어떤 건지 슬슬 알고 싶지 않으신가요? 지금 여기서 443 포트가 무엇인지, 왜 필요한지, 작동 기술에 대해서도 함께 파헤쳐 보겠습니다.
목차
목차
포트 443이란 암호화 데이터가 전송되고 수신되는 가상의 지점을 말합니다. 통신을 할 때 IP 주소와 더불어 포트 번호도 있어야 비로소 데이터를 주고 받을 수 있습니다. 포트 번호에는 여러가지가 있지만, 그 중에서 443번은 HTTPS라는 프로토콜을 이용한 암호화 통신을 할 때 사용하는 포트입니다. 웹사이트에서 일반 통신을 할때는 주로 포트 80번을 이용하는 반면에 더 강력한 보안을 원할 때는 443번을 사용하는 것입니다. 포트가 443인 트래픽은 암호화를 거치기 때문에 전송중에 혹시나 있을 수 있는 공격으로부터 보호됩니다.
HTTPS란 무엇인가요?
HTTPS(하이퍼텍스트 전송 프로토콜 보안)는 TCP/IP 프로토콜을 기반으로 하는, 웹에서 데이터를 안전하게 전송하기 위한 목적의 프로토콜입니다. 일반 웹 통신시 사용하는 HTTP 프로토콜에 SSL(Secure Socket Layer) 이나 TLS(Transport Layer Security) 인증서를 적용하여 보안을 강화하였습니다. 사실 SSL과 TLS는 서로 혼용하여 사용되는 용어입니다. TLS는 SSL를 업그레이드 한 버전으로, 최근에는 보통 TLS 기반 인증서가 사용됩니다. 하지만 업계에서는 편의상 TLS와 SSL를 모두 SSL이라고 명칭하고 있습니다.
혹시 웹 브라우저 주소창 맨 앞에 있는 자물쇠 아이콘을 본 적이 있으신가요? 이는 웹사이트 통신이 현재 HTTPS 통신으로 보호되고 있다는 것을 의미합니다. 자물쇠 아이콘을 클릭하면 SSL 인증서의 상세 정보를 열람할 수 있습니다. 또한 HTTPS통신이 적용된 도메인은 URL 앞 부분이 https://로 시작됩니다.
HTTPS 포트 443을 사용하면 무엇이 보호되나요?
포트 443은 무엇을 위한 것인가요?
앞서 말했듯이 포트 443은 HTTPS 연결을 위한 포트입니다. 웹 서버에 HTTPS 연결을 적용하면 송/수신하는 트래픽을 스니핑 공격으로부터 안전하게 지켜줍니다. 보안 연결이 적용되고 나면 로그인 정보, 신용카드 정보와 같은 금융 정보, 개인 정보 등을 모두 암호화 합니다. 그러므로 민감 정보를 포함하고 있는 전자 상거래 비즈니스 웹사이트, 은행과 같은 금융 사이트에서는 반드시 적용해야 합니다. 그 이외의 일반 웹사이트라도 로그인 정보를 보호하기 위해 꼭 SSL을 적용해야 합니다.
80번 포트인 일반 HTTP 연결만 사용할 경우에는 트래픽이 암호화 되지 않은 평문으로 표시됩니다. 누구나 마음만 먹으면 해킹이 가능해서 매우 위험합니다. 가끔 로그인 페이지 조차 보안 연결이 되지 않은 소규모 웹사이트들이 있습니다. 이는 심각한 개인 정보 유출로 이어질 수 있습니다. 민감 정보를 포함할 경우 HTTPS를 이용한 암호화 연결은 필수입니다.
포트 443을 여는 방법은 무엇입니까?
윈도우와 맥 OS 각각의 443 포트 여는 방법을 설명해 드리겠습니다. TCP UDP 포트를 열어본 경험이 있으시다면 쉽게 하실 수 있습니다.
먼저 윈도우 기준입니다.
- ‘윈도우 방화벽’으로 들어가 ‘고급 설정’을 엽니다.
- ‘인바운드 규칙’에서 ‘새 규칙’을 선택합니다.
- ‘포트’ 선택후 ‘TCP’를 선택, 포트 번호에 ‘443’을 입력하고 ‘다음’을 누릅니다.
- ‘연결 허용’을 선택하고 ‘다음’으로 넘어갑니다.
- ‘프로필’ 창에서 전체 항목을 모두 선택합니다.
- 규칙에 이름을 원하는대로 지정하고 ‘마침’을 누르면 완성입니다.
맥 OS는 다음과 같이 포트를 열 수 있습니다.
- 터미널에 들어갑니다.
- 다음을 입력합니다.
sudo nano /etc/pf.conf
- /etc/pf.conf 파일이 열렸다면 파일 하단에 다음과 같이 입력한 후 저장합니다.
pass in inet proto tcp from any to any port 443 no state
- 다시 터미널 앱을 열어서 sudo pfctl -vnf /etc/pf.conf 명령어를 입력하여 포트가 잘 열려 있는지 확인합니다.
HTTPS 통신은 항상 포트 443을 사용할까요?
아닙니다. 다른 포트 번호를 사용할 수도 있습니다. 대개 443번을 사용하지만 웹사이트에서 여러개의 SSL 인증서를 발급받는 경우 포트를 나눠서 사용하고는 합니다. 겹치지 않는다는 가정 하에 444번, 445번 등 원하는 대로 설정이 가능합니다.
포트 443에 취약점은 없나요?
보안 포트이지만 데이터가 오고가는 통로이기 때문에 여전히 취약점이 존재합니다. 포트 443 개방시 SQL 인젝션, 크로스 사이트 스크립팅, DDoS 공격 등을 당할 가능성이 있습니다. 따라서 꼭 필요한 경우에만 개방하도록 합니다.
TLS/SSL 핸드셰이크 프로세스
HTTPS 프로토콜에서는 먼저 ‘핸드셰이크’라는 프로세스를 거쳐야 클라이언트와 서버가 서로를 신뢰하고 통신을 시작합니다. 핸드셰이크라는 용어는 한국어로 악수를 의미하고 있죠. 먼저 악수를 하면서 서로를 파악하고 통신에 필요한 기본 통성명을 하는 것입니다. 아래의 프로세스를 거쳐 핸드셰이크가 이루어집니다.
- 클라이언트 쪽에서 먼저 핸드셰이크가 시작됩니다. 클라이언트가 서버에게 TLS/SSL 연결 요청을 하면서 동시에 통신에 필요한 정보도 전송을 합니다. 전송되는 정보에는 SSL/TLS 버전, 암호화 알고리즘 목록(cipher suite), 세션 ID, 브라우저가 생성한 임의의 난수 등이 있습니다.
- 서버가 요청에 응답을 하면서 자신의 정보를 클라이언트에게 제공합니다. 클라이언트와의 통신에 사용할 SSL/TLS 버전, 암호화 알고리즘(cipher suite), 서버의 공개키가 담긴 SSL 인증서를 보냅니다.
- 클라이언트는 전달받은 서버의 SSL 인증서가 믿을만 한지 검증 과정을 거칩니다. 브라우저에 내장되어 있는 CA 공개키를 이용해 암호화 된 인증서가 복호화 되는지 체크합니다.
- 또한 클라이언트는 pre master secret 이라는 난수를 생성하여 그것을 서버가 보내준 공개키로 암호화합니다. 암호화된 pre master secret은 서버로 전달됩니다.
- 서버에서는 전달된 pre master secret을 서버의 개인키를 이용하여 해독합니다.
- 서버와 클라이언트 모두가 pre master key를 이용하여 대칭 세션 키를 생성합니다. 이 때 모두 같은 결과가 나와야 합니다. 이제 같은 세션키를 서버와 클라이언트가 공유하게 되었습니다.
- 핸드셰이크 단계가 종료되었습니다. 지금부터 세션 키를 통해서 통신을 할 수 있습니다.