FTPS로 FTP 파일 전송을 암호화하는 방식

FTPS의 SSL/TLS 적용 방식과 Implicit·Explicit 모드, SFTP와의 차이, 인증서와 방화벽 운영 시 유의점을 정리한다.

2026-08-14 · 최초 발행 2025-08-10

FTP 위에 암호화 계층을 얹는 방식

FTPS(File Transfer Protocol Secure)는 기존 FTP 통신에 SSL/TLS 암호화를 결합한 파일 전송 프로토콜이다. 일반 FTP는 사용자 인증 정보와 데이터를 평문으로 보내므로, 전송 경로에서 스니핑·변조·가로채기 위험이 있다. FTPS는 이 구간을 암호화해 민감한 정보와 중요 데이터를 전송할 때 사용할 수 있다.

FTP의 명령과 기능을 유지하면서 보안 계층을 추가한다는 점이 FTPS의 출발점이다. 연결 방식은 암시적 모드와 명시적 모드로 구분된다.

SSL/TLS가 제공하는 보호 범위

SSL(Secure Sockets Layer)과 후속 프로토콜인 TLS(Transport Layer Security)는 FTPS 통신의 보안 기반이다. 클라이언트와 서버 사이의 데이터를 암호화해 기밀성을 제공하고, 디지털 인증서로 서버를 인증한다. 필요에 따라 클라이언트 인증도 가능하다.

메시지 무결성 검사 역시 SSL/TLS가 담당한다. 전송 중 데이터가 바뀌는 것을 감지하고 방지하는 역할이다.

SSL/TLS 통신은 다음 계층과 프로토콜로 구성된다.

  • Record Protocol: SSL/TLS 통신의 기본 계층으로 메시지 압축, 암호화, MAC(Message Authentication Code) 생성을 맡는다.
  • Handshake Protocol: 암호화 방식, 키 교환 방법, 인증 알고리즘을 클라이언트와 서버가 협상한다.
  • Change Cipher Spec Protocol: 협상한 암호화 파라미터를 실제 통신에 적용할 시점을 알린다.
  • Alert Protocol: 오류와 경고 메시지를 전달한다.
  • Application Data Protocol: 암호화된 응용 프로그램 데이터를 전송한다.

연결을 시작하는 시점에 따른 차이

Implicit FTPS는 연결이 시작되는 순간부터 SSL/TLS를 적용한다.

Implicit FTPS

ServerClientServerClientSSL/TLS 연결 시작 (포트 990)SSL/TLS 핸드셰이크 완료암호화된 FTP 명령 전송암호화된 응답 반환데이터 전송 연결 요청데이터 전송용 보안 연결 설정암호화된 데이터 전송전송 완료 확인

기본적으로 포트 990을 사용하며, 처음부터 모든 통신이 암호화된다. 레거시 시스템에서 주로 사용된다.

Explicit FTPS

Explicit FTPS는 일반 FTP 연결을 시작한 뒤 클라이언트가 보안 연결을 요청하는 방식이다.

ServerClientServerClient일반 FTP 연결 시작 (포트 21)AUTH TLS/SSL 명령 전송암호화 협상 가능 응답SSL/TLS 핸드셰이크 시작SSL/TLS 핸드셰이크 완료암호화된 FTP 명령 전송암호화된 응답 반환데이터 전송 연결 요청데이터 전송용 보안 연결 설정암호화된 데이터 전송전송 완료 확인

기본 FTP 포트인 21번을 사용한다. 클라이언트는 AUTH TLS 또는 AUTH SSL 명령으로 보안 연결을 요청하며, 기존 FTP 서버와의 호환성이 더 좋다. 현대 시스템에서는 이 방식이 더 널리 사용된다.

암호화 협상이 완료되기까지

FTPS 연결을 설정할 때 SSL/TLS 핸드셰이크가 진행된다.

ServerClientServerClientClientHello (지원 암호화 스위트, 랜덤 데이터)ServerHello (선택된 암호화 스위트, 랜덤 데이터)서버 인증서 전송ServerHelloDone클라이언트 키 교환 메시지ChangeCipherSpecFinishedChangeCipherSpecFinished

