카테고리:

3 분 소요

Apache MINA FTP Server

FTP서버를 구축하는 방법에는 여러가지가 있겠지만, 자신만의 기능이 필요하다면 처음부터 개발하거나 기존의 오픈소스를 이용하여 수정/추가를 해가며 발전 시켜나가는 방법밖에는 없다.

APACHE MINA를 이용하여 FTP SERVER를 만든 것이 있다기에 주물럭 거려 보다가 SSL(X.509)기능이 탑재되어있음을 알았지만, SSL(X.509)에서 사용할 TLS 인증서를 어떻게 발급 받아야 하는지는 불친절 하게도 알려주지 않았다.

아파치 ftp서버 프로젝트 주소 : https://mina.apache.org/ftpserver-project/index.html

Keytool로 TLS 인증서 만들기

여러 삽질을 하다가 JAVA의 KEYTOOL을 이용하면 TLS인증서를 발급 받을 수 있음을 구글링을 통해 알아내게 되었다.

간단히 .bat파일로 만들어 보았으며 소스 코드는 다음과 같다.

cd C:\Program Files\Java\jdk1.8.0_162\bin
 
keytool -genkey -alias ftpkeya -keysize 1024 -dname "cn=domain.com,o=domain,ou=domain,l=seoul,s=KR,c=KR" -keystore mykeystore.jks -keypass ftpkey -storepass ftpkey -keyalg RSA 
 
keytool -list -keystore mykeystore.jks -storepass ftpkey -v 
 
keytool -export -alias ftpkeya -keystore mykeystore.jks -storepass ftpkey -file serverCertificate.arm -rfc 
pause > nul
  • CN은 (www.example.com과 같은 웹 사이트 주소)
  • O 는 (조직 이름, 일반적으로 회사 이름).
  • OU는 (organizationalUnitName, 회사 부서 이름 또는 유사한 하위 구조).
  • L 은 (위치, 명목상 주소는 엄격하게 정의된 EV 인증서를 제외하고 모호하게 사용됨).
  • S 는 (국가 내 주 또는 주)
  • C 는(도시)
"cn=domain.com,o=domain,ou=domain,l=seoul,s=KR,c=KR"

소스 내용의 상단의 부분을 입맛대로 변경한 후

-keypass ftpkey -storepass ftpkey

ftpkey에 원하는 패스워드를 입력한 후 배치 파일을 실행하면 실행 경로에 mykeystore.jks 파일을 얻을 수 있다.

소스 코드

  • Main.class
FtpServerFactory serverFactory = new FtpServerFactory();
ListenerFactory factory = new ListenerFactory();

// 서버의 포트번호를 설정합니다.
factory.setPort(990);

// 기본 ssl설정입니다.
SslConfigurationFactory ssl = new SslConfigurationFactory();
ssl.setKeystoreFile(new File("mykeystore.jks"));
ssl.setKeystorePassword("ftpkey");

// ssl설정을 서버에 추가합니다.
factory.setSslConfiguration(ssl.createSslConfiguration());
factory.setImplicitSsl(true);
serverFactory.addListener("default", factory.createListener());

범용 FTP 클라이언트인 FileZilla Client로 서버에 접속하면, 아래와 같은 인증서 창이 FTPS로 연결되어 있음을 알려주며 반겨준다.
(사설 인증서에 대한 검증이 되지 않아 뜨는 창이다. 사설CA(본인)가 검증했기 때문이다.)

서버의 인증서를 확인한 화면

태그: Apache, ApacheFTP, ApacheMina, filezilla, ftp, ftpserver, mina, SSL, SSL인증서, tls1.3, tls인증서, X.509, 아파치, 인증서

업데이트: