문제

나는 암시적이고 명시적인 FTP (FTPES라고도 함)를 지원하라는 요청을 받고 있습니다. 우리는 현재 .NET을 사용하고 있습니다 FtpWebRequest. 그렇습니다 FtpWebRequest 두 유형의 FTPE를 지원하며 차이점은 무엇입니까?

감사

도움이 되었습니까?

해결책

내가 아는 한 FTPWebRequest의 현재 (.NET 2.0 및 3.5) 버전은 명시 적 SSL 만 지원합니다.

실제로 .NET 2.0은 현재 암시 적 SSL을 지원하지 않으며 명시 적만을 지원합니다. 향후 릴리스를 위해 이것을 추가 할 것입니다.

Joncole -MSFTModerator at MSDN 포럼 게시물

묵시적인 TLS/SSL을 모두 사용해야하는 경우 타사 FTP/SSL 구성 요소 중 하나를 시도해야합니다. 다음 코드를 사용합니다 Rebex FTP/SSL 그리고 튜토리얼 페이지.

명시 적 TLS/SSL

클라이언트는 일반적인 보호되지 않은 방식으로 FTP 서버에 연결합니다. 일반적으로 포트 21은 FTP 프로토콜에 할당되었습니다. SSL을 사용하여 연결을 보호하기를 원할 때 SSL 협상이 초기화되고 제어 연결이 확보되고 다음 모든 커뮤니케이션이 보호됩니다.

// Create an instance of the Ftp class. 
Ftp ftp = new Ftp();

// Connect securely using explicit SSL. 
// Use the third argument to specify additional SSL parameters. 
ftp.Connect(hostname, 21, null, FtpSecurity.Explicit);

// Connection is protected now, we can log in safely. 
ftp.Login(username, password);

명시 적 보호는 언제라도 연결을 보호 할 수 있음을 의미합니다. 연결 시간에 보호가 필요한지 여부를 알지 못하는 경우 평범한 암호화되지 않은 FTP 프로토콜을 사용하여 연결하고 나중에 연결을 보호 할 수 있습니다.

Ftp ftp = new Ftp();

// Connect to the server with no protection. 
ftp.Connect(hostname, 21);

// Upgrade connection to SSL. 
// This method also accepts an argument to specify SSL parameters. 
ftp.Secure();

// Connection is protected now, we can log in safely. 
ftp.Login(username, password);

FTP 세션의 암시 적 SSL 보호

FTPS 프로토콜은 원래 IANA에 의해 별도의 포트를 할당했습니다. 이 포트에 연결되면 SSL 협상이 즉시 시작되고 제어 연결이 확보됩니다. 모든 데이터 연결은 또한 동일한 방식으로 암시 적으로 보호됩니다. 이것은 HTTPS가 사용하는 접근법과 유사합니다.

이 접근법은 IETF에 의해 선호되지 않으며 더 이상 사용되지 않습니다. 이전 서버와의 상호 운용성을 위해 Rebex FTP/SSL이 지원하지만 가능할 때마다 명시 적 보호를 사용하는 것이 좋습니다.

Ftp ftp = new Ftp();

// Connect securely using implicit SSL. 
// Use the third argument to specify additional SSL parameters. 
ftp.Connect(hostname, 990, null, FtpSecurity.Implicit);

// Connection is protected now, we can log in safely. 
ftp.Login(username, password);

구성 요소를 다운로드 할 수 있습니다 rebex.net/ftp-ssl.net/

다른 팁

Alex FTPS 클라이언트를 이전에 사용했습니다. 당신이 찾아야 할 수도 있습니다 http://ftps.codeplex.com/.

.넷 프레임 워크/FtpWebRequest 지원 만 지원합니다 명시 적 TLS/SSL 암호화. 암시 적 TLS/SSL 암호화를 지원하지 않습니다.

나는 그것이 그럴 것 같지 않다고 생각합니다. .NET Frameworks의 FTP 구현은 프로토콜의 표준화 된 기능 만 사용합니다. 암시 적 TLS/SSL 암호화는 결코 표준화되지 않았습니다. 암호화를 지원하지 않는 FTP 클라이언트와 함께 원활한 암호화를 사용할 수 있도록 임시 메커니즘으로 만 소개되었습니다. 일반적으로 암시 적 TLS/SSL 암호화를 사용할 이유가 없습니다. 암시 적 TLS/SSL 암호화 만 지원하는 FTP 서버는 IMO가 깨졌습니다. 주목하십시오 RFC 2228 [FTP 보안 확장 20 년 전에 소개되었습니다!


어쨌든 암시 적 TLS/SSL 암호화를 사용해야하는 경우 제 3 자 FTP 라이브러리를 사용해야합니다.

와 함께 WinSCP .NET 어셈블리, 그것은 간단합니다:

// Set up session options
SessionOptions sessionOptions = new SessionOptions
{
    Protocol = Protocol.Ftp,
    UserName = "username",
    Password = "password",
    FtpSecure = FtpSecure.Implicit,
};

using (Session session = new Session())
{
    // Connect
    session.Open(sessionOptions);

    // Your code
}

당신은 가질 수 있습니다 WinSCP GUI C# FTP 코드 템플릿을 생성합니다, 위의 것과 같은 것, 당신을 위해.

(저는 WinSCP의 저자입니다)

당신은 또한 시도 할 수 있습니다 ftp.dll ftp/ftps 클라이언트.

지원합니다 절대적인 그리고 명백한 SSL 연결. 암시 적 샘플은 다음과 같습니다.

using(Ftp ftp = new Ftp())
{
    ftp.ConnectSSL("ftp.server.com");

    ftp.Login("user", "password");

    ftp.ChangeFolder("uploads");
    ftp.UploadFile("report.txt", @"c:\report.txt");

    ftp.Close();
}

이것은 상용 제품이며 저는이 구성 요소의 저자입니다.

edtftpnet/pro FTPS 암시 및 명시 적 모드를 지원하는 FTP 클라이언트 라이브러리입니다. 그것은 단순히 올바른 프로토콜을 지정하는 문제입니다.

 SecureFTPConnection conn = new SecureFTPConnection();
 conn.Protocol = FileTransferProtocol.FTPSImplicit;

 // set remote host, user, pwd etc ...

 // now connect
 conn.Connect();

동일한 구성 요소도 SFTP를 지원합니다.

그리고 네, 저는이 구성 요소의 개발자 중 하나입니다 ( edtftpnet, 무료 오픈 소스 .NET FTP 클라이언트).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top