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ã.
Sau đó đăng chỉnh sửa của bạn làm câu trả lời và chấp nhận. –