2009-12-03 12 views
25

मुझे निहित और स्पष्ट एफटीपीएस (जिसे एफ़टीपीईएस भी कहा जाता है) का समर्थन करने के लिए कहा जा रहा है। वर्तमान में हम .NET FtpWebRequest का उपयोग कर रहे हैं। क्या FtpWebRequest दोनों प्रकार के एफ़टीपीईएस का समर्थन करता है, और क्या अंतर है?क्या .NET FtpWebRequest दोनों लागू (एफटीपीएस) और स्पष्ट (FTPES) का समर्थन करता है?

धन्यवाद

उत्तर

15

के रूप में तक मुझे पता है FtpWebRequest की वर्तमान (.NET 2.0 और 3.5) संस्करण केवल स्पष्ट एसएसएल समर्थन करता है।

असल में, .NET 2.0 वर्तमान में समर्थन निहित एसएसएल, केवल स्पष्ट है। हम इसे भविष्य की रिलीज के लिए जोड़ने पर विचार करेंगे।

JonCole - MSFTModerator पर MSDN forum post

तुम दोनों implict और स्पष्ट TLS/SSL का उपयोग करने के लिए तीसरे पक्ष के एफ़टीपी/SSL घटकों में से एक की कोशिश करने के लिए है की जरूरत है। निम्नलिखित कोड हमारे Rebex FTP/SSL का उपयोग करता है और tutorial page से लिया जाता है।

स्पष्ट TLS/SSL

ग्राहक एक सामान्य गैर संरक्षित तरह से FTP सर्वर से कनेक्ट होता है, आम तौर पर करने के लिए पोर्ट 21 FTP प्रोटोकॉल को सौंपा गया था। जब एसएसएल का उपयोग कर कनेक्शन की रक्षा करना वांछित होता है, तो एक एसएसएल वार्ता शुरू होती है, नियंत्रण कनेक्शन सुरक्षित होता है और सभी निम्नलिखित संचार संरक्षित किए जा रहे हैं।

// 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); 

अंतर्निहित एसएसएल सुरक्षा

FTPS प्रोटोकॉल मूल रूप से IANA द्वारा एक अलग बंदरगाह सौंपा गया था। इस बंदरगाह के कनेक्शन पर, एक एसएसएल वार्ता तुरंत शुरू होती है और नियंत्रण कनेक्शन सुरक्षित होता है। सभी डेटा कनेक्शन भी उसी तरह से सुरक्षित रूप से सुरक्षित हैं। यह HTTPS द्वारा उपयोग किए जाने वाले दृष्टिकोण के समान है।

यह दृष्टिकोण आईईटीएफ द्वारा समर्थित नहीं है और इसे बहिष्कृत किया गया है। पुराने सर्वर के साथ इंटरऑपरेबिलिटी के लिए रेबेक्स एफ़टीपी/एसएसएल द्वारा समर्थित है, लेकिन जब भी संभव हो, स्पष्ट सुरक्षा का उपयोग करने की दृढ़ता से अनुशंसा की जाती है।

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/

+3

हालांकि ब्याज की एक संघर्ष की तरह लगता है ... जब से तुम घटक आप जोर दे रहे हैं प्रतिनिधित्व करते हैं मैं, पोस्ट की सराहना करते हैं। – PortageMonkey

+2

मैं आपकी चिंता को समझता हूं। हालांकि ऐसा लगता है कि वर्तमान सर्वसम्मति यह है कि जब तक पूर्ण प्रकटीकरण प्रदान नहीं किया जाता है तब तक अपने उत्पाद का उल्लेख नैतिक रूप से ठीक है। मैंने यह सुनिश्चित करने के लिए अपना उपनाम भी बदल दिया है कि मेरी पूर्वाग्रह को अनदेखा नहीं किया जाएगा ;-)। मेटा.स्टैक ओवरफ्लो पर आपको इस विषय पर चर्चा करने के लिए दिलचस्प निम्नलिखित लिंक मिल सकते हैं: http://meta.stackexchange.com/questions/15787/is-it-bad-etiquette-to-mention-your-own-products-in-a- stackoverflow-answer और http://meta.stackexchange.com/questions/20031/vendors-on-stackoverflow। मुझे लगता है कि जब तक उत्तर मान्य है और पहचान छिपी नहीं है तब तक ठीक है। AlexFTPS के लिए –

