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.exe
SDK de Windows 10.0.18362.0
y 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 0xC0000225
coincide 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 HRESULT
códigos utilizados por signtool.exe
y el mapa de infraestructura subyacente 1: 1 a NTSTATUS
(por supuesto, si se proporciona un código de instalación, HRESULT
existen códigos que no tienen nombre en ntstatus.h
... lo que quiero decir es el diseño de HRESULT
y 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 FOUND
resultados en ProcMon, que debería corresponder al NTSTATUS
código anterior ; la mayoría de ellos para claves de registro y valores.
Aquí está la signtool
lí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 PATH
para poder llamar signtool.exe
sin 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 sha256
y /td sha256
también en /t
lugar de /tr
la 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.
fuente
Respuestas:
Resulta que el problema era una opción que no se configuró correctamente de forma predeterminada (el nombre sugiere que solo se aplica a los certificados EV, pero parece que también se aplica a los que tienen resúmenes SHA2). ¡Gracias al equipo de soporte de Certum!
Destaqué la opción relevante.
También tenga en cuenta que tuve que
... cuando lo había intentado previamente sin elevación, el proceso falló. Y sí, vi el ícono de "escudo", pero supuse que la aplicación contiene la lógica para realizar la elevación (no lo hace).
Cuando volví a firmar después de reiniciar, ya no era el proCertum CardManager el que solicitaba el PIN de la tarjeta, sino Windows. Y la firma funcionó a las mil maravillas.
NB: todavía no había entradas debajo
HKLM\SYSTEM\CurrentControlSet\Control\Cryptography\Providers
después de estos pasos.fuente