Mi pregunta está relacionada con esta . Lamentablemente, esa pregunta es sobre una CA diferente (Symantec) y utiliza un token de hardware diferente (de Safenet) y aunque las soluciones proporcionadas coinciden con el código de error, las circunstancias de mi caso no (entre otras cosas, la tarjeta inteligente Parece que no tengo registrado su propio proveedor bajo HKLM\SYSTEM\CurrentControlSet\Control\Cryptography\Providers).
Estoy usando un certificado de firma de código de código abierto de certum.pl. Estoy usando el signtool.exeSDK de Windows 10.0.18362.0y veo el siguiente error (con signtool sign /v /debug):
signtool.exe sign /v /debug /a /i Certum /ph /du "https://my.url" /d "short description" /fd sha256 /tr "http://timestamp.digicert.com" /td sha256 "mysoftware.exe"
The following certificates were considered:
Issued to: Open Source Developer, ...
Issued by: Certum Code Signing CA SHA2
Expires: ...
SHA1 hash: ...
Issued to: Open Source Developer, ...
Issued by: Certum Code Signing CA SHA2
Expires: ...
SHA1 hash: ...
After EKU filter, 2 certs were left.
After expiry filter, 1 certs were left.
After Issuer Name filter, 1 certs were left.
After Private Key filter, 1 certs were left.
The following certificate was selected:
Issued to: Open Source Developer, ...
Issued by: Certum Code Signing CA SHA2
Expires: ...
SHA1 hash: ...
Done Adding Additional Store
Error information: "Error: SignerSign() failed." (-1073741275/0xc0000225)
SignTool Error: An unexpected internal error has occurred.
El código de error 0xC0000225coincide exactamente con lo siguiente NTSTATUS:
//
// MessageId: STATUS_NOT_FOUND
//
// MessageText:
//
// The object was not found.
//
#define STATUS_NOT_FOUND ((NTSTATUS)0xC0000225L)
... lo que tiene mucho sentido, dados los HRESULTcódigos utilizados por signtool.exey el mapa de infraestructura subyacente 1: 1 a NTSTATUS(por supuesto, si se proporciona un código de instalación, HRESULTexisten códigos que no tienen nombre en ntstatus.h... lo que quiero decir es el diseño de HRESULTy NTSTATUS)
Por desgracia, esto no me dice nada, ya que es posible que no se encuentren muchas cosas en un momento dado ... al momento de escribir esto, todavía estoy tratando de reducirlo por mi cuenta usando ProcMon. Para el intento fallido, veo 592 NAME NOT FOUNDresultados en ProcMon, que debería corresponder al NTSTATUScódigo anterior ; la mayoría de ellos para claves de registro y valores.
Aquí está la signtoollínea de comando completa nuevamente:
"C: \ Archivos de programa (x86) \ Windows Kits \ 10 \ bin \ 10.0.18362.0 \ x64 \ signtool.exe" sign / v / debug / a / i Certum / ph / du " https: //my.url " / d "breve descripción" / fd sha256 / tr " http://timestamp.digicert.com " / td sha256 "mysoftware.exe"
... y sí, verifiqué que realmente está usando eso signtool.exe... de hecho, probé con x86 y x64 con rutas completas para una buena medida (mi script real envuelve algunas de las complejidades y prepara el entorno para ajustarse PATHpara poder llamar signtool.exesin su camino completo).
Curiosamente funciona cuando se firma con resúmenes SHA1 de esta manera:
"C: \ Archivos de programa (x86) \ Windows Kits \ 10 \ bin \ 10.0.18362.0 \ x64 \ signtool.exe" sign / v / debug / a / i Certum / ph / du " https: //my.url " / d "breve descripción" / t " http://timestamp.digicert.com " "mysoftware.exe"
(las diferencias son la falta /fd sha256y /td sha256también en /tlugar de /trla URL del servicio de marca de tiempo, es decir, un protocolo diferente)
La versión del software proCertum CardManager es 3.2.0.156, detalles según la siguiente captura de pantalla:
(Es la última versión disponible en el sitio web de Certum en el momento de escribir este artículo).
Mientras tanto, intenté también con signtool.exe(x86 y 64 respectivamente) de:
- Windows 8.1 SDK
- Windows 10.0.17763.0 SDK
... los mismos resultados y estoy desconcertado sobre cómo puedo resolver esto.

