2012-06-27 18 views
19

Tôi đang cố thực hiện yêu cầu qua SSL. Chứng chỉ đã được cài đặt trên máy và nó hoạt động thông qua trình duyệt.Lỗi: 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 đang sử dụng yêu cầu này:

System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding(); 
byte[] data = encoding.GetBytes(request.Content.OuterXml.ToString()); 
string password = "XXXX"; 
X509Certificate2 cert = new X509Certificate2("c:\\zzzz.p12", password); 
string key = cert.GetPublicKeyString(); 
string certData = Encoding.ASCII.GetString(cert.Export(X509ContentType.Cert)); 

Uri uri = new Uri(request.Url); 
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(uri); 
myRequest.Credentials = new NetworkCredential(request.User, request.Password.ToString()); 
myRequest.Method = "PUT"; 
myRequest.ContentType = request.ContentType; 
myRequest.ContentLength = data.Length; 
myRequest.ClientCertificates.Add(cert); 

Stream newStream = myRequest.GetRequestStream(); 
newStream.Write(data, 0, data.Length); 
newStream.Close(); 

System.IO.StreamReader st = new StreamReader(((HttpWebResponse)myRequest.GetResponse()).GetResponseStream()); 

Sử dụng mã này, tôi nhận được lỗi này:

The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.

vấn đề là gì?

+1

có một cái nhìn vào bài đăng này, mayb nó có thể giúp u để http://stackoverflow.com/questions/703272/could-not-establish-trust-relationship-for-ssl-tls-secure- channel-soap – JohnnBlade

+0

Cảm ơn Johnn Blade –

+0

Bản sao có thể có của [C# Bỏ qua lỗi chứng chỉ?] (http://stackoverflow.com/questions/2675133/c-sharp-ignore-certificate-errors) –

Trả lời

45

tôi giải quyết vấn đề với điều này:

ServicePointManager.ServerCertificateValidationCallback = new   
RemoteCertificateValidationCallback 
(
    delegate { return true; } 
); 
+13

Giải pháp này có thể là mối đe dọa bảo mật tiềm năng đang tắt xác thực chứng chỉ SSL. Nếu đây là mã sản xuất, hãy hiểu rủi ro của máy chủ mà bạn đang kết nối. – Amzath

+0

Làm cách nào để thực hiện điều này trong Windows Phone 8? ServicePointManager không có trong tài liệu tham khảo http://cmsresources.windowsphone.com/devcenter/en-us/downloads/064028-microsoft-poster.pdf –

+1

Sự cố đã xảy ra với tôi khi chuyển yêu cầu từ ứng dụng của tôi thông qua Fiddler. Và thêm lừa ủy thác để không xác nhận cert đã giúp tôi chạy cuộc gọi của tôi thành công, cũng như để xem phản ứng trong Fiddler. –

-3

Đây là mã khách hàng, phải không? Và bạn đang truy cập url HTTPS, phải không? Tôi nghĩ rằng vấn đề là với chứng chỉ máy chủ, mà ngăn xếp TLS phía máy khách không thể xác thực. Khi bạn kết nối với URL đó thông qua trình duyệt, nó hoạt động trơn tru hay bạn thấy cảnh báo về chứng chỉ không khớp?

+0

Có đây là mã khách hàng. Có im truy cập qua https. Khi bạn kết nối trong trình duyệt nó hoạt động trơn tru và không thấy bất kỳ cảnh báo nào. –

+0

Nếu bạn cảm thấy thoải mái với các máy phân tích mạng (ví dụ: Wireshark of NetMon), bạn có thể dễ dàng đánh hơi lưu lượng truy cập và xem bạn đang nói cái gì, chứng chỉ nào hiện tại và nếu bắt tay TLS hoàn thành có hoặc không có lỗi. Nếu không, liên kết bạn có để tham khảo là một khởi đầu tốt. Nếu điều này không giúp bạn, bạn có thể bắt đầu tràn ở đây ngày càng nhiều chi tiết về thiết lập của bạn (URL bạn đang truy cập, chứng chỉ được cài đặt trên máy chủ, cấu hình mạng - proxy, v.v.) – Kastorskij

0

Hãy chắc chắn rằng chứng chỉ của bạn là đáng tin cậy đúng cách. Chứng chỉ gốc đã được thêm vào kho lưu trữ chứng chỉ đúng chưa (Trusted Root CA's trên Local Machine)?

Tôi gặp phải lỗi này khi chứng chỉ gốc (do chính bạn tạo) cho chứng chỉ (tự ký) đã được thêm vào Trusted Root CA's cho người dùng hiện tại). Chuyển chứng chỉ gốc sang kho lưu trữ Root CA trên Local Machine đã giải quyết được sự cố của tôi.

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