Error de Signtool: ¿No se encontraron certificados que cumplieran con todos los criterios dados con una aplicación de la Tienda Windows?

294

Estoy tratando de firmar un paquete appx de Windows 8 con un archivo pfx que tengo. Estoy usando un comando como este:

signtool.exe sign /fd sha256 /f "key.pfx" "app.appx"

Y de esto, obtengo:

Error de SignTool: no se encontraron certificados que cumplieran con todos los criterios establecidos.

¿Qué "criterios" no estoy cumpliendo? Esto es solo para pruebas, por lo que se trata de certificados autofirmados. Intenté importar la clave y luego firmarla, pero siempre produce el mismo error. ¿Cómo puedo solucionar esto?

Earlz
fuente
Creo que Signtoolestá tratando de encontrar el certificado en el almacén de certificados raíz de confianza y no tiene certificados de firma de código allí.
crea7or
15
Tuve este error porque el certificado que se usó para la firma había expirado
Mark Homer
1
Tuve un problema similar y publiqué una respuesta aquí. Espero que esto ayude.
SurenSaluka

Respuestas:

590

Al obtener este error a través de Visual Studio fue porque había una configuración de certificado de firma para que coincida con la computadora en la que se desarrolló originalmente.

Puede verificar esto yendo a las propiedades del proyecto> pestaña de firma y verificando los detalles del certificado.

Puede desmarcar "Firmar los manifiestos de ClickOnce" para deshabilitar la firma.

Propiedades de firma

Si no desea desactivar esta opción, deberá instalar el certificado.

JDandChips
fuente
12
Solo para agregar a lo que @JDandChips sugirió: para fines de depuración y prueba, también puede usar un certificado de prueba temporal haciendo clic en el botón 'Crear certificado de prueba' que se muestra en la captura de pantalla anterior.
nam
¿Qué quiere decir "instalar el certificado"?
Sean Kendle
En mi situación, el certificado estaba disponible en la máquina en la que se desarrolló originalmente, por lo que podría elegir "Seleccionar del archivo ..." para instalar el certificado que falta. ¡Alternativamente, siempre puedes crear uno nuevo y usarlo!
JDandChips
@JDandChips ¿Cómo se crea un nuevo certificado?
erotavlas
3
Para VS novatos. ¡Asegúrate de hacer clic derecho en el proyecto, no en la solución, porque aparecerá un menú completamente diferente!
B5A7
109

Prueba con / depurar. 1,2 Como en:

signtool sign /debug /f mypfxfile.pfx /p <password> (mydllexectuable).exe

Le ayudará a descubrir qué está pasando. Debería obtener una salida como esta:

The following certificates were considered:
    Issued to: <issuer>
    Issued by: <certificate authority> Class 2 Primary Intermediate Server CA
    Expires:   Sun Mar 01 14:18:23 2015
    SHA1 hash: DD0000000000000000000000000000000000D93E

    Issued to: <certificate authority> Certification Authority
    Issued by: <certificate authority> Certification Authority
    Expires:   Wed Sep 17 12:46:36 2036
    SHA1 hash: 3E0000000000000000000000000000000000000F

After EKU filter, 2 certs were left.
After expiry filter, 2 certs were left.
After Private Key filter, 0 certs were left.
SignTool Error: No certificates were found that met all the given criteria.

Puede ver qué filtro está causando que su certificado no funcione o si no se consideró ningún certificado.

Cambié los hashes y otra información, pero deberías entender la idea. Espero que esto ayude.


1 Nota: signtooles particular sobre dónde /debugse coloca la opción. Tiene que ir después de la signdeclaración.
2 También tenga en cuenta: la /debugopción solo funciona con algunas versiones de signtool. La versión WDK tiene la opción, mientras que la versión SDK de Windows no.

Daniel
fuente
3
Funciona para mi. No es que entienda la respuesta de signtool, pero / debug hizo lo que debería. ¡Votación a favor!
noelicus
1
Este comando es particular con el lugar donde coloca el / debug. Si lo pone fuera de servicio, informará un error.
Daniel
12
/ debug funciona solo para versiones específicas de signtool.exe. El que viene con el WDK proporciona esta opción, el del SDK de Windows no.
Paul Kertscher
3
Además, / debug debe ir después del signo signtool, no en el medio.
Denis V
Muestra que mi certificado expiró. Buen trabajo.
avantprime
36

Siempre verifique primero la fecha de vencimiento de su certificado porque la mayoría de los certificados tienen una fecha de vencimiento. En mi caso, el certificado ha expirado y estaba tratando de construir el proyecto.

