In einer azure virtuellen Maschine habe ich eine Webanwendung und eine Sub-Webanwendung mit FormsAuthentication und HTTPS mit einem gültigen Zertifikat konfiguriert. Die Authentifizierung erfolgt zwischen der Hauptanwendung und der Unteranwendung mit demselben Maschinenschlüssel. SSL ist für die beiden Anwendungen erforderlichRemotezertifikat wurde vom Benutzer als ungültig verifiziert
Alles ist OK von außen mit der öffentlichen URL.
Ich muss einige Anfragen von der Hauptanwendung an die Unteranwendung mit dem öffentlichen Namen für Konfigurationszwecke senden (die Unteranwendung könnte auf einem anderen Server installiert werden). Diese Anfragen verwenden ein bestimmtes Konto zur Identifizierung.
Dies ist mein Code Anfrage von Hauptanwendung Unter Anwendung zu senden, ist this.WebApiUrl die Öffentlichkeit url:
// 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;
}
}
Alle es ist Ok ohne ssl. Wenn ich aktiv ssl, die Anforderung zwischen der Hauptanwendung und der Sub-Domain-Anwendung mit
The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel..
Hier versagt die Systemprotokolle von System.Net und 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..
Was seltsam ist es das Protokoll ist nicht sagen, warum das Zertifikat verifiziert wurde, wie vom Benutzer ungültig. Dieses Zertifikat gilt für die Anfrage von außen.
Wichtig: Ich habe keine Lösung mit ServicePointManager.ServerCertificateValidationCallback wollen, weil es in einer Produktionsumgebung ist
Dank für Sie
Ja, wir haben eine andere Web-Anwendung auf demselben Server mit diesem Rückruf und vorzeitige Rückkehr 'if (Fehler == SslPolicyErrors.None) zurück wahr; '. Ich habe auch ohne Rückruf versucht und ich habe immer den Fehler bei Anfragen zwischen meiner App und meiner Sub-App. – Troopers
Bedeutet der Wert von "Fehler" im Rückruf etwas nützlicher? Ich nehme an, Sie haben Ihre Stammzertifikate wie folgt durchsucht: 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
Ja, ich habe das Zertifikat, den Zertifikatspfad, die Zertifizierungsstelle überprüft ... alles ist in Ordnung. Und ich denke nicht, dass das Problem das Zertifikat ist, weil die Anfragen von draußen Ok sind. Es sind nur die Anforderungen zwischen der Hauptanwendung und der Unteranwendung, die fehlschlagen – Troopers