2010-02-23 8 views
7

Estoy instalando un servicio de Windows en una máquina nueva. El servicio realiza varias operaciones sobre SslStream a través de TCP, que utiliza el certificado en el problema.Problema de certificado con una máquina nueva: las credenciales suministradas al paquete no son reconocidas

El servicio ha estado funcionando bien con el mismo código y el mismo certificado en otras 2 máquinas con Windows 2003. Pero esta nueva máquina también es Windows 2003 con procesador de 64 bits.

Me encuentro con este problema cuando intento ejecutar el servicio con una identidad de 'Cuenta de servicio'. Funciona bien con mis propias credenciales. (De nuevo, funciona bien en otras 2 máquinas con esta cuenta de servicio)

No tengo habilitada la "protección fuerte" al importar el certificado.

Aquí está el seguimiento de la pila.

System.ComponentModel.Win32Exception: las credenciales suministradas al paquete no fueron reconocidos en System.Net.SSPIWrapper.AcquireCredentialsHandle (SSPIInterface SecModule, paquete String, CredentialUse intención, SecureCredential SCC) en System.Net.Security.SecureChannel.AcquireCredentialsHandle (CredentialUse credUsage, secureCredential & secureCredential) en System.Net.Security.SecureChannel.AcquireClientCredentials (byte [] & huella digital) a System.Net.Security.SecureChannel.GenerateToken (byte [] de entrada, Int32 compensado, cuente Int32, byte [] & salida) en System.Net.Security.SecureChannel.NextMessage (byte [] entrante, Int32 compensado, recuento Int32)
en System.Net.Security.SslState.StartSendBlob (byte [] entrante, cuenta Int32, AsyncProtocolRequest asyncRequest)
en System.Net.Security.SslState.ProcessReceivedBlob (Byte [] búfer, cuenta Int32, AsyncProtocolRequest asyncRequest)
en System.Net.Security.SslState.StartReadFrame (byte [] tampón, Int32 readBytes, AsyncProtocolRequest asyncRequest)
en System.Net.Security.SslState.StartReceiveBlob (byte [] buffer, AsyncProtocolRequest asyncRequest) en System.Net.Security.SslState.CheckCompletionBeforeNextReceive (ProtocolToken mensaje , AsyncProtocolRequest asyncRequest) en System.Net.Security.SslState.StartSendBlob (byte [] entrante, Int32 cuenta, AsyncProtocolRequest asyncRequest)
en System.Net.Security.SslState.ForceAuthentication (Boolean receiveFirst, [] memoria intermedia de bytes, AsyncProtocolRequest asyncRequest)
en System.Net.Security.SslState.ProcessAuthentication (LazyAsyncResult lazyResult) en System.Net.Security. SslStream.AuthenticateAsClient (String targetHost, X509CertificateCollection ClientCertificates, SslProtocols enabledSslProtocols, Boolean checkCertificateRevocation)

+1

Mira el primer resultado de búsqueda: http://www.google .com/search? q = "Las + credenciales + suministradas + a + el + paquete + fueron + no + reconocidas" –

+0

Miré el hilo del foro, Wim.Y está explicando correctamente lo que está sucediendo aquí. La razón por la que no funcionaría para mí fue porque tuve que resolver esto para obtener una 'cuenta de servicio' que no se puede usar para iniciar sesión en la máquina e instalar el certificado bajo esa identidad. Pero la forma correcta de resolverlo para 'todos' se menciona en el siguiente artículo que publiqué en 'respuesta'. – cdpnet

Respuesta

9

I encontró el problema y su solución.

La idea es otorgar permisos a la cuenta que se utiliza para la identidad del servicio.

Necesito utilizar una herramienta WinHttpCertCfg.exe. Esto es útil para aplicaciones que usan certificados de clientes para obtener autorización.

Está muy bien explicado aquí. http://support.microsoft.com/kb/901183

Gracias a Feroze Daud (http://ferozedaud.blogspot.com/), quien me contestó en un foro diferente.

+0

+1 gracias por compartir la solución –

0

He tenido este problema tanto al ejecutar bajo la cuenta ASP.NET como al usar un servicio de Windows (en la cuenta del sistema local). Si está ejecutando en ASP.NET, para Windows 2003 necesita usar la herramienta WinHttpCertCfg.exe como se describe anteriormente en cdpnet. Windows 2008 R2 le permite acceder a los derechos utilizando la GUI, lo cual es una buena mejora.

Sin embargo, cuando se ejecuta como un servicio de Windows, debe asegurarse de que el certificado esté en el almacén de certificados personales, vaya a mmc y agregue el complemento de certificado para la cuenta de servicio de Windows o si está utilizando la cuenta del 'Sistema local', simplemente obtenga el complemento para la computadora local.

Aquí es la diferencia que he encontrado ...

Si se hubiera instalado el certificado personal al almacén de certificados de su propio usuario y copiado y pegado a la tienda local de computadoras, esto no siempre funciona. Sin embargo, si elimina el certificado del almacén de la computadora local, la carpeta personal, puede hacer clic derecho en la carpeta personal en la tienda de informática local, luego importar y ejecutar el asistente.

Por alguna razón, esto lo soluciona y asigna los permisos correctos para usar el certificado. ¡Buena suerte!

-1

Estaba haciendo lo que se describe aquí para un servidor Win 2003 y aún así no pude conseguir que funcione debido a las credenciales de mssg "suministradas al paquete no reconocido".

Probé todas las soluciones anteriores sin éxito.

fin llegué a trabajar haciendo lo siguiente:

  1. 1.3.6.1.5.5 -SS mi -sr LocalMachine -a sha1 -sky intercambio -eku makecert -pe -n "CN = CERT". 7.3.1 -en "CERT", es MI LocalMachine -ir -SP "cifrado Microsoft RSA SChannel Proveedor" -sy 12 Cert.cer
  2. Usando copia MMC de personal a raíz de confianza
  3. Usar el certificado generado (.cer) para la llamada X509 desde su aplicación de servicio.

QUÉ ... ¿quién sabe ..... contento de que trabajó para mí .... espero que esto hace que sea más fácil para los demás

Cuestiones relacionadas