12

मैं एलेक्स FTPS ग्राहक पहले का इस्तेमाल किया है पर घटक को डाउनलोड कर सकते हैं। हो सकता है कि आपको http://ftps.codeplex.com/ पर देखना चाहिए।

+0

+1! एलजीपीएल और मुफ्त ($$$ में) जो कि इस तरह की कोर लाइब्रेरी है। क्यों एमएस ने अंतर्निहित एफ़टीपी कक्षाओं में अंतर्निहित टीएलएस/एसएसएल का समर्थन नहीं किया, मुझे कभी पता नहीं चलेगा। – mattmc3

+3

@ mattmc3, मुझे पता है कि एमएस ने लागू एसएसएल क्यों नहीं बनाया; ऐसा इसलिए है क्योंकि इसे बहिष्कृत किया गया है। –

+0

एलेक्सएफटीपीएस अब भी एक NuGet पैकेज है। –

-1

edtFTPnet/PRO एक एफ़टीपी क्लाइंट लाइब्रेरी है जो एफटीपीएस निहित और स्पष्ट मोड का भी समर्थन करती है। यह सही प्रोटोकॉल निर्दिष्ट करने का विषय है:

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

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

// now connect 
conn.Connect(); 

वही घटक एसएफटीपी का भी समर्थन करता है।

और हाँ, मैं इस घटक के डेवलपर्स में से एक हूं (और edtFTPnet, मुफ़्त, मुक्त स्रोत .NET FTP क्लाइंट)।

+0

बस स्पष्ट होने के लिए, उत्पाद पृष्ठ इंगित करता है कि "मुक्त" संस्करण इस कार्यक्षमता का समर्थन नहीं करता है। ऐसा नहीं है कि आपने स्पष्ट रूप से कहा था कि यह जरूरी है, लेकिन यह निश्चित रूप से एक धारणा है जिसे मैंने आपकी पोस्ट के आधार पर बनाया था। – mattmc3

+1

मुफ्त संस्करण (एलजीपीएल) केवल एफ़टीपी है - यह एफटीपीएस या एसएफटीपी का समर्थन नहीं करता है –

1

आप Ftp.dll FTP/FTPS client भी आजमा सकते हैं।

यह निहित और स्पष्ट 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(); 
} 

कृपया ध्यान दें कि यह वाणिज्यिक उत्पाद है और मैं इस घटक का लेखक हूं।

2

.NET Framework/FtpWebRequest केवल स्पष्ट TLS/SSL एन्क्रिप्शन का समर्थन करता है। यह अंतर्निहित टीएलएस/एसएसएल एन्क्रिप्शन का समर्थन नहीं करता है।

मेरा मानना ​​है कि यह कभी भी ऐसा नहीं होगा। .NET ढांचे के एफ़टीपी कार्यान्वयन प्रोटोकॉल की केवल मानकीकृत विशेषताओं का उपयोग करता है। निहित टीएलएस/एसएसएल एन्क्रिप्शन कभी मानकीकृत नहीं किया गया था। इसे केवल अस्थायी तंत्र के रूप में पेश किया गया था ताकि एफ़टीपी ग्राहकों के साथ सीमलेस एन्क्रिप्शन का उपयोग किया जा सके जो एन्क्रिप्शन का समर्थन नहीं करते थे। आम तौर पर, निहित टीएलएस/एसएसएल एन्क्रिप्शन का उपयोग करने का कोई कारण नहीं है। एक एफ़टीपी सर्वर जो केवल अंतर्निहित टीएलएस/एसएसएल एन्क्रिप्शन का समर्थन करता है, टूटा हुआ है, इमो।


वैसे भी, आप अंतर्निहित TLS/SSL एन्क्रिप्शन का उपयोग करने की जरूरत है, तो आप एक 3 पार्टी एफ़टीपी पुस्तकालय का उपयोग करना होगा।

WinSCP .NET assembly के साथ, यह आसान है:

// 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 generate a C# FTP code template ऊपर हो सकता है, एक की तरह, आप के लिए।

(मैं WinSCP के लेखक हूँ)

संबंधित मुद्दे