이 사이트는 FileZilla® 프로젝트와 관계없는 비공식 한국어 사용자 가이드입니다.
파일질라 한글 가이드 다운로드
홈 › FTP 서버 › SERVER 07

FTPS(TLS)와 Let's Encrypt 인증서

적용 Server 1.12.x · Windows 난이도 고급 읽는 시간 9분 스크린샷 8장 최종 검증 2026-09-24

FTPS는 FTP 연결을 TLS로 암호화한 것입니다. 비밀번호와 파일 내용이 암호화되어 오가므로, 중간에서 누가 엿봐도 알아볼 수 없습니다. 파일질라 서버 1.x는 설치하자마자 FTPS가 켜져 있고, 오히려 암호화하지 않는 접속을 막아 둔 상태입니다. 이 글은 그 기본 상태를 이해하고, 접속할 때마다 뜨는 인증서 경고를 무료 Let's Encrypt 인증서로 없애는 방법을 다룹니다.

💡 결론부터:

  • 1.x 기본값은 "Require explicit FTP over TLS"(명시적 FTPS 필수)입니다. 따로 켤 것 없이 이미 FTPS 서버입니다.
  • 설치 때 자체 서명 인증서가 자동으로 만들어져서, 클라이언트에서 처음 접속할 때 [알 수 없는 인증서] 창이 뜹니다. 내 서버라면 정상입니다.
  • 경고를 없애려면 도메인 이름 + Let's Encrypt 인증서를 씁니다. 무료판 파일질라 서버에도 발급 기능이 들어 있고, 자동 갱신이 기본으로 켜집니다. 파일질라 클라이언트에서 확인 창까지 없애려면 클라이언트의 시스템 트러스트 스토어 옵션도 켭니다(4절).
  • Let's Encrypt 내장 방식은 80번 포트로 도메인을 확인합니다. 공유기·방화벽에서 80번을 서버 PC로 열어야 합니다.

🙋 FTPS와 SFTP는 다른 것이에요. 이름이 비슷하지만 FTPS는 FTP + TLS, SFTP는 SSH 기반의 전혀 다른 프로토콜입니다. 무료 파일질라 서버는 FTPS만 됩니다. → 파일질라 서버로 SFTP 서버를 만들 수 있나요? · FTP·FTPS·SFTP 차이


1. 지금 상태 확인 — 리스너의 보안 모드

Server > Configure(Ctrl+F) → Server listeners.

사진을 누르면 크게 볼 수 있어요

  1. 1. 0.0.0.0:21 (IPv4)
  2. 2. :: :21 (IPv6)
  3. 3. Require explicit FTP over TLS — 기본값, 암호화 필수
  4. 4. 평문 함께 허용 / 묵시적 TLS(deprecated)
항목기본값뜻
주소0.0.0.0, ::이 PC의 모든 IPv4·IPv6 주소에서 받음
포트21FTP 기본 포트
보안 모드Require explicit FTP over TLS21번으로 접속한 뒤 반드시 TLS로 전환해야 함. 평문 FTP 거부

보안 모드 드롭다운의 선택지는 세 가지입니다(1.12.6 실측). 평문 전용 선택지는 없습니다.

선택지뜻
Require explicit FTP over TLS (기본)명시적 FTPS만. 평문 FTP 거부
Explicit FTP over TLS and insecure plain FTP명시적 FTPS와 평문 FTP 모두 허용
Implicit FTP over TLS (deprecated)암시적 FTPS. 오래된 방식이라 "deprecated"(권장 안 함) 표시

평문은 비밀번호가 그대로 보이므로, 평문 FTP만 되는 장비(일부 복합기 등)를 받아야 할 때만 두 번째로 바꾸세요. → 복합기 스캔을 파일질라 서버로 받기

명시적 vs 암시적 FTPS

방식클라이언트 설정포트파일질라 서버 1.x 기본
명시적(explicit, FTPES)암호화 TLS를 통한 명시적 FTP 필요, 또는 주소 앞에 ftpes://21✔ 이것
암시적(implicit)암호화 TLS를 통한 묵시적 FTP 필요, 또는 ftps://보통 990기본 아님

공식 위키 설명대로 두 방식은 서로 호환되지 않습니다. 파일질라 서버 1.x에 접속할 때는 명시적을 고르세요.

