• Apache FTP Server에 TLS 인증서 생성하기
    프로그래밍/Java 2019. 2. 2. 23:05
    728x90

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


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


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


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

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


    1
    2
    3
    4
    5
    6
    7
    8
    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 -
     
    keytool -export -alias ftpkeya -keystore mykeystore.jks -storepass ftpkey -file serverCertificate.arm -rfc 
    pause > nul
    cs


    CN은 (www.example.com과 같은 웹 사이트 주소)

    O 는 (조직 이름, 일반적으로 회사 이름).

    OU는 (organizationalUnitName, 회사 부서 이름 또는 유사한 하위 구조).

    L 은 (위치, 명목상 주소는 엄격하게 정의된 EV 인증서를 제외하고 모호하게 사용됨).

    S 는 (국가 내 주 또는 주)

    C 는(도시)


    1
    "cn=domain.com,o=domain,ou=domain,l=seoul,s=KR,c=KR"
    cs


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




    1
    -keypass ftpkey -storepass ftpkey
    cs

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



    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    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());
    cs


    범용 FTP 클라이언트인 FileZilla Client로 서버에 접속하면, 



    와 같은 인증서 창이 FTPS로 연결이 되었음을 알리며 반겨준다.

    (사실 인증서에 대한 검증이 되지 않아 뜨는 창이다. 사설CA(본인)가 검증했기 때문이다.)

    공인CA가 인증을 하지 않았을 뿐이지 TLS를 이용한 데이터 보안은 확실하다!



    728x90

    댓글

Copyright ⓒ syudal.tistory.com