2009-12-10 7 views
5

Ich habe wierd Problem los. Ich versuche, mich über TCP/SSL mit Apple Server zu verbinden. Ich verwende ein Client-Zertifikat von Apple für Push-Benachrichtigungen. Ich habe das Zertifikat auf meinem Server (Win2k3) sowohl im lokalen vertrauenswürdigen Stammzertifikat als auch im lokalen persönlichen Zertifikatordner installiert.Ausnahme bei SslStream.AuthenticateAsClient (Die Nachricht wurde falsch formatiert)

Jetzt habe ich eine Klassenbibliothek, die diese Verbindung behandelt, wenn ich diese Klassenbibliothek von einer Konsolenanwendung aufrufen, die vom Server läuft, funktioniert es absolut gut, aber wenn ich diese Klassenbibliothek von einer asp.net-Seite oder asmx Web-Service bekomme ich die folgende Ausnahme.

Ein Aufruf an SSPI ist fehlgeschlagen, siehe innere Ausnahme. Die empfangene Nachricht war unerwartet oder falsch formatiert.

Dies ist mein Code:

X509Certificate cert = new X509Certificate(certificateLocation, certificatePassword);      
X509CertificateCollection certCollection = new X509CertificateCollection(new X509Certificate[1] { cert }); 
// OPEN the new SSL Stream 
SslStream ssl = new SslStream(client.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null);      
ssl.AuthenticateAsClient(ipAddress, certCollection, SslProtocols.Default, false); 

ssl.AuthenticateAsClient ist, wo der Fehler ausgelöst wird.

Das macht mich verrückt. Wenn die Konsolenanwendung eine Verbindung herstellen kann, muss ein Problem mit der Sicherheitsstufe der asp.net-Netzwerkschicht bestehen, bei der die Authentifizierung fehlschlägt ... nicht sicher, vielleicht müssen Sie in der Datei web.config etwas oder eine Sicherheitsrichtlinie hinzufügen. Auch nur um darauf hinzuweisen, dass ich auf meiner lokalen Entwicklungsmaschine sowohl mit der Konsole als auch mit der Website gut kommunizieren kann.

Wer hat irgendwelche Ideen?

+1

Hallo, ich habe jetzt das gleiche Problem. Wie hast du das Problem gelöst? Bitte helfen Sie – ramesh

Antwort

1

Die ASP.NET läuft unter einem anderen Konto, so dass Sie WinHttpCertCfg.exe Werkzeug verwenden müssen, um dem folgenden Konto Zugriff auf das Zertifikat zu ermöglichen, das Sie in Persönliche/Vertrauenswürdige Ordner Lokaler Computer installieren sollten.

  • ASPNET
  • Network Service
  • authentifizierte Benutzer

z.B.

winhttpcertcfg -g -c LOCAL_MACHINE\MY -s "CertificateName" -a "ASPNET" 

Dabei ist der Zertifikatsname der Anzeigename Ihres Zertifikats. Sie können das Werkzeug und die Informationen von here erhalten.

2

Haben Sie das Zertifikat auf Ihrem System installiert? Wenn Sie Windows ausführen, sollte es in Lokaler Computer/Persönlich oder Vertrauenswürdige Ordner unter Management Console (Ausführen -> MMC) sein.

-2

Änderung X509Certificate zu X509Certificate2 und auch X509CertificateCollection zu X509Certificate2Collection

+0

-1 - das macht überhaupt keinen Unterschied. –

0

Ich hatte das gleiche Problem - Hinzufügen des ASP.NET DefaultAppPool/Network Service Benutzer hat mir nicht obwohl helfen.

Ich habe schließlich herausgefunden, dass der ASP.NET-Webdienst nicht auf das Zertifikat zugreifen konnte, obwohl es sich im Ordner "Vertrauenswürdige Stammzertifikate" befand (auch wenn die Konsolenanwendung dies kann). Ich habe es zurück in den Ordner "Persönliche Zertifikate" gezogen und kann nun die Methode sowohl von der Konsole als auch von Web-Apps aus aufrufen.

Verwandte Themen