FTPS를 인증서를 사용하여 비밀번호 없이 로그인 가능할까요?
글쓴이: 장병우@Google / 작성시간: 수, 2019/07/17 - 3:20오후
안녕하세요.
Filezilla를 이용해 FTPS서버를 로컬에 구성하여 테스트를 진행하는데 SFTP처럼 인증서만 이용하여 패스워드 없이 로그인을 할 수 있나요?
서버 Certificate를 이용해 TrustManager를 통해 접속을 해도 하나 안하나 결과는 똑같네요..
그리고 Filezilla server 990포트는 원래 접속이 불가능한가요? WINSCP, Filezilla client로는 되는데 자바로는 안되네요..
아래는 제가 작성한 소스코드입니다.
private FTPSClient ftp = new FTPSClient(); private KeyStore loadStore(String storeType, File storePath, String storePass) throws KeyStoreException, IOException, GeneralSecurityException { KeyStore ks = KeyStore.getInstance(storeType); FileInputStream stream = null; try { stream = new FileInputStream(storePath); ks.load(stream, storePass.toCharArray()); } finally { Util.closeQuietly(stream); } return ks; } public boolean connect() throws FTPException { boolean result = false; FTPClientConfig config = new FTPClientConfig(FTPClientConfig.SYST_UNIX); { // config.set } try { System.out.println("FTPS connecting..."); //ftp.configure(config); System.out.println(connectInfo.get(<a href="http://FTP.HOST" rel="nofollow">FTP.HOST</a>)+", "+connectInfo.get(<a href="http://FTP.PORT" rel="nofollow">FTP.PORT</a>)); //ftp.connect(connectInfo.get(<a href="http://FTP.HOST" rel="nofollow">FTP.HOST</a>)); File storeFile = new File("C:\\Users\\Administrator\\Desktop\\MOCOMSYS\\====WORK====\\MI\\ETC\\tmp\\vsftpd.p12"); KeyStore keyStore=null; X509TrustManager defaultTrustManager=null; try { keyStore = loadStore("JKS", storeFile, "mocomsys1"); defaultTrustManager = TrustManagerUtils.getDefaultTrustManager(keyStore); } catch (KeyStoreException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (GeneralSecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } //whatever i use trustmanager or not, i can access only 21 port. <a href="http://ftp.setTrustManager" rel="nofollow">ftp.setTrustManager</a>(defaultTrustManager); <a href="http://ftp.connect" rel="nofollow">ftp.connect</a>(connectInfo.get(<a href="http://FTP.HOST" rel="nofollow">FTP.HOST</a>), Integer.parseInt(connectInfo.get(<a href="http://FTP.PORT" rel="nofollow">FTP.PORT</a>))); System.out.println(FTPReply.isPositiveCompletion(<a href="http://ftp.getReplyCode" rel="nofollow">ftp.getReplyCode</a>())); <a href="http://ftp.setSoLinger" rel="nofollow">ftp.setSoLinger</a>(true, 1000); <a href="http://ftp.setSoTimeout" rel="nofollow">ftp.setSoTimeout</a>(Integer.parseInt(connectInfo.get(<a href="http://FTP.TIMEOUT" rel="nofollow">FTP.TIMEOUT</a>))); result = <a href="http://ftp.login" rel="nofollow">ftp.login</a>(connectInfo.get(<a href="http://FTP.USERNAME" rel="nofollow">FTP.USERNAME</a>), connectInfo.get(<a href="http://FTP.PASSWORD" rel="nofollow">FTP.PASSWORD</a>)); <a href="http://ftp.execPBSZ" rel="nofollow">ftp.execPBSZ</a>(0); <a href="http://ftp.execPROT" rel="nofollow">ftp.execPROT</a>("P"); <a href="http://ftp.enterLocalPassiveMode" rel="nofollow">ftp.enterLocalPassiveMode</a>(); System.out.println("FTPS connection : "+result); // FileEntryParser } catch (NumberFormatException e) { throw new FTPException(e); } catch (SocketException e) { throw new FTPException(e); } catch (IOException e) { throw new FTPException(e); } return result; }
Forums:
댓글 달기