2015-09-22 31 views
8

Trong máy ảo, tôi có ứng dụng web và ứng dụng web phụ có FormsAuthentication và HTTPS được định cấu hình với chứng chỉ hợp lệ. Xác thực được chia sẻ giữa ứng dụng chính và ứng dụng con với cùng một khóa máy. Yêu cầu SSL trên hai ứng dụngChứng chỉ từ xa đã được xác minh là không hợp lệ bởi người dùng

Tất cả đều là Ok từ bên ngoài với url công khai.

Tôi cần gửi một số yêu cầu từ ứng dụng chính đến ứng dụng phụ với tên công khai cho mục đích cấu hình (ứng dụng phụ có thể được cài đặt trên máy chủ khác). Các yêu cầu này sử dụng tài khoản cụ thể để nhận dạng.

Đây là mã của tôi để gửi yêu cầu từ ứng dụng chính để ứng dụng phụ, this.WebApiUrl là url công cộng:

// If we are not authenticated 
if(!isAuthenticated) 
{ 
    // Check user and login 
    if(!User.Check(this.WebApiLogin, this.WebApiPassword)) 
     throw new Exception("Unauthorized user"); 

    isAuthenticated = true; 
} 
// Convert HttpCookie to Cookies 
var cookies = FormsAuthentication.GetAuthCookie(this.WebApiLogin, false).ToCookies(); 
// Create request with the authentication cookie 
Uri baseAddress = new Uri(this.WebApiUrl); 
CookieContainer cookieContainer = new CookieContainer(); 
foreach(var cookie in cookies) 
{ 
    if(String.IsNullOrEmpty(cookie.Domain)) 
     cookie.Domain = baseAddress.Host; 
    if(baseAddress.Scheme == "https") 
     cookie.HttpOnly = false; 

    cookieContainer.Add(cookie); 
} 

// send request 
using(HttpClientHandler handler = new HttpClientHandler() { CookieContainer = cookieContainer }) 
{ 
    using(HttpClient client = new HttpClient(handler)) 
    { 
     client.BaseAddress = baseAddress; 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     return client.GetStringAsync(requestUri).Result; 
    } 
} 

Tất cả đó là Ok mà không ssl. Khi tôi hoạt động ssl, yêu cầu giữa các ứng dụng chính và ứng dụng subdomain thất bại với

The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel..

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

System.Net Information: 0 : [10788] SecureChannel#92992 - Remote certificate was verified as invalid by the user.

System.Net.Sockets Verbose: 0 : [10788] Socket#29502801::Dispose()

System.Net Error: 0 : [10788] Exception in HttpWebRequest#61435094:: - The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel..

System.Net Verbose: 0 : [10788] HttpWebRequest#61435094::EndGetResponse()

System.Net Error: 0 : [10788] Exception in HttpWebRequest#61435094::EndGetResponse - The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel..

Điều lạ lùng là nhật ký không cho biết lý do chứng chỉ được người dùng xác minh là không hợp lệ. althougth chứng chỉ này là hợp lệ cho các yêu cầu từ bên ngoài.

Chú ý: Tôi không muốn có một giải pháp với ServicePointManager.ServerCertificateValidationCallback vì nó là trong một môi trường sản xuất

Cảm ơn bạn giúp

Trả lời

2

Bạn đang cung cấp một ServerCertificateValidationCallback bất cứ nơi nào khác trong mã của bạn?

Chúng tôi đã có lỗ hổng hợp lý trong cuộc gọi lại mà chúng tôi đã triển khai là các miền được chỉ định trong danh sách trắng có chứng chỉ tự ký. Cụ thể, cuộc gọi lại luôn thực thi - ngay cả đối với chứng chỉ hợp lệ - nhưng chỉ chỉ áp dụng logic danh sách trắng. Bởi vì các chứng chỉ hợp pháp không có trong danh sách này, cuộc gọi lại đã cho thấy lỗi.

này đã được giải quyết bằng cách quay đầu dựa trên error biến:

if (error == SslPolicyErrors.None) return true;

+0

Vâng, chúng tôi có một ứng dụng web trên cùng một máy chủ với callback này và đầu trở lại 'nếu (lỗi == SslPolicyErrors.None) trả về true; '. Tôi cũng đã thử mà không cần gọi lại và tôi luôn có lỗi cho các yêu cầu giữa ứng dụng của tôi và ứng dụng phụ của tôi. – Troopers

+0

Giá trị của 'error' trong gọi lại có cho thấy bất kỳ điều gì hữu ích hơn không? Tôi giả sử bạn đã qua các chứng chỉ gốc của bạn theo: http://blogs.msdn.com/b/jpsanders/archive/2009/09/16/troubleshooting-asp-net-the-remote-certificate-is-invalid -according-to-the-validation-procedure.aspx – nullPainter

+0

Có, tôi đã kiểm tra chứng chỉ, đường dẫn chứng chỉ, cơ quan cấp chứng chỉ .. tất cả đều ổn. Và tôi không nghĩ rằng vấn đề là chứng chỉ bởi vì các yêu cầu từ bên ngoài là Ok. Nó chỉ là yêu cầu giữa ứng dụng chính và ứng dụng con không thành công – Troopers

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