niño prodigio
fuente
2
Para verificar la caducidad del certificado, vaya a la línea de comando, navegue hasta donde está su certificado y luego ingrese certutil -dump mycertificate.pfx. Mire la última entrada ya que las primeras son la CA, no su certificado de firma de código.
HockeyJ
23

Si no tiene que firmar la aplicación, haga clic derecho en su proyecto

Project Properties -> Signing -> uncheck "Sign the ClickOnce Manifest"

Además, como sugiere este artículo de MS,

Si usa Visual Studio 2008 y apunta a .NET 3.5 y usa actualizaciones automáticas, puede cambiar el certificado e implementar una nueva versión,

nPcomp
fuente
1
También puede hacer clic en crear certificado de prueba para continuar. gracias
MindRoasterMir
16

simplemente desmarque 'Firmar el clic una vez que se manifieste' en la pestaña de firma en las propiedades del proyecto, eliminará el error y puede crear uno nuevo a partir de ahí.

Sourav Sharma
fuente
15

Tengo el mismo problema, resultó que la clave privada del certificado no tenía permiso.
Para solucionarlo, abra la administración de certifacte, busque su certificado, haga clic con el botón derecho -> Administrar claves privadas y luego, en la parte superior de la seguridad, asegúrese de que su usuario tenga permisos y permisos, eso lo solucionó para mí.

usuario3740240
fuente
15

En mi caso, tengo el tipo incorrecto de certificado que estoy tratando de asociar.
Tenía "Autenticación del servidor" en lugar de "Firma de código" .
Debería poder ver esto en el complemento de Certificado en la sección Propósito previsto.
Después de eso, simplemente funciona bien.

maridob
fuente
1
Sí, es decir, estuve luchando durante 2 días buscando esta respuesta.
Hakan Fıstık
14

En caso de que alguien más se encuentre con esto: mi problema terminó siendo que necesitaba ejecutar el símbolo del sistema como administrador antes de usar la aplicación signtool.exe. Entonces todo funciona de maravilla.

Dave
fuente
11
No ayudó en mi caso.
bgplaya
1
Estoy ejecutando signtool de VS2015 como un script, y estaba enfrentando el mismo problema. Ejecuté el VS2015 como administrador y el signtool pudo firmar mi archivo>
hamaney
10

Tengo el mismo problema en el desarrollo de la aplicación de mi consola y, como solución rápida ,

ir a project propertiesentonces

haga clic en la signingpestaña y desmarque "Firmar el manifiesto ClickOnce".

Descripción de la imagen:

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

FYI También puede ver esta solución de video de menos de un minuto . La imagen de arriba está tomada del video.

Muhammad Faizan Khan
fuente
1
También puede hacer clic en crear certificado de prueba para continuar. gracias
MindRoasterMir
9

Resolví esto mediante el uso de la /smbandera para especificar buscar en la tienda de máquinas en lugar de la predeterminada, que es Mi tienda (Usuario local). Además, puede ayudar a activar la depuración de signtool mediante el uso /debug.

jle
fuente
8

Tuve este problema y no estoy completamente seguro de qué paso a continuación lo hizo funcionar, pero espero que esto ayude a alguien más ... esto es lo que hice:

  • Instale el certificado descargado (.crt) en los certificados (lo puse en la tienda "personal"). Haga clic derecho en el archivo .crt y haga clic en Instalar certificado .
  • Ejecute certmgr.mscy exporte el certificado (que se encuentra en la tienda que utilizó en el primer paso) como un archivo pfx que incluye una clave privada y propiedades extendidas (probablemente innecesarias)
  • Use el archivo .pfx exportado al firmar su proyecto
  • Ejemplo de signtool: signtool sign /f "c:\mycert.pfx" /p mypassword /d "description" /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetPath)
    donde la contraseña es la misma que se proporcionó durante la exportación
noelicus
fuente
1
Gracias, esto hizo el truco. Estaba usando el .crtarchivo que Comodo proporcionó en lugar de instalar el certificado y luego exportar el .pfxarchivo.
Joshua Pinter
1
Muchas gracias!
Bruno Soares
6

Estoy teniendo el mismo problema, leyendo algunas respuestas (publicadas aquí), vi que mi certificado expiró.

Simplemente cree uno nuevo desde mi proyecto de inicio. Luego, en el administrador de certificados eliminó el certificado caducado.

Ahora todo se compila bien.

Juan pablo gomez
fuente
5

Los criterios incluyen el nombre de la cuenta (cuya clave privada está asociada), dominio, empresa, fecha de vencimiento, fines previstos, entre otras cosas.

