WCF-service-Zertifikat und client-seitige endpoint-Identität - warum funktioniert es nicht?

[Update] - lege ich auch voll config-Dateien für die service, und für client (außerhalb des hier nicht überfluten das Thema)

Bin ich mit der situation so ziemlich identisch zu dem beschriebenen diese Frage, aber meine Frage ist etwas anders.

  • Ich bin mit NetTcpBinding mit Sicherheit
    eingestellt TransportWithMessageCredential
  • Ich bin mit Benutzernamen und Passwort
    Anmeldeinformationen gesichert durch ASP.NET
    Anbieter
  • Mein service ist selbst gehostet in Windows
    Service
  • Ich tun habe in meinem Endpunkt Verhalten
    angegebene Authentifizierung
    revocationMode="NoCheck"

Ist es erforderlich, dass der service bietet für die Authentifizierung ein Zertifikat selbst zu Kunden. Das ist OK, ich Tue gerade:

<serviceCertificate findValue="***"
                    storeLocation="CurrentUser"
                    storeName="My"
                    x509FindType="FindByThumbprint"/>

Nun habe ich etwas gedacht, nun würde der Kunde am Ende mit

<identity>
  <certificate encodedValue="encoded certificate"/>
</identity>

Und es wird in der Lage sein zu überprüfen-Dienst-Anmeldeinformationen zimmerreserviereung, ohne das Sie das installierte Zertifikat in den store auf der client-Maschine.

War ich überrascht lernen , obwohl ich die Anmeldedaten zum Zertifikat, WSDL macht

<Identity>
   <Dns>Foo</Dns>
</Identity>

Wieder, auf service kann ich-Identität zu CertificateReference und es Haken bis zu dem gleichen Zertifikat und dann WSDL veröffentlicht wird Identität als X509Certificate, aber wenn ich dem client ausgeführt werden, die Einstellung wird ignoriert, und ich am Ende mit Fehlermeldung:

System.ServiceModel.Sicherheit.SecurityNegotiationException:
Das X. 509-Zertifikat CN=xxx ist nicht in
Vertrauenswürdige Personen zu speichern. Die X. 509
Zertifikat CN=xxx-chain-Gebäude
fehlgeschlagen. Das Zertifikat, das verwendet wurde
hat eine Vertrauenskette, dass kann nicht sein
verifiziert. Das Zertifikat ersetzen oder
ändern Sie die certificateValidationMode.
Eine Zertifikatkette wurde zwar verarbeitet, aber
beendet in einem root-Zertifikat, die
nicht vertrauenswürdig ist, wird durch den trust provider.

Ist es ein Weg, um Kunden zu nutzen, dass der Wert aus der config und arbeiten, ohne Installation eines service-Zertifikats (oder der Wurzel) auf der client-Maschine?

[UPDATE]
Während der Einstellung certificateValidationMode auf keine Ausnahme machen gehen Sie Weg ist es nicht akzeptabel, die Lösung aus der Sicht der Sicherheit.

Macht es der client nur erkennen, dass es erhalten "einige" - Zertifikat, ohne sich in details. Dies stellt die gesamte Palette von " man in the middle Angriffe möglich. Es wird noch nicht überprüfen, die Informationen, die durch (angeblichen) Dienstes gegen das Zertifikat anschließend in die config.

InformationsquelleAutor Krzysztof Kozmic | 2009-11-09

Schreibe einen Kommentar