Certificado problema con una nueva máquina - credenciales suministradas al paquete no reconocido

StackOverflow https://stackoverflow.com/questions/2322560

Pregunta

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 un problema.

El servicio ha estado funcionando muy bien con el mismo código y el mismo certificado en otros 2 equipos con Windows 2003. Sin embargo, esta nueva máquina es Windows 2003 con procesador de 64 bits también.

Me postulo a este problema cuando estoy tratando de ejecutar el servicio con la identidad de una 'cuenta de servicio'. Funciona bien con mis propias credenciales. (Una vez más, funciona muy bien en otras 2 máquinas con esta cuenta de servicio)

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

Aquí está el seguimiento de la pila.

  

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

¿Fue útil?

Solución

He encontrado el problema y su solución.

La idea es conceder permisos a la cuenta que se utiliza para la identidad de servicio.

necesidad de utilizar una herramienta WinHttpCertCfg.exe. Esto es útil para aplicaciones que utilizan certificados de cliente para obtener la autorización.

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

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

Otros consejos

he tenido este problema, tanto cuando se ejecuta en la cuenta de ASP.NET o cuando se utiliza un servicio de Windows (en la cuenta sistema local). Si usted está funcionando bajo ASP.NET, para Windows 2003 es necesario utilizar la herramienta WinHttpCertCfg.exe como se describe por cdpnet anteriormente. Windows 2008 R2 le permite acceder a los derechos de uso de la interfaz gráfica de usuario, que es una buena mejora.

Sin embargo, cuando se ejecuta como un servicio de Windows, es necesario asegurarse de que el certificado está en el almacén de certificados personales, entrando en el MMC y agregar el complemento Certificado, ya sea para la cuenta de servicio de Windows, o si está utilizando el cuenta 'Sistema local', acaba de obtener el complemento para el equipo local.

Esta 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 se elimina el certificado del almacén de equipo local, la carpeta personal, a continuación, puede hacer clic derecho en la carpeta personal en la tienda local de computadoras, a continuación, importe y pasar por el asistente.

Por alguna razón, esta lo fija y asignados los permisos correctos para utilizar el certificado. Buena suerte!

que estaba haciendo lo que aquí se describe para un triunfo 2003 Serv y todavía no podía conseguir que funcione debido a las "credenciales suministradas al paquete no reconocido" MSSG.

He intentado todas las soluciones anteriores sin éxito.

Por último, me tengo que trabajar haciendo lo siguiente:

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

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top