2009-10-08 12 views
11

का उपयोग कर एफटीपीएस (एसएसएल/टीएलएस) पर फ़ाइलों को स्थानांतरित करें मैं एक ऐसा एप्लीकेशन लिख रहा हूं जो एक एफ़टीपी साइट पर फ़ाइलों को सिंक करता है। अभी यह नियमित एफ़टीपी के माध्यम से कनेक्ट करके काम कर रहा है, लेकिन अब हमारे आईटी लोग इसे एक सुरक्षित एफटीपीएस कनेक्शन पर स्थापित करना चाहते हैं।सी # .Net

उन्होंने मुझे * .cr_ प्रमाणपत्र फ़ाइल प्रदान की। अगर मैं नोटपैड में फ़ाइल खोलता हूं तो मुझे ऐसा कुछ दिखाई देता है (लेकिन वास्तविक कुंजी के साथ स्पष्ट रूप से foobar नहीं है)।

-----BEGIN RSA PRIVATE 
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR 
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR  
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR  
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR  
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR  
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR  
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR  
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR  
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR  
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR  
-----END RSA PRIVATE KEY----- 
-----BEGIN CERTIFICATE----- 
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR  
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR  
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR  
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR  
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR  
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR  
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR  
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR  
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR  
-----END CERTIFICATE----- 

फ़ाइलों को अपलोड और डाउनलोड करने के लिए एफटीपीएस सर्वर से कनेक्ट करने के लिए मैं इस प्रमाणपत्र फ़ाइल का उपयोग कैसे कर सकता हूं? मुझे माफ़ कर दो लेकिन मैं किसी नेटवर्क, सुरक्षित कनेक्शन, प्रमाण पत्र, सार्वजनिक कुंजी, निजी कुंजी, आदि ... पर फ़ाइलों को स्थानांतरित करने में शामिल कुछ भी नया हूं ...

मुझे लगता है कि मैं एक FtpWebRequest का उपयोग करना चाहता हूं ऑब्जेक्ट करें और EnableSsl प्रॉपर्टी को सत्य पर सेट करें। लेकिन मुझे यकीन नहीं है कि यह प्रमाणपत्र फ़ाइल कहां खेलती है।

उत्तर

2

This article बताता है कि स्रोत कोड के साथ इसे कैसे किया जाए।

इस लेख का उद्देश्य, मैं तुम्हें इस पर एक नज़र लेने के लिए सलाह देने के लिए सुरक्षित मोड में एक सी # एफ़टीपी ग्राहक बनाने के लिए, इसलिए यदि आप FTPS का ज्यादा ज्ञान नहीं है: FTPS।

.NET Framework में, FTPS मोड में फ़ाइल अपलोड करने के लिए, हम आम तौर पर FtpWebRequest क्लास का उपयोग करते हैं, लेकिन आप उद्धरण तर्कों के साथ आदेश नहीं भेज सकते हैं, और यदि आप वेब पर भी खोज करते हैं, तो आपको ठोस नहीं मिलेगा एक सुरक्षित सी # एफ़टीपी ग्राहक का उदाहरण।

उन कारणों से मैंने इस लेख को बनाने का निर्णय लिया है।

+0

मुझे लगता है कि लेख में देख रहा हूँ और स्रोत कोड की एक प्रति: यह के रूप में हमेशा सच लौटने या एक मैं डीबगिंग के लिए उपयोग करने की तरह और अधिक परिष्कृत हो के रूप में सरल हो सकता है। लेकिन मैं यह नहीं समझ सकता कि मैं इस प्रमाणपत्र फ़ाइल में कहां जोड़ूंगा। –

+0

धन्यवाद एरिक जे, मैं वास्तव में मूल पोस्टर के समान प्रश्न पूछता हूं और यह वह कोड है जिसका मैं उपयोग कर रहा हूं (जो आपने लिंक किया है) .... अभी भी यह पता लगाने की कोशिश कर रहा है कि उस कोड में मेरी "होस्टकी" को कैसे पास किया जाए। – ganders

17

यदि आप FtpWebRequest Class का उपयोग कर रहे हैं, तो आपको अनुरोध के सेटअप में कुछ चीज़ें जोड़ने की आवश्यकता है। using System.Security.Cryptography.X509Certificates; कथन शामिल करना सुनिश्चित करें।

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpUrl); 
    request.Credentials = new NetworkCredential(userName, password); 

    request.EnableSsl = true; 
    //ServicePointManager.ServerCertificateValidationCallback = ServicePointManager_ServerCertificateValidationCallback; 

    X509Certificate cert = X509Certificate.CreateFromCertFile(@"C:\MyCertDir\MyCertFile.cer"); 
    X509CertificateCollection certCollection = new X509CertificateCollection(); 
    certCollection.Add(cert); 

    request.ClientCertificates = certCollection; 

इसके अलावा, आप प्रमाण पत्र पैदा अपवादों आप ServicePointManager.ServerCertificateValidationCallback Property साथ प्रयोग के लिए अपने स्वयं के प्रमाण पत्र सत्यापन कॉलबैक विधि लागू करने के लिए आवश्यकता हो सकती है के साथ समस्याएं हैं।

public static bool ServicePointManager_ServerCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) 
    { 
     bool allowCertificate = true; 

     if (sslPolicyErrors != SslPolicyErrors.None) 
     { 
      Console.WriteLine("Accepting the certificate with errors:"); 
      if ((sslPolicyErrors & SslPolicyErrors.RemoteCertificateNameMismatch) == SslPolicyErrors.RemoteCertificateNameMismatch) 
      { 
       Console.WriteLine("\tThe certificate subject {0} does not match.", certificate.Subject); 
      } 

      if ((sslPolicyErrors & SslPolicyErrors.RemoteCertificateChainErrors) == SslPolicyErrors.RemoteCertificateChainErrors) 
      { 
       Console.WriteLine("\tThe certificate chain has the following errors:"); 
       foreach (X509ChainStatus chainStatus in chain.ChainStatus) 
       { 
        Console.WriteLine("\t\t{0}", chainStatus.StatusInformation); 

        if (chainStatus.Status == X509ChainStatusFlags.Revoked) 
        { 
         allowCertificate = false; 
        } 
       } 
      } 

      if ((sslPolicyErrors & SslPolicyErrors.RemoteCertificateNotAvailable) == SslPolicyErrors.RemoteCertificateNotAvailable) 
      { 
       Console.WriteLine("No certificate available."); 
       allowCertificate = false; 
      } 

      Console.WriteLine(); 
     } 

     return allowCertificate; 
    } 
+0

क्या आप इस भाग को समझा सकते हैं "X509 प्रमाण पत्र प्रमाणपत्र = X509Certificate.CreateFromCertFile (@" सी: \ MyCertDir \ MyCertFile.cer ");" क्या मुझे एफटीपीएस तक पहुंचने के लिए स्थानीय रूप से प्रमाणपत्र की आवश्यकता है? – Reynan

+0

@ रेयान ओपीएस सवाल यह था कि एफटीपीएस सर्वर पर अपने क्लाइंट एप्लिकेशन को प्रमाणित करने के लिए उसे प्रमाणित किया गया था और उसे फाइल में संग्रहीत किया गया था। एफटीपीएस के लिए जहां उपयोगकर्ता को केवल उपयोगकर्ता नाम और पासवर्ड के माध्यम से प्रमाणित किया जाता है, यह आवश्यक नहीं है। अपने उद्देश्यों के लिए http://stackoverflow.com/questions/9099738/upload-file-to-secured-ftp-in-asp-net देखें। – JamieSee