PROT P — 데이터까지 암호화

FTPS에서 제어 연결(로그인·명령)은 항상 암호화되지만, 데이터 연결(파일 내용)은 클라이언트가 PROT P(암호화)나 PROT C(평문)를 골라 요청합니다. 공식 위키는 서버가 PROT P를 강제하지 않으면 클라이언트가 PROT C를 보내 파일을 평문으로 보낼 수도 있다고 설명합니다.

파일질라 서버 1.x는 이 걱정을 따로 하지 않아도 됩니다. 개발자가 공식 포럼에서 밝힌 대로, 1.x는 제어 연결이 TLS이면 PROT C를 받지 않고 데이터 연결도 반드시 TLS를 쓰게 합니다. 그래서 0.9.x에 있던 "Force PROT P" 같은 설정을 1.x에서 찾을 필요가 없습니다.


2. 자체 서명 인증서 — 설치 직후 상태

Protocols settings > FTP and FTP over TLS (FTPS) > Connection Security 탭.

사진을 누르면 크게 볼 수 있어요

  1. 1. Minimum allowed TLS version — 기본 v1.2 (v1.2 / v1.3)
  2. 2. TLS credentials — 인증서 방식
  3. 3. [Generate new] — 자체 서명 인증서 새로 만들기
  4. 4. FTP 접속용 인증서 지문 — 클라이언트 '알 수 없는 인증서' 창의 지문과 같음
  5. 5. 만든 날·만료일 (자체 서명은 약 1년)
  • 설치할 때 자체 서명 인증서가 만들어져 바로 쓸 수 있습니다. 탭 아래쪽 Information about the certificate에 지문(SHA-256), 만든 날, 만료일(약 1년 뒤), 이름(CN=filezilla-server self signed certificate)이 보입니다.
  • 이 지문이 클라이언트의 [알 수 없는 인증서] 창에 나오는 지문 (SHA-256)과 같으면 내 서버입니다(실측에서 두 값이 같았음).
  • 자체 서명 인증서는 서버가 스스로 "나는 나다"라고 서명한 인증서라, 클라이언트가 기본으로 믿지 않습니다. 그래서 처음 접속할 때 [알 수 없는 인증서] 창이 뜹니다. → 알 수 없는 인증서 경고
  • 암호화 자체는 똑같이 됩니다. 문제는 "이 서버가 진짜 그 서버인지"를 사용자가 직접 확인해야 한다는 점입니다.

이 탭에서 고를 수 있는 것

항목뜻
Minimum allowed TLS version이보다 낮은 TLS는 거부. 선택지 v1.2 / v1.3, 기본 v1.2. 오래된 장비가 있으면 v1.2 그대로
TLS credentials: Provide a X.509 certificate and private key가진 인증서를 쓰기 — 인증서·개인 키를 붙여 넣거나(Raw data) 서버에 있는 파일 경로(Path to file) 지정
TLS credentials: Use a self-signed X.509 certificate (기본)자체 서명 인증서. [Generate new]로 새로 만들기
TLS credentials: Use a Let's Encrypt® certificate아래 3절

사진을 누르면 크게 볼 수 있어요

  1. 1. Use a Let's Encrypt® certificate — 무료 공인 인증서

자체 서명 인증서를 새로 만들 때

  • Generate new를 누르면 Data for self-signed X.509 certificate 창이 뜨고 Distinguished name(DN, 인증서에 적힐 이름)과 Hostnames(호스트 이름, 여러 개는 띄어 쓰기)를 묻습니다(실측).

사진을 누르면 크게 볼 수 있어요

비워도 되지만, 비우면 DN이 CN=filezilla-server self signed certificate로 들어갑니다.

  • 제대로 넣으면 일부 환경의 경고·호환 문제를 줄일 수 있습니다. 예: CN=ftp.example.com, O=우리회사, C=KR
  • Private key는 Generated by the server(서버가 만듦, 기본) 그대로 두면 됩니다. 다른 선택지 Provided는 가진 개인 키를 쓸 때입니다.
  • [Apply]나 [OK]를 눌러야 새 인증서가 적용됩니다.

3. Let's Encrypt 인증서 발급

