2010-02-23 11 views
7

Sto installando un servizio Windows su una nuova macchina. Il servizio esegue varie operazioni su SslStream su TCP, che utilizza il certificato nel problema.Problema di certificato con una nuova macchina - credenziali fornite al pacchetto non riconosciuto

Il servizio ha funzionato correttamente con lo stesso codice e lo stesso certificato su altre macchine Windows 2003. Ma questa nuova macchina è Windows 2003 con processore a 64 bit.

Sto riscontrando questo problema quando sto tentando di eseguire il servizio con un'identità 'Account di servizio'. Funziona bene con le mie credenziali. (Anche in questo caso funziona bene su altri 2 computer con questo account di servizio)

Non è stata attivata la "protezione avanzata" durante l'importazione del certificato.

Ecco la traccia dello stack.

System.ComponentModel.Win32Exception: Le credenziali fornite al pacchetto non sono stati riconosciuti a System.Net.SSPIWrapper.AcquireCredentialsHandle (SSPIInterface SecModule, set di corde, CredentialUse intento, SecureCredential SCC) a System.Net.Security.SecureChannel.AcquireCredentialsHandle (CredentialUse credUsage, SecureCredential & secureCredential) a System.Net.Security.SecureChannel.AcquireClientCredentials (Byte [] & 0.123.516,41 milaThumbPrint) a System.Net.Security.SecureChannel.GenerateToken (Byte [] ingresso, offset Int32, Int32 conteggio, Byte [] & uscita) a System.Net.Security.SecureChannel.NextMessage (Byte [] entrante, offset Int32, Int32 conteggio)
a System.Net.Security.SslState.StartSendBlob (Byte [] entrante, conteggio Int32, AsyncProtocolRequest asyncRequest)
a System.Net.Security.SslState.ProcessReceivedBlob (Byte [] buffer, conteggio Int32, AsyncProtocolRequest asyncRequest)
a System.Net.Security.SslState.StartReadFrame (Byte [] tampone, Int32 readBytes, AsyncProtocolRequest asyncRequest)
a System.Net.Security.SslState.StartReceiveBlob (Byte [] tampone, AsyncProtocolRequest asyncRequest) a System.Net.Security.SslState.CheckCompletionBeforeNextReceive (ProtocolToken messaggio, AsyncProtocolRequest asyncRequest) a System.Net.Security.SslState.StartSendBlob (Byte [] in entrata, conta Int32, AsyncProtocolRequest asyncRequest)
a System.Net.Security.SslState.ForceAuthentication (booleano receiveFirst, Byte [] tampone, AsyncProtocolRequest asyncRequest)
a System.Net.Security.SslState.ProcessAuthentication (LazyAsyncResult lazyResult) a System.Net.Security. SslStream.AuthenticateAsClient (String TARGETHOST, X509CertificateCollection ClientCertificates, SslProtocols enabledSslProtocols, booleano checkCertificateRevocation)

+1

Guardate il primo risultato della ricerca: http://www.google .com/search? q = "Le + credenziali + fornite + a + il + pacchetto + erano + non + riconosciute" –

+0

Ho visto il thread del forum, Wim.E sta correttamente spiegando cosa sta succedendo qui. Il motivo per cui non avrebbe funzionato era che dovevo risolvere questo problema con un "account di servizio" che non può essere utilizzato per accedere alla macchina e installare il certificato con tale identità. Ma il modo giusto per risolverlo per "everbody" è menzionato nel seguente articolo che ho postato su "answer". – cdpnet

risposta

9

ho trovato il problema e la sua soluzione.

L'idea è di concedere le autorizzazioni all'account utilizzato per l'identità del servizio.

È necessario utilizzare uno strumento WinHttpCertCfg.exe. Ciò è utile per le applicazioni che utilizzano i certificati client per ottenere l'autorizzazione.

È ben spiegato qui. http://support.microsoft.com/kb/901183

Grazie a Feroze Daud (http://ferozedaud.blogspot.com/), che mi ha risposto su un altro forum.

+0

+1 grazie per aver condiviso la soluzione –

0

Ho riscontrato questo problema sia quando si esegue sotto l'account ASP.NET o quando si utilizza un servizio Windows (con l'account Sistema locale). Se stai utilizzando ASP.NET, per Windows 2003 devi utilizzare lo strumento WinHttpCertCfg.exe come descritto da cdpnet sopra. Windows 2008 R2 consente di accedere ai diritti utilizzando la GUI, che è un buon miglioramento.

Tuttavia, quando si esegue come servizio Windows, è necessario assicurarsi che il certificato si trovi nell'archivio certificati personale, accedendo a mmc e aggiungendo lo snap-in del certificato per l'account del servizio Windows o se si sta utilizzando l'account 'Sistema locale', basta ottenere lo snap-in per il computer locale.

Ecco la differenza che ho trovato ...

Se si ha installato il certificato personale per memorizzare il certificato del proprio utente e copiato e incollato al negozio di computer locale, questo non sempre funziona. Tuttavia, se si elimina il certificato dall'archivio del computer locale, cartella personale, è possibile fare clic con il tasto destro sulla cartella personale nell'archivio del computer locale, quindi importare e passare attraverso la procedura guidata.

Per qualche motivo, questo lo corregge e assegna le autorizzazioni corrette per l'utilizzo del certificato. In bocca al lupo!

-1

Stavo facendo ciò che è qui descritto per un Win 2003 Serv e ancora non riuscivo a farlo funzionare a causa del mssg "credenziali fornite al pacchetto non riconosciuto".

Ho provato tutte le soluzioni di cui sopra senza successo.

Alla fine ho preso a lavorare facendo quanto segue:

  1. "CN = CERT" 1.3.6.1.5.5 -ss mia -sr LocalMachine -a SHA1-Sky scambio -eku makecert -pe -n. 7.3.1 -in "CERT", è MY LocalMachine -ir -sp "Microsoft RSA SChannel Cryptographic Provider" -Sy 12 Cert.cer
  2. Utilizzando copia MMC dalla Personal alla radice attendibile
  3. utilizzare il certificato generato (cer) per la chiamata X509 dall'app di servizio.

PERCHE '... chissà ..... contento che ha funzionato per me .... spero che questo rende più facile agli altri