2010-02-23 26 views
7

Instaluję usługę Windows na nowej maszynie. Usługa wykonuje różne operacje przez SslStream przez TCP, który używa certyfikatu, którego dotyczy problem.Problem z certyfikatem dla nowego komputera - dane uwierzytelniające dostarczone do pakietu nierozpoznane

Usługa działa poprawnie z tym samym kodem i tym samym certyfikatem na innych komputerach z systemem Windows 2000. Ale ta nowa maszyna to Windows 2003 z 64-bitowym procesorem.

Problem ten występuje, gdy próbuję uruchomić usługę z tożsamością "konta usługi". Działa dobrze z moimi własnymi referencjami. (Ponownie działa poprawnie na innych 2 komputerach z tym kontem usługi)

Nie mam włączonej "silnej ochrony" podczas importowania certyfikatu.

Oto ślad stosu.

System.ComponentModel.Win32Exception: Poświadczenia dołączone do pakietu nie zostały ujęte w System.Net.SSPIWrapper.AcquireCredentialsHandle (SSPIInterface SecModule, pakiet String CredentialUse intencji, SecureCredential SCC) w System.Net.Security.SecureChannel.AcquireCredentialsHandle (CredentialUse credUsage, secureCredential & secureCredential) w System.Net.Security.SecureChannel.AcquireClientCredentials (bajty [] &odcisk palca) na System.Net.Security.SecureChannel.GenerateToken (bajt [] wejściowego Int32 offset liczyć Int32, bajtów [] & wyjścia) w System.Net.Security.SecureChannel.NextMessage (bajt [] przychodzący, Int32 offset Ilość Int32)
w System.Net.Security.SslState.StartSendBlob (bajty [] przychodzące, liczba Int32, AsyncProtocolRequest asyncRequest)
w System.Net.Security.SslState.ProcessReceivedBlob (bajty [] bufor, liczba Int32, AsyncProtocolRequest asyncRequest)
w System.Net.Security.SslState.StartReadFrame (bajty [] bufor Int32 readBytes, AsyncProtocolRequest asyncRequest)
w System.Net.Security.SslState.StartReceiveBlob (bajty [] bufor AsyncProtocolRequest asyncRequest) w System.Net.Security.SslState.CheckCompletionBeforeNextReceive (ProtocolToken wiadomości, AsyncProtocolRequest asyncRequest) w System.Net.Security.SslState.StartSendBlob (bajty [] przychodzące, liczba Int32, AsyncProtocolRequest asyncRequest)
w System.Net.Security.SslState.ForceAuthentication (logiczna receiveFirst, bajt [] bufor AsyncProtocolRequest asyncRequest)
w System.Net.Security.SslState.ProcessAuthentication (LazyAsyncResult lazyResult) w System.Net.Security. SslStream.AuthenticateAsClient (String targetHost, X509CertificateCollection clientCertificates, SslProtocols enabledSslProtocols, Boolean checkCertificateRevocation)

+1

Spójrz na pierwszy wynik wyszukiwania: http://www.google .pl/search? q = "+ dane uwierzytelniające + dostarczone + do + pakietu + były + nie + rozpoznane" –

+0

Przeglądałem wątek na forum, Wim.I poprawnie wyjaśnia, co się tutaj dzieje. Powodem, dla którego nie działałoby to dla mnie było to, że musiałem rozwiązać to dla "konta usługi", którego nie można użyć do zalogowania się do komputera i zainstalowania certyfikatu pod tą tożsamością. Ale właściwy sposób rozwiązania tego problemu dla "everbody" jest wymieniony w następującym artykule, który opublikowałem w "odpowiedzi". – cdpnet

Odpowiedz

9

znalazłem problemu i jego rozwiązania.

Pomysł polega na udzieleniu uprawnień do konta, które służy do tożsamości usługi.

Potrzebujesz użyć narzędzia WinHttpCertCfg.exe. Jest to przydatne w przypadku aplikacji używających certyfikatów klienta do uzyskania autoryzacji.

Jest to ładnie wyjaśnione tutaj. http://support.microsoft.com/kb/901183

Dzięki Feroze Daud (http://ferozedaud.blogspot.com/), który odpowiedział mi na innym forum.

+0

+1 dzięki za udostępnienie rozwiązania –

0

Miałem ten problem zarówno podczas pracy pod kontem ASP.NET, jak i przy korzystaniu z usługi Windows (pod kontem Local System). Jeśli używasz ASP.NET, dla Windows 2003 musisz użyć narzędzia WinHttpCertCfg.exe, jak opisano powyżej w cdpnet. System Windows 2008 R2 umożliwia dostęp do uprawnień za pomocą graficznego interfejsu użytkownika, co jest dobrym ulepszeniem.

Jednak, gdy działasz jako usługa Windows, musisz upewnić się, że certyfikat znajduje się w osobistym magazynie certyfikatów, przechodząc do mmc i dodając przystawkę certyfikatu dla konta usługi systemu Windows lub jeśli używasz na koncie "System lokalny", wystarczy przystawić przystawkę do komputera lokalnego.

Oto różnica Znalazłem ...

Gdybyś zainstalował prywatnego certyfikatu do magazynu certyfikatów twojej własnej użytkownika i kopiować i wklejać je do lokalnego sklepu komputerowego, to nie zawsze działa. Jeśli jednak usuniesz certyfikat z lokalnego magazynu komputera, osobistego folderu, możesz kliknąć prawym przyciskiem myszy na osobisty folder w lokalnym magazynie komputera, a następnie zaimportować i przejść przez kreatora.

Z jakiegoś powodu rozwiązuje to i przypisuje odpowiednie uprawnienia do korzystania z certyfikatu. Powodzenia!

-1

Robiłem to, co jest tutaj opisane dla Serwera Win 2003 i nadal nie mogłem go uruchomić, ponieważ mssg "referencje dostarczone do pakietu nie zostały rozpoznane".

Próbowałem wszystkich powyższych rozwiązań bez powodzenia.

Wreszcie dostałem go do pracy w następujący sposób:

  1. MakeCert -pe -n "CN = CERT" -p moich -SR LocalMachine -a SHA1 -ský giełdy -eku 1.3.6.1.5.5. 7.3.1 -in "CERT" -jest MOJEJ -ir LocalMachine -sp "Microsoft RSA SChannel Cryptographic Provider" -Sy 12 CERT.cer
  2. Korzystanie z osobistego kopię MMC do zaufanego głównego
  3. korzystania z certyfikatu wygenerowanego (cer) dla wywołania X509 z aplikacji usługi.

dlaczego ... kto wie ..... zadowolony, że pracował dla mnie .... mam nadzieję, że ułatwi to innym