2009-12-10 16 views
5

Ho un problema strano in corso. Sto cercando di connettermi al server Apple via TCP/SSL. Sto utilizzando un certificato Client fornito da Apple per le notifiche push. Ho installato il certificato sul mio server (Win2k3) in entrambi i certificati Local Root Certificate e Local Personal Certificates.Eccezione su SslStream.AuthenticateAsClient (il messaggio era formattato in modo errato)

Ora ho una libreria di classi che si occupa di quella connessione, quando chiamo questa libreria di classi da un'applicazione di console in esecuzione dal server funziona perfettamente, ma quando chiamo quella libreria di classi da una pagina asp.net o asmx servizio web ottengo la seguente eccezione.

Una chiamata a SSPI non è riuscita, vedere eccezione interna. Il messaggio ricevuto è stato inaspettato o formattato in modo errato.

Questo è il mio codice:

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 è dove si butta l'errore.

Questo mi sta facendo impazzire. Se l'applicazione della console può connettersi correttamente, ci deve essere qualche problema con la sicurezza del livello di rete asp.net che sta fallendo l'autenticazione ... non è sicuro, forse è necessario aggiungere qualcosa o qualche tipo di politica di sicurezza nel web.config. Anche solo per sottolineare che posso connettermi bene sul mio computer di sviluppo locale sia con console che con il sito web.

Qualcuno ha qualche idea?

+1

Ciao, sto affrontando lo stesso problema ora. Come hai risolto il problema? Si prega di aiutare – ramesh

risposta

1

ASP.NET viene eseguito con un account diverso, quindi è necessario utilizzare lo strumento WinHttpCertCfg.exe per consentire al seguente account di accedere al certificato che è necessario installare nelle cartelle personali/attendibili del computer locale.

  • ASPNET
  • Network Service
  • utenti autenticati

esempio

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

dove nome certificato è il nome descrittivo del certificato. È possibile ottenere lo strumento e le informazioni da here.

2

Avete installato il certificato sul vostro sistema? Se si sta utilizzando Windows dovrebbe essere in Computer locale/Cartelle personali o attendibili in Management Console (Esegui -> mmc).

-2

cambiamento X509Certificate a X509Certificate2 e anche X509CertificateCollection per X509Certificate2Collection

+0

-1 - questo non fa alcuna differenza. –

0

Ho avuto questo stesso problema - aggiunge l'utente ASP.NET Servizio DefaultAppPool/Rete non mi ha aiutato però.

Alla fine ho capito che il servizio Web ASP.NET non poteva accedere al certificato quando si trovava nella cartella Certificati di radice attendibili (anche se l'app della console può). L'ho trascinato nella cartella Certificati personali e ora posso chiamare il metodo sia dalla console che dalle app web.