Ich habe ein Problem mit der Windows Azure ACS, und ich kann nicht ganz feststellen, ob es so sein soll oder ob ein Fehler in meinem Code vorliegt.Aufruf der vertrauenden Partei über HTTPS und Token-Verschlüsselung
Ich habe eine Reihe von vertrauenden Parteien in der ACS konfiguriert und alle von ihnen sind mit HTTPS konfiguriert. Jeder Dienst ist so konfiguriert, dass die Token-Verschlüsselung erforderlich ist. Dazu habe ich ein mit MakeCert.exe erstelltes Zertifikat hochgeladen.
Wenn der Kunde mit der vertrauenden Partei in Verbindung steht, ich fügen Sie den öffentlichen Teil des Zertifikats als Service-Zertifikat und ich füge hinzu, das Thema Namen als DnsIdentity:
var identity = EndpointIdentity.CreateDnsIdentity(GetClientCertificateSubjectName());
var serviceEndpointAddress = new EndpointAddress(new Uri(_serviceAddress), identity);
// Creation of channel factory
if(channelFactory.Credentials != null) {
channelFactory.Credentials.ServiceCertificate.DefaultCertificate = GetClientCertificate();
channelFactory.Credentials.ClientCertificate.Certificate = GetServiceIdentityCertificate();
}
Hier ist das Ding: wenn ich den Anruf vertrauende Partei über HTTPS, dann kann ich die Erstellung der EndpointIdentity
überspringen und dann die vertrauende Partei wird mir eine richtige Antwort geben. Ich kann auch überspringen die Einstellung der ServiceCertificate.DefaultCertificate
Eigenschaft oder setzen Sie eine völlig zufällige Zertifikat, und die vertrauende Partei wird mir immer noch eine richtige Antwort geben.
Beim Aufruf von HTTP führt das Ausführen einer der oben genannten Aktionen dazu, dass der ACS mit Meldungen ausfällt, die angeben, dass ich die richtigen Zertifikate nicht verwendet habe. Kurz gesagt: Beim Aufruf über HTTP kann ich nur mit dem richtigen Client-Zertifikat kommunizieren. Ich habe erwartet, dass dies auch für HTTPS der Fall ist.
Ich kann mir vorstellen, dass die ChannelFactory<T>
oder die ACS intelligent genug ist zu erkennen, dass HTTPS verwendet wird und dass die konfigurierte Verschlüsselung zugunsten der SSL-Verschlüsselung übersprungen wird. Leider kann ich keine Dokumentation finden, die diese Idee unterstützt.
Meine Frage ist: Ist es normal, die EndpointIdentity
und Zertifikate beim Aufruf einer vertrauenden Partei über HTTPS zu ignorieren? Oder benötige ich zusätzliche Konfiguration, um das zu funktionieren?
Vielen Dank im Voraus!