Certificado problema con una nueva máquina - credenciales suministradas al paquete no reconocido
-
22-09-2019 - |
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)
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:
- 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
- Uso de copia MMC de personal a raíz de confianza
- 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