2010-01-07 14 views
8

Tôi đang tạo httpwebrequest bằng cách sử dụng cơ quan Gốc có thẩm quyền Tệp chứng nhận X509. Tôi chỉ có khóa công khai chứ không phải khóa riêng. Tất cả mọi thứ hoạt động tốt từ một ứng dụng Console nhưng nó không hoạt động từ một ứng dụng asp.net. Tôi gặp lỗi: "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."ASP.NET và 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ùy chọn tắt Xác thực không phải là một tùy chọn.

Đây là mã

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://xxxxxxx/gateway.aspx"); 
string post = "abcdef"; 
req.ContentType = "application/x-www-form-urlencoded"; 
req.Method = "POST"; 
req.ContentLength = post.Length; 

var cert = System.Security.Cryptography.X509Certificates.X509Certificate.CreateFromCertFile(@"c:\temp\root.cer"); 

req.ClientCertificates.Add(cert); 
StreamWriter stOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII); 
stOut.Write(post.ToString()); 
stOut.Close(); 

HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); 

Đây là hệ thống Logs từ System.Net và System.Net Sockets.

Thông tin System.Net: 0: [5928] SecureChannel # 8106798 - Chuỗi chứng chỉ không thể được xây dựng cho cơ quan gốc đáng tin cậy.

Thông tin System.Net: 0: [5928] SecureChannel # 8106798 - Chứng chỉ từ xa đã được xác minh là không hợp lệ bởi người dùng.

System.Net.Sockets Verbose: 0: [5928] Ổ cắm # 7.486.778 :: Dispose()

System.Net Lỗi: 0: [5928] Ngoại lệ trong HttpWebRequest # 51.319.244 :: - Kết nối tiềm ẩ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.

Lỗi System.Net: 0: [5928] Ngoại lệ trong HttpWebRequest # 51319244 :: EndGetRequestStream - 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.

Thêm thông tin

Nếu tôi sử dụng mã này (từ CodeGuru)

public static bool ValidateServerCertificate(object sender, 
    X509Certificate certificate, X509Chain chain, 
    SslPolicyErrors sslPolicyErrors) 
    { 
    if (sslPolicyErrors == 
     SslPolicyErrors.RemoteCertificateChainErrors) { 
     return false; 
    } else if (sslPolicyErrors == 
     SslPolicyErrors.RemoteCertificateNameMismatch) { 
     System.Security.Policy.Zone z = 
      System.Security.Policy.Zone.CreateFromUrl 
      (((HttpWebRequest)sender).RequestUri.ToString()); 
     if (z.SecurityZone == 
      System.Security.SecurityZone.Intranet || 
      z.SecurityZone == 
      System.Security.SecurityZone.MyComputer) { 
      return true; 
     } 
     return false; 
    } 
    return true; 
    } 

Tôi cuối cùng nhận được lỗi:

Remote Certificate Chain Error

Trả lời

1

Nghe có vẻ như vấn đề này có thể là những gì là được đăng trên link này. Quy trình nhân viên ASPNET yêu cầu tên chứng chỉ khớp với tên máy chủ. Có xung quanh công việc có thể được thực hiện với môi trường thử nghiệm.

Đối với thế hệ chứng chỉ mà bạn có thể sử dụng một chương trình miễn phí có tên SelfSSL.exe với các lệnh như:

SelfSSL.exe /T /N:CN=localhost /V:999 /Q (nơi "localhost" là tên cert)

Và:

winHTTPCertCfg.exe -g -c local_machine\my -s localhost -a Administrators (cấp quản trị viên truy cập vào chứng chỉ)

+0

Các root.cer đã được thêm vào Cửa hàng LocalMachine sử dụng snap MMC trong. Ive cũng đã cố gắng sử dụng winhttpcertcfg.exe để không có kết quả. Vì tôi không có khóa riêng, tôi cũng không có tệp PFX. Suy nghĩ? –

+0

Môi trường thử nghiệm không sử dụng SSL để được. Tôi đã lên kế hoạch sử dụng chứng nhận Gốc từ CA nhưng đó có thể là một phần của vấn đề. Tôi cho rằng sau đó thiết lập SSL trên máy chủ kết thúc là một chút tinh ranh. –

10

Sự cố này có thể được khắc phục bằng cách thêm vào Application_Start:

ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true; 

Về cơ bản, nó cho phép sự không khớp giữa máy chủ và chứng chỉ của máy chủ.

Nguồn:

http://www.ben-morris.com/asp-net-web-services-and-ssl-certificates-establishing-a-trust-relationship

Lưu ý: Cách giải quyết này không được khuyến cáo cho sản xuất

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