Проблема с сертификатом на новом компьютере - учетные данные, предоставленные пакету, не распознаны - PullRequest
7 голосов
/ 24 февраля 2010

Я устанавливаю службу Windows на новую машину. Служба выполняет различные операции через SslStream через TCP, который использует проблемный сертификат.

Служба работала нормально с тем же кодом и тем же сертификатом на других компьютерах с Windows 2003. Но эта новая машина также Windows 2003 с 64-битным процессором.

Я сталкиваюсь с этой проблемой, когда пытаюсь запустить службу с идентификатором «Учетная запись службы». Он отлично работает с моими собственными учетными данными. (Опять же, он отлично работает на других 2 машинах с этой учетной записью службы)

У меня не включена «сильная защита» при импорте сертификата.

Вот трассировка стека.

System.ComponentModel.Win32Exception: Полномочия, предоставленные пакет не был признан в System.Net.SSPIWrapper.AcquireCredentialsHandle (SSPIInterface SecModule, пакет String, CredentialИспользуйте намерение, SecureCredential scc) в System.Net.Security.SecureChannel.AcquireCredentialsHandle (CredentialUse credUsage, SecureCredential & secureCredential) в System.Net.Security.SecureChannel.AcquireClientCredentials (байт [] & thumbPrint) в System.Net.Security.SecureChannel.GenerateToken (байт [] вход, смещение Int32, счет Int32, Байт [] и вывод) в System.Net.Security.SecureChannel.NextMessage (байт [] входящий, смещение Int32, счет Int32)
в System.Net.Security.SslState.StartSendBlob (байт [] входящий, подсчет Int32, AsyncProtocolRequest asyncRequest)
в System.Net.Security.SslState.ProcessReceivedBlob (байт [] буфер, число Int32, AsyncProtocolRequest asyncRequest)
в System.Net.Security.SslState.StartReadFrame (байт [] буфер, Int32 readBytes, AsyncProtocolRequest asyncRequest)
в System.Net.Security.SslState.StartReceiveBlob (байт [] буфер, AsyncProtocolRequest asyncRequest) в System.Net.Security.SslState.CheckCompletionBeforeNextReceive (ProtocolToken сообщение, AsyncProtocolRequest asyncRequest) в System.Net.Security.SslState.StartSendBlob (байт [] входящий, подсчет Int32, AsyncProtocolRequest asyncRequest)
в System.Net.Security.SslState.ForceAuthentication (Boolean receiveFirst, буфер Byte [], AsyncProtocolRequest asyncRequest)
в System.Net.Security.SslState.ProcessAuthentication (LazyAsyncResult lazyResult) в System.Net.Security.SslStream.AuthenticateAsClient (String targetHost, X509CertificateCollection clientCertificates, SslProtocols enabledSslProtocols, Boolean checkCertificateRevocation)

Ответы [ 3 ]

9 голосов
/ 24 февраля 2010

Я нашел проблему и ее решение.

Идея состоит в том, чтобы предоставить разрешения учетной записи, которая используется для идентификации службы.

Нужно использовать инструмент WinHttpCertCfg.exe. Это полезно для приложений, использующих клиентские сертификаты для получения авторизации.

Это хорошо объяснено здесь. http://support.microsoft.com/kb/901183

Спасибо Ферозу Дау (http://ferozedaud.blogspot.com/),), который ответил мне на другом форуме.

0 голосов
/ 06 февраля 2012

Я делал то, что здесь описано для Win 2003 Serv, и все еще не мог заставить его работать из-за mssg «учетные данные, предоставленные пакету, не распознан».

Я попробовал все вышеперечисленные решения безуспешно.

Наконец-то я заставил его работать следующим образом:

  1. makecert -pe -n "CN = CERT" -ss my -sr LocalMachine -a sha1 -sky exchange -eku 1.3.6.1.5.5.7.3.1 -в "CERT" -is MY -ir LocalMachine -sp " Microsoft RSA SChannel Cryptographic Provider "-sy 12 CERT.cer
  2. Использование MMC-копии из личного в доверенный корень
  3. Используйте сгенерированный сертификат (.cer) для вызова X509 из приложения-службы.

ПОЧЕМУ ... кто знает ..... рад, что это сработало для меня .... надеюсь, это облегчает другим

0 голосов
/ 15 ноября 2010

У меня была эта проблема как при работе под учетной записью ASP.NET, так и при использовании службы Windows (под учетной записью локальной системы). Если вы работаете в ASP.NET, для Windows 2003 вам нужно использовать инструмент WinHttpCertCfg.exe, как описано выше в cdpnet. Windows 2008 R2 позволяет получить доступ к правам с помощью графического интерфейса, что является хорошим улучшением.

Однако при работе в качестве службы Windows необходимо убедиться, что сертификат находится в хранилище личных сертификатов, перейдя в mmc и добавив оснастку сертификата для учетной записи службы Windows, или если вы используете Учетная запись «Локальная система», просто получите оснастку для локального компьютера.

Вот разница, которую я нашел ...

Если вы установили личный сертификат в хранилище сертификатов своего пользователя, скопировали и вставили его в локальное хранилище компьютеров, это не всегда работает. Однако, если вы удалите сертификат из хранилища локального компьютера, личной папки, вы можете затем щелкнуть правой кнопкой мыши личную папку в хранилище локального компьютера, затем импортировать и пройти через мастер.

По какой-то причине это исправляет это и назначает правильные разрешения для использования сертификата. Удачи!

...