Sử dụng Visual Studio 2005 - C# 2.0, System.Net.WebClient.UploadData(Uri address, byte[] data)
Windows Server 2003Làm thế nào để bỏ qua một lỗi chứng chỉ với C# 2.0 WebClient - mà không có giấy chứng nhận
Vì vậy, đây là một phiên bản rút gọn mã:
static string SO_method(String fullRequestString)
{
string theUriStringToUse = @"https://10.10.10.10:443"; // populated with real endpoint IP:port
string proxyAddressAndPort = @"http://10.10.10.10:80/"; // populated with a real proxy IP:port
Byte[] utf8EncodedResponse; // for the return data in utf8
string responseString; // for the return data in utf16
WebClient myWebClient = new WebClient(); // instantiate a web client
WebProxy proxyObject = new WebProxy(proxyAddressAndPort, true);// instantiate & popuylate a web proxy
myWebClient.Proxy = proxyObject; // add the proxy to the client
myWebClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); // stick some stuff in the header
UTF8Encoding utf8Encoding = new UTF8Encoding(false);// create a utf8 encoding
Byte[] utf8EncodedRequest = HttpUtility.UrlEncodeToBytes(fullRequestString, utf8Encoding); // convert the request data to a utf8 byte array
try
{
utf8EncodedResponse = myWebClient.UploadData(theUriStringToUse, "POST", utf8EncodedRequest); // pass the utf8-encoded byte array
responseString = utf8Encoding.GetString(utf8EncodedResponse); // get a useable string out of the response
}
catch (Exception e)
{
// some other error handling
responseString = "<CommError><![CDATA[" + e.ToString() + "]]></CommError>";// show the basics of the problem
}
return responseString;// return whatever ya got
}
Đây là lỗi tôi nhận được:
Kết nối cơ bản đã bị đóng: Không thể thiết lập mối quan hệ tin cậy cho kênh bảo mật SSL/TLS.
Tôi không có nhiều quyền kiểm soát để xem điều gì đang xảy ra khi yêu cầu xuất hiện. Tôi được thông báo rằng nó đến đích chính xác và có "lỗi chứng chỉ". Điều này được cho là bởi vì có sự không phù hợp theo nghĩa đen giữa địa chỉ IP trong yêu cầu của tôi và URL mà nó giải quyết. Tôi có nhiều hơn một IP mà tôi cho là phải làm tròn để chỉ định URL sẽ không hoạt động. Tôi không đính kèm chứng chỉ - cũng không phải tôi phải theo các chủ sở hữu điểm cuối. Mỗi "chúng" lỗi chứng chỉ là 'bình thường và tôi phải bỏ qua nó.
Chứng chỉ được đề cập được cho là một trong nhiều chứng chỉ verisign "chỉ có" trên máy chủ của chúng tôi. Các ví dụ tôi đã thấy để bỏ qua các lỗi cert dường như ngụ ý rằng người yêu cầu đang đính kèm một chứng chỉ x509 cụ thể (mà tôi không có).
Tôi đã xem qua .net WebService, bypass ssl validation! mà kinda-sorta mô tả vấn đề của tôi - ngoại trừ nó cũng kinda-sorta không phải vì tôi không biết chứng chỉ nào (nếu có) tôi nên tham khảo.
Có cách nào để tôi bỏ qua lỗi mà không thực sự biết/quan tâm chứng chỉ nào gây ra sự cố không?
và vui lòng - găng tay trẻ em, từ nhỏ và mã "cho núm vú" vì tôi không chính xác là người đam mê nặng.
Lưu lượng truy cập này nằm trên một đường riêng - vì vậy sự hiểu biết của tôi là bỏ qua lỗi cert không phải là một thỏa thuận lớn như thể đó là lưu lượng truy cập internet mở.
Cảm ơn, MattH. Tôi đang thực thi mã bạn có trong khối lệnh TRY trước khi gọi phương thức System.Net.WebClient.UploadData (địa chỉ Uri, byte []). Để nói rằng tôi không chắc những gì nó đang làm sẽ là một cách nói. Tôi không thấy liên kết với WebClient của tôi. Tuy nhiên, nó "xuất hiện" để được làm việc như chúng tôi dường như nhận được thêm trong giao tiếp của chúng tôi cho mỗi nhóm mạng bên cạnh tôi. Tôi tìm thấy một gợi ý rất giống nhau về MSDN nhưng những từ chỉ muốn tung ra khỏi nhãn cầu của tôi. http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager%28VS.80%29.aspx –
Tóm lại, mã trên tin tưởng bất kỳ ai và bỏ qua tất cả xác minh SSL và do đó không an toàn . – MattH
Quyền - đó là nhiều tôi đã nhận - nhưng là điều này gắn liền với trường hợp cụ thể của tôi về một WebClient, quá trình chạy của tôi, hoặc BẤT CỨ cert liên quan "goings trên" trên máy chủ một khi điều này thực hiện? Dự đoán của tôi là nó được giới hạn trong quá trình của tôi nhưng ... –