준비물

  • 도메인 이름(예 ftp.example.com)이 서버의 공인 IP를 가리키고 있을 것. 공인 IP가 바뀌는 회선이면 DDNS 이름을 쓸 수도 있습니다. Let's Encrypt는 그 이름으로 http://(이름)/.well-known/acme-challenge/… 주소에 접속해 확인하므로, 확인하는 순간 그 이름이 지금의 공인 IP를 가리키고 있어야 합니다. 갱신할 때도 마찬가지입니다.
  • 내장 웹서버 방식을 쓴다면 80번 포트가 밖에서 서버 PC까지 들어올 것 (공유기 포트포워딩 + 윈도우 방화벽) → ipTIME 공유기 포트포워딩
  • 연락용 이메일 주소

⚠️ IP 주소만으로는 발급받을 수 없어요. Let's Encrypt는 도메인 이름을 확인하고 인증서를 줍니다. 사용자도 IP가 아니라 그 도메인 이름으로 접속해야 합니다. 인증서에 적힌 이름과 접속한 주소가 다르면 파일질라 클라이언트는 호스트명이 인증서와 일치하지 않음(Hostname does not match certificate)이라는 경고를 보여 줍니다.

3-1. Let's Encrypt 설정 켜기와 계정 만들기

설정 창 왼쪽 목록의 Let's Encrypt® 페이지(Logging 아래)에서 Enable Let's Encrypt® certificate generation을 체크합니다.

사진을 누르면 크게 볼 수 있어요

  1. 1. 왼쪽 목록의 Let's Encrypt® 페이지
  2. 2. Enable Let's Encrypt® certificate generation — ✔
  3. 3. Default account — 아직 계정 없음(Account not created yet)
  4. 4. [Generate new account] — 계정 만들기
  5. 5. How to perform the challenges — 도메인 확인 방식
  1. [Generate new account]를 누릅니다. ACME account generation 창이 뜹니다.
  2. Contact URIs(연락처)는 mailto: 로 시작하는 형식으로 넣습니다. 예: mailto:admin@example.com. 여러 개면 띄어 씁니다. Let's Encrypt는 이메일 연락처만 받습니다.
  3. ACME directory를 고릅니다. 기본값은 Let's Encrypt® production입니다.
선택뜻
Let's Encrypt production실제로 쓸 인증서 발급
Let's Encrypt staging연습용. 신뢰되지 않는 시험 인증서. 발급 횟수 제한에 걸리지 않게 먼저 시험해 볼 때
customLet's Encrypt와 같은 방식(ACME)을 쓰는 다른 인증 기관 주소
  1. [OK]를 누르면 Let's Encrypt 이용약관(Terms of Service)에 동의하는지 묻는 창이 뜹니다. 공식 KB에 따르면 [Yes]를 눌러 동의해야 계정이 만들어집니다. 약관은 Let's Encrypt 공식 사이트의 문서 모음(Repository)에 있는 Subscriber Agreement로 미리 읽어 볼 수 있으니, 내용을 보고 직접 판단해서 누르세요.

사진을 누르면 크게 볼 수 있어요

  1. 1. Contact URIs — mailto:내메일 형식 (여러 개는 띄어 쓰기)
  2. 2. ACME directory — 기본 Let's Encrypt® production

⚠️ 계정을 만들지 않은 채 다른 페이지로 넘어가면 "You must create an account, or disable Let's Encrypt® certificate generation." 오류가 뜨고 넘어가지 않습니다(실측). 계정을 만들거나 Enable 체크를 끄세요.

사진을 누르면 크게 볼 수 있어요

🙋 처음엔 staging으로 한 번 해 보세요. Let's Encrypt 쪽도 실제 발급 전에 staging에서 먼저 시험하라고 권합니다. 설정이 틀려 여러 번 실패하면 발급 제한에 걸릴 수 있기 때문입니다. 시험이 성공하면 production 계정으로 다시 발급받으면 됩니다.

3-2. 도메인 확인 방식 고르기

Let's Encrypt는 "이 도메인이 정말 당신 것인지" 확인하는 시험(challenge)을 냅니다. 같은 페이지의 How to perform the challenges 드롭다운에서 고릅니다. 처음에는 Please, make a choice(고르세요)로 비어 있습니다.

사진을 누르면 크게 볼 수 있어요

  1. 1. Use an internal web server — 서버가 80번 포트로 직접 확인 받기
  2. 2. Use an external web server — 이미 있는 웹서버 폴더 이용
