2009-10-22 15 views
5

Tôi đã triển khai lớp FTP tùy chỉnh của mình để làm việc với máy chủ được lưu trữ mà tôi đang thanh toán. Tôi sử dụng FTP để sao lưu, khôi phục và cập nhật ứng dụng của mình. Tôi hiện đang ở thời điểm tôi muốn kích hoạt ssl để đưa nó vào sản xuất. Tôi đã hỏi công ty lưu trữ của mình liệu họ có hỗ trợ giao thức ssl hay không và họ nói họ làm như vậy.FtpWebRequest với EnableSSL

Vì vậy, tôi sửa đổi phương pháp của tôi sau khi Microsoft MSDN hướng dẫn để một cái gì đó như thế này:

reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(m_ftpAddress.Trim())); 
reqFTP.UseBinary = true; 
reqFTP.Credentials = new NetworkCredential(m_ftpUsername, m_ftpPassword); 
reqFTP.Method = WebRequestMethods.Ftp.ListDirectory; 

ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(ValidateServerCertificate); 
       X509Certificate cert = new X509Certificate(path to a certificate created with makecert.exe); 

reqFTP.ClientCertificates.Add(cert); 
reqFTP.AuthenticationLevel = AuthenticationLevel.MutualAuthRequested; 
reqFTP.ImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Identification; 

reqFTP.EnableSsl = true; 

Bây giờ, MSDN nói rằng nếu máy chủ hỗ trợ giao thức ssl nó sẽ không ném và ngoại lệ khi được hỏi với AUTH TLS. Điều này có thể được nhìn thấy trong nhật ký theo dõi. Vì vậy, tôi cho rằng nó không phải là một vấn đề máy chủ.

Sau giai đoạn xác thực máy chủ trả về một thông điệp

System.Net Information: 0 : [0216] FtpControlStream#41622463 - Received response [227 Entering Passive Mode (the IP and port number).]

mà gây nên một lỗi:

System.Net Error: 0 : [0216] Exception in the FtpWebRequest#12547953::GetResponse - The remote server returned an error: 227 Entering Passive Mode (the IP and port number).

tôi đã cố gắng thiết lập thuộc tính false

reqFTP.UsePassive = true; 

và sau đó tôi nhận được lỗi này:

System.Net Information: 0 : [2692] FtpControlStream#4878312 - Received response [500 Illegal PORT command]

Tất nhiên, không có thuộc tính EnableSLL được đặt thành đúng, mọi thứ hoạt động mà không có sự cố.

Có ai có ý tưởng gì về điều này không?

Edit: tôi sửa đổi các mã như Fallows:

reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(m_ftpAddress.Trim())); 
reqFTP.UseBinary = true; 
reqFTP.Credentials = new NetworkCredential(m_ftpUsername, m_ftpPassword); 
reqFTP.Method = WebRequestMethods.Ftp.ListDirectory; 

ServicePointManager.ServerCertificateValidationCallback = new  
    System.Net.Security.RemoteCertificateValidationCallback(ValidateServerCertificate); 

reqFTP.ClientCertificates.Add(cert); 
reqFTP.AuthenticationLevel = AuthenticationLevel.MutualAuthRequested; 
reqFTP.ImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Identification 
reqFTP.EnableSsl = true; 

Các ValidateServerCertificate luôn trả đúng. Sau sửa đổi này, hiệu ứng là không.

Và tôi không hiểu:

  • Trong thời điểm này ứng dụng được sử dụng chứng chỉ máy chủ, phải không?
  • Và trước khi sửa đổi được sử dụng cũng là của tôi?

Ai đó có thể giải thích cách hoạt động của tính năng này?

Chỉnh sửa: Sau nhiều email trao đổi với công ty lưu trữ, hóa ra họ gặp vấn đề với phần mềm FTP của họ và không có vấn đề gì với mã.

+1

Sau đó đăng chỉnh sửa của bạn làm câu trả lời và chấp nhận. –

Trả lời

1

Bạn đã kiểm tra xem máy chủ của mình có đang sử dụng FTPS hoặc SFTP không?

chúng là các giao thức khác nhau và máy chủ của bạn có thể giả sử bạn đang nói về sai.

+0

Cảm ơn bạn đã trả lời. Tôi đã làm việc toghteter với công ty lưu trữ và vấn đề đã được giải quyết. Hóa ra đó là một số thiết lập cho môi trường của họ. – mosu

+0

^Môi trường lưu trữ của bạn có phải là EC2 Amazon cloud hosting không? – D3vtr0n

Các vấn đề liên quan