2009-03-05 11 views
2

In dieser Frage geht es nur darum, einen SslPolicyError.RemoteCertificateNotAvailable Fehler zu beheben.SslStream auf TCP-Server kann Clientzertifikat mit RemoteCertificateNotAvailable nicht überprüfen

Ich habe einen TCP-Server mit SSLStream und einen TCP-Client für das andere Ende entwickelt.

authentifizieren ich den Server mit:

sslStream.BeginAuthenticateAsServer 

authentifizieren ich den Client mit:

sslStream.BeginAuthenticateAsClient 

ich meine Client-Zertifikat von Trusted Publishers - Local Machine bin Laden.

Beide laufen auf derselben Maschine.

Ich habe versucht, das Client-Zertifikat aus den CER- und PFX-Dateien zu laden, anstatt vom vertrauenswürdigen Publisher-Store. Der Client (Remote) -Zertifikatvalidator-Rückruf des Servers schlägt jedoch fehl, indem festgestellt wird, dass SslPolicyErrors über einen RemoteCertificateNotAvailable-Fehler verfügt.

Antwort

4

Die Verbindung kam nicht durch, aber es gibt ein Problem, das ich mit dem statment beschmutzen kann:

„Ich von Trusted Publishers mein Client-Zertifikat geladen“

Client-Zertifikate typischerweise in einem privaten Speicher leben ein Benutzerkonto Gleiches gilt für Server-Zertifikate (ihnen wird wahrscheinlich eine andere OID für die beabsichtigte Verwendung zugeordnet, obwohl sie "Client-Authentifizierung" oder "Server-Authentifizierung" ist). Es wäre seltsam für Sie, ein Zertifikat mit einem privaten Schlüssel im Trusted Publishers Store zu haben, denke ich.

Wenn Sie in CertMgr.msc auf ein Client- oder Serverzertifikat doppelklicken, sollte die Meldung "Dieses Zertifikat weist einen privaten Schlüssel" unten angezeigt werden.

Wenn nicht, haben Sie nur ein halbes Schlüsselpaar - Verschlüsselung und Authentifizierung erfordern den privaten Schlüssel. Das Server-Zertifikat benötigt am Serverende einen privaten Schlüssel, und das Client-Zertifikat benötigt auf Client-Seite einen privaten Schlüssel.

+0

Ich habe auch versucht, das Zertifikat von "Personal" zu laden. Mein Zertifikat hat einen privaten Schlüssel. – cdpnet

+1

Certutil -verify -lullfetch sollte überprüfen, ob das Zertifikat korrekt validiert werden kann. Wenn nicht, keine Würfel. Das Server-Zertifikat benötigt "Verwendungszweck: Server-Authentifizierung" und das Client-Zertifikat benötigt wahrscheinlich "Client-Authentifizierung", wenn es einen Client eindeutig identifizieren soll. – TristanK

+0

Tristan. Sie haben das Problem tatsächlich entdeckt. Ich hatte ein Zertifikat mit dem Zweck nur der Serverauthentifizierung. Ich brauchte das Zertifikat, das die Client-Authentifizierung unterstützt. Also, sobald ich das verstanden habe, hat es funktioniert. – cdpnet

Verwandte Themen