방식어떻게이럴 때
Use an internal web server (내장 웹서버)파일질라 서버가 잠깐 작은 웹서버를 띄워 대답. Let's Encrypt가 도메인의 80번 포트로 접속해 옴서버 PC에 웹서버가 없을 때 (대부분)
Use an external web server (외부 웹서버)이미 돌고 있는 웹서버의 폴더에 파일질라 서버가 대답 파일을 씀. 웹서버가 /.well-known/acme-challenge/ 요청에 그 폴더로 응답해야 함같은 도메인으로 웹사이트를 이미 운영할 때
  • 내장 웹서버: 기본으로 모든 IP의 80번 포트에서 기다립니다. 공유기에서 TCP 80 → 서버 PC 포워딩, 윈도우 방화벽 허용이 필요합니다. 80번이 다른 프로그램(웹서버 등)에 쓰이고 있으면 충돌합니다.
  • 외부 웹서버: 파일질라 서버가 쓸 수 있는 폴더 경로를 넣습니다. 폴더가 없으면 Create path if it doesn't exist already를 체크하세요.

[Apply]로 저장합니다.

3-3. 인증서 발급

다시 Protocol settings > FTP and FTP over TLS (FTPS) > Connection security 탭으로 가서 Let's Encrypt 방식의 Generate new를 누릅니다.

  • 아직 3-1을 안 했다면 Set up Let's Encrypt® options first 버튼이 보입니다. 누르면 설정 페이지로 이동합니다.
  • 호스트 이름을 넣습니다(예 ftp.example.com). 비워 둘 수 없습니다.
  • 개인 키는 Generated by the server(기본) 그대로 둡니다.
  • [Apply]나 [OK]를 눌러야 새 인증서가 적용됩니다.

📷 촬영 예정: 설정 창 — Connection security 탭에서 Let's Encrypt Generate new 창, 호스트 이름 ftp.example.com (실제 도메인·계정 필요 — 운영자 서버에서 촬영)