Hay muchas razones posibles para que ocurra este error, algunas ya se han enumerado. Aquí hay otro consejo: al importar un certificado, asegúrese de trabajar con el archivo original recibido de la autoridad de certificación (CA) , o de lo contrario algunas de las propiedades podrían perderse.

Ejemplo: recientemente intenté importar un certificado exportado desde una cuenta diferente en la misma máquina. El certificado se hizo visible para mi cuenta pero no estaba asociado con mi cuenta, y como resultado se signtoolnegó a reconocerlo sin proporcionar explícitamente el nombre del archivo y una contraseña. Lo cual, cuando se hace como parte del proceso de compilación y se escribe explícitamente en un archivo por lotes o en un archivo fuente, puede no ser lo suficientemente seguro. (Importar el certificado original emitido por CA lo resolvió).

Simon Hawkin
fuente
4

Tuve el mismo mensaje " Después del filtro de clave privada, quedaron 0 certificados " y pasé demasiado tiempo de mi vida tratando de entender qué significaba el mensaje.

El problema era que había instalado el certificado incorrectamente en el almacén de certificados de Windows, por lo que no había una clave privada asociada con el certificado de firma de código.

Lo que debería haber hecho fue esto:

  1. Usando Firefox o Internet Explorer, envíe la solicitud al emisor. Esto genera una CLAVE PRIVADA que el navegador almacena silenciosamente (aparece un cuadro de diálogo durante una fracción de segundo en Firefox). Tenga en cuenta que otros navegadores pueden no funcionar: su vida es demasiado corta para saber si lo hacen.

  2. Envía la solicitud, salta a través de los aros y lazos de validación del emisor, sacrifica una cabra, reza a los dioses, envía una declaración firmada de tus bisabuelos, etc.

  3. Descargue el certificado (.crt) e impórtelo en el mismo navegador . El navegador ahora tiene tanto la clave privada como el certificado .

  4. Exporte el certificado desde el navegador como un archivo de Intercambio de información personal (.p12). Se le pedirá que proporcione una contraseña para proteger este archivo.

  5. Mantenga una copia de seguridad del archivo .p12.

  6. Ejecute el Administrador de certificados (certmgr.msc), haga clic con el botón derecho en el almacén de certificados personales , seleccione Todas las tareas / Importar ... e importe el archivo .p12 a Windows. Se le pedirá la contraseña que utilizó para proteger el archivo. En este punto, dependiendo de sus requisitos de seguridad, puede marcar la clave como exportable para poder restaurar una copia de la tienda de Windows. También puede marcar que se requiere una contraseña antes de usarla si desea romper las secuencias de comandos por lotes.

  7. Ejecute signtool con éxito, exhale un suspiro de alivio y reflexione sobre la cantidad de su vida que ha desperdiciado debido a mensajes de error incorrectos y documentación deficiente o faltante.

MZB
fuente
2

También tuve este problema, lo intenté mucho. Utilicé el SDK y la firma de Visual Studio, pero en todas partes recibí "No se encontraron certificados que cumplieran con todos los criterios dados".

Solución: tenga en cuenta que si "después del filtro de clave privada": '0 left' aparece con la opción signtool sign / debug ..., la causa es que su PC no tiene la CA en la tienda. Para resolver esto, instale la CA primero (en mi caso, un archivo .crt), luego ejecute el letrero nuevamente. ¡Debería funcionar ahora mismo!

Signtool solo se puede usar con una CA solicitada y propiedad de la misma PC.

John Schellingerhout
fuente
No tuve ningún problema al usar signtool con una CA que provenía de otra PC.
bparker
2

Mi problema terminó siendo que no entendía las opciones de signtool. Había proporcionado la opción / n con algo que no coincidía con mi certificado. Cuando lo quité, dejó de quejarse.

Silwing
fuente
2

Tuve un problema similar, el nombre de mi computadora cambió y el certificado expiró. Pude resolver este problema creando un nuevo certificado de prueba.

En Visual Studio, haga clic derecho en el proyecto en el explorador de soluciones. Seleccionar propiedades. Seleccione Iniciar sesión en la ventana de propiedades. Haga clic en "Crear certificado de prueba ...". Ingrese la información de contraseña para el certificado de prueba y haga clic en Aceptar.

nate_weldon
fuente
2

Con / debug, cuando aparece este mensaje "Después del filtro de clave privada, quedan 0 certs", una razón podría ser que el archivo pfx no tiene la clave privada. Cuando exporte el certificado instalado a un archivo pfx, asegúrese de habilitar la casilla de verificación para incluir también la clave privada.

Prabhakaran Rajagopal
fuente
1

Vaya project propertiesy desactive todos los campos desde Firmantes de iniciar la compilación

ionsofa
fuente