So geben Sie akzeptierte Zertifikate für die Clientauthentifizierung in .NET SslStream an

StackOverflow https://stackoverflow.com/questions/53824

  •  09-06-2019
  •  | 
  •  

Frage

Ich versuche, die .Net System.Security.SslStream-Klasse zu verwenden, um die Serverseite eines SSL/TLS-Streams mit Client-Authentifizierung zu verarbeiten.

Um den Handshake durchzuführen, verwende ich diesen Code:

SslStream sslStream = new SslStream(innerStream, false, RemoteCertificateValidation, LocalCertificateSelectionCallback);
sslStream.AuthenticateAsServer(serverCertificate, true, SslProtocols.Default, false);

Leider führt dies dazu, dass SslStream eine CertificateRequest sendet, die die Betreffnamen aller Zertifikate in meinem CryptoAPI Trusted Root Store enthält.

Ich würde dies gerne überschreiben können.Für mich ist es keine Option, vom Benutzer die Installation oder Entfernung von Zertifikaten aus dem Trusted Root Store zu verlangen.

Es sieht so aus, als ob SslStream darunter SSPI/SecureChannel verwendet. Wenn also jemand weiß, wie man das Äquivalent mit dieser API macht, wäre das auch hilfreich.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Es sieht nicht so aus, wie dies derzeit möglich ist, die .NET-Bibliotheken.

Ich löste es durch die Mono-Klassenbibliothek Implementierung von System.Security.SslStream verwenden, die einen besseren Zugang zu Überschreiben der Server Verhalten während des Händedruck gibt.

Andere Tipps

Was die Zertifikatsüberprüfung tut wird alle Zertifikate in der Kette zu validieren. Um das zu tun, dass es wirklich nur den Root-Shop von jedem dieses cerficates in Verbindung.

Wenn das nicht etwas, was Sie wollen passieren Sie Ihre eigenen Stammspeicher lokal bereitstellen können.

Es ist nicht die Validierung Teil I geändert werden soll. Das Problem ist in dem anfänglichen Handshake, der Server überträgt die Nachricht den Client zu informieren, dass die Client-Authentifizierung erforderlich ist (das ist die Certificate message). Im Rahmen dieser Nachricht sendet der Server die Namen von Zertifizierungsstellen, die es als Emittenten des Client-Zertifikats zu akzeptieren. Es ist diese Liste, die standardmäßig enthält alle bewährten Roots in den Laden.

Aber wenn möglich, den Zertifikat Stammspeicher für eine einzelne Anwendung außer Kraft zu setzen, das wäre wahrscheinlich das Problem beheben. Meinst Du das? Und wenn ja, wie mache ich das?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top