📷 촬영 예정: 설정 창 — 발급 후 Connection security 탭 아래쪽 인증서 정보(발급자 Let's Encrypt, 만료일)

3-4. 자동 갱신 — 기본으로 켜짐

Let's Encrypt 인증서는 유효 기간이 짧아 주기적으로 갱신해야 합니다. 파일질라 서버는 Automatically try to renew the certificate in due time(때가 되면 자동 갱신 시도)이 기본으로 켜져 있습니다. 같은 Connection security 탭에 있습니다.

  • 그대로 두세요. 끄면 만료될 때마다 직접 다시 발급해야 합니다.
  • 자동 갱신도 3-2의 확인 방식이 그때도 통해야 성공합니다. 80번 포트를 발급 후 닫아 버리면 갱신이 실패할 수 있습니다.
  • 갱신됐는지는 가끔 직접 확인하세요. Connection security 탭 아래쪽 인증서 정보의 만료일(Expiration date)이 새 날짜로 바뀌어 있으면 갱신된 것입니다. Let's Encrypt는 2025년 6월 4일부터 만료 안내 이메일을 보내지 않으니, 메일이 오기를 기다리지 마세요. 끝내 만료되면 관리 화면에 아래 "인증서가 만료됐다" 경고가 뜹니다.

4. 클라이언트에서 확인

파일질라 클라이언트로 도메인 이름(예 ftp.example.com)에 접속합니다. 암호화는 TLS를 통한 명시적 FTP 필요.

  • 파일질라 클라이언트는 기본으로 처음 보는 인증서를 사용자에게 보여 주고 신뢰할지 묻는 방식입니다(공식 KB). 그래서 Let's Encrypt 인증서여도 처음 한 번은 [알 수 없는 인증서] 창이 뜰 수 있습니다. 창의 인증서 정보에서 이름이 내 도메인인지, 발급한 곳이 Let's Encrypt인지 확인하고 신뢰하면 됩니다.
  • 창 없이 바로 연결되게 하려면 클라이언트의 편집(E) → 설정(S)... → 연결에서 시스템 트러스트 스토어를 사용해 TLS 인증서 검증(U)을 켜세요(기본은 꺼짐). 공식 KB에 따르면 이 옵션을 켜면 묻는 대신 운영체제의 인증서 저장소로 검증합니다.
  • 전에 자체 서명 인증서를 "항상 신뢰"로 저장해 두었다면, 인증서가 바뀌었으니 한 번 더 확인 창이 뜰 수 있습니다.

📷 촬영 예정: 파일질라 클라이언트 — Let's Encrypt 인증서 서버에 인증서 창 없이 접속된 상태, 메시지 로그 'TLS 연결 수립.'


"인증서가 만료됐다"는 경고가 떴을 때

관리 화면에 "The TLS certificates of the following protocols have expired" 경고가 뜨면, 어느 인증서가 만료됐는지 보고 해당 탭에서 새로 발급합니다.

만료된 것다시 만드는 곳
FTP(FTPS)용 인증서Protocol settings > FTP and FTP over TLS (FTPS) > Connection security 탭
관리 연결용 인증서Administration > Connection security 탭
  • 자체 서명 인증서라면 Generate a self-signed certificate로 새로 만들면 됩니다.
  • Let's Encrypt라면 자동 갱신이 왜 실패했는지(80번 포트, 도메인 IP 변경) 먼저 확인하고 다시 발급하세요.

자주 하는 실수

증상원인과 해결
평문 FTP로 접속하면 거부된다1.x 기본값이 FTPS 필수. 클라이언트 암호화를 TLS를 통한 명시적 FTP 필요로
ftps://로 접속했는데 안 된다ftps://는 암시적. 1.x 기본은 명시적 → ftpes:// 또는 암호화 설정 변경
Let's Encrypt 발급이 실패한다80번 포트가 서버 PC까지 안 옴(공유기·방화벽·통신사 차단), 도메인이 다른 IP를 가리킴, 80번을 다른 프로그램이 사용 중
발급됐는데 여전히 인증서 창이 뜬다클라이언트의 시스템 트러스트 스토어 옵션이 꺼져 있음(기본, 4절), IP로 접속 중(도메인 이름으로 접속해야 함), staging 인증서로 발급함
인증서를 바꿨는데 그대로다[Apply]/[OK]를 안 누름
몇 달 뒤 갑자기 인증서 오류자동 갱신 실패. 80번 포트와 도메인 IP 확인

자주 묻는 질문

Q. 회사 내부에서만 쓰는데도 Let's Encrypt가 필요한가요? 아니요. 내부용이라면 자체 서명 인증서로도 암호화는 똑같이 됩니다. 사용자에게 인증서 지문을 알려 주고 처음 한 번 "항상 신뢰"로 저장하게 하면 됩니다.

Q. 이미 산 인증서(상용 SSL)가 있어요. Provide a certificate로 넣을 수 있습니다. 인증서 체인과 개인 키를 PEM 형식으로, 서버에 있는 파일의 전체 경로를 넣거나 내용을 붙여 넣습니다. 키와 체인이 한 파일이면 두 칸에 같은 경로를 넣습니다. 받은 파일이 PEM 형식이 아니라면(예: .pfx 한 파일로 받은 경우) 인증서를 산 업체의 안내에 따라 PEM 형식으로 다시 받거나 바꾼 뒤 넣으세요.

Q. 관리 화면 연결의 인증서도 Let's Encrypt로 바꿔야 하나요? 관리용 인증서는 Administration > Connection security에 따로 있습니다. 관리 화면은 처음 한 번 지문을 확인하는 방식이라 자체 서명 인증서로 두어도 됩니다. → 관리 비밀번호와 관리 포트


참고한 공식 문서

이 글의 일부는 FileZilla 위키(GFDL)를 참고해 한국어로 새로 썼습니다.

요약

한눈에 정리

  1. 1기본은 암호화 필수

    리스너 Require explicit FTP over TLS. 평문 전용 선택지는 없어요.

  2. 2자체 서명 인증서가 기본

    처음 접속 때 '알 수 없는 인증서' 창이 뜨는 게 정상.

  3. 3경고를 없애려면 Let's Encrypt

    도메인과 80번 포트가 필요. 계정 만들기에서 약관 동의.

해결이 안 됐나요? 메시지 로그의 마지막 빨간 줄을 오류 사전에서 찾아보거나, 10분 체크리스트를 1번부터 따라 해 보세요.

오류 사전 10분 체크리스트

최종 수정 2026-09-25