클라이언트는 지원하는 암호화 알고리즘과 랜덤 데이터를 담은 ClientHello를 보낸다. 서버는 선택한 알고리즘과 랜덤 데이터로 응답하고 디지털 인증서를 전달한다. 이후 세션 키 생성을 위한 정보를 교환한 뒤 ChangeCipherSpec으로 협상된 암호화 방식을 적용하고, Finished 메시지로 핸드셰이크 완료를 확인한다.

FTP 호환성과 운영 부담

FTPS는 기존 FTP 명령과 기능을 그대로 활용하면서 암호화와 서버 인증을 더할 수 있다. 디지털 인증서는 중간자 공격을 막는 데 쓰이며, 데이터 무결성 검증은 전송 중 변조를 방지한다.

반대로 데이터 채널이 동적으로 할당되기 때문에 방화벽 구성은 복잡해질 수 있다. 컨트롤 채널과 데이터 채널에 여러 포트를 열어야 하며, 서버 인증서의 발급과 관리에도 추가 비용과 노력이 든다. SFTP와 비교하면 구성 자체가 복잡할 수 있다.

SFTP와 혼동하지 말아야 할 지점

파일 전송 프로토콜FTPSSFTPFTP + SSL/TLS포트 21/990 + 데이터 포트복잡한 방화벽 구성SSH 기반단일 포트 22간단한 방화벽 구성

FTPS는 FTP에 SSL/TLS 보안 계층을 더한 방식이다. SFTP는 SSH(Secure Shell)를 기반으로 구현한 별도 프로토콜이다. SFTP는 단일 포트인 22를 사용해 방화벽 구성이 단순하다.

기존 FTP 환경을 유지한 채 보안을 강화해야 할 때는 FTPS가 유용하다. 반면 방화벽 구성과 운영 모델까지 함께 검토해야 한다.

민감한 파일을 교환하는 환경

금융 기관에서는 고객 거래 정보와 계좌 데이터처럼 민감한 정보를 전송하는 데 FTPS를 활용한다. 거래 내역 파일의 일일 배치 처리, 본점과 지점 간 데이터 동기화, 외부 결제 시스템과의 데이터 교환이 해당한다.

의료 기관에서는 HIPAA 등 의료 정보 보호 규정을 준수하는 과정에서 환자 기록, 의료 영상(DICOM), 의료 보험 청구 데이터를 전송하는 데 사용할 수 있다.

기업 간 데이터 교환에서도 활용된다. 공급망 관리 시스템의 재고 데이터를 교환하거나, 계약서·발주서 같은 문서를 전송하고, 협력사와 제품 설계 파일을 공유하는 경우다.

vsftpd와 lftp로 연결하기

서버 측에서는 vsftpd와 인증서를 구성할 수 있다.

# vsftpd 설치 (Ubuntu/Debian)
sudo apt-get install vsftpd openssl

# SSL 인증서 생성
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.key -out /etc/ssl/certs/vsftpd.crt

# vsftpd.conf 설정
sudo nano /etc/vsftpd.conf

# 다음 설정 추가/수정
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/ssl/certs/vsftpd.crt
rsa_private_key_file=/etc/ssl/private/vsftpd.key

클라이언트에서는 lftp로 FTPS 서버에 접속할 수 있다.

# lftp 클라이언트 사용 예시
lftp -u username,password -p 21 ftps://example.com

# 또는 명시적 FTPS 사용
lftp -u username,password ftp://example.com
lftp> set ftp:ssl-force true
lftp> set ssl:verify-certificate false  # 자체 서명 인증서 사용 시

인증서와 접근 경로를 함께 관리하기

SSL과 오래된 TLS 버전인 1.0/1.1에는 취약점이 발견되었으므로 TLS 1.2 이상을 사용한다. 약한 암호화 알고리즘은 비활성화하고, 신뢰할 수 있는 CA에서 발급한 인증서를 적용한다. 인증서는 정기적으로 갱신하며 키 길이는 최소 2048비트를 사용한다.

사용자 인증에는 복잡한 패스워드 정책을 적용하고, 가능하면 다중 인증(MFA)을 구현한다. 방화벽은 필요한 포트만 제한적으로 열고, 가능하면 특정 IP 주소로 접근을 제한한다.

FTPS파일 전송SSL/TLS네트워크 보안SFTP