Compartir a través de


Firma como versión

Después de completar la firma de prueba y comprobar que el controlador está listo para su lanzamiento, hay que firmar el paquete de controladores para su publicación. Hay dos maneras de firmar un paquete de controladores para su publicación.

La firma para publicación identifica al publicador de archivos binarios en modo kernel o en modo de usuario (por ejemplo, archivos .sys o .dll) que se cargan en Windows.

Los archivos binarios en modo kernel se firman parar publicación a través de:

  1. Windows Hardware Quality Lab (WHQL) para firmar un paquete de controladores para su publicación. Una firma para publicación WHQL se obtiene a través del Programa de certificación de Windows. En el proceso de certificación del Programa de compatibilidad de hardware con Windows se describen los cinco pasos de principio a fin del Programa de certificación de Windows. Cualquier pregunta debe dirigirse al departamento de soporte técnico del panel del Centro de partners.

  2. En lugar de usar el programa WHQL, los desarrolladores y proveedores de controladores pueden firmar un paquete de controladores para su publicación. Se crea una firma para publicación a través de un certificado de publicador de software (SPC). El SPC se obtiene de una entidad de certificación (CA) autorizada por Microsoft. Las firmas generadas con este tipo de SPC también cumplen los requisitos de firma de controladores PnP para Windows.

Estos son los pasos necesarios para firmar un paquete de controladores para su publicación con el método 2:

Obtención de un certificado de publicador de software (SPC)

La firma para publicación requiere un certificado de firma de código, también denominado Certificado de publicador de software (SPC) de una entidad de certificación comercial.

En el artículo Certificados cruzados para la firma de código en modo kernel se proporciona la lista de entidades de certificación (CA) comerciales autorizadas por Microsoft. Los proveedores de CA enumerados deben usarse para proporcionar un certificado de publicador de software (SPC) para firmar el paquete de controladores para su publicación.

Siga las instrucciones de la CA para obtener el SPC e instalar la clave privada en el equipo de firma. El SPC es un instrumento propietario del proveedor de controladores que lo solicitó para firmar su paquete de controladores. El SPC, la clave privada y la contraseña no deben compartirse con nadie fuera de la organización del proveedor solicitante.

Certificados cruzados

Extracto del Certificado de publicador de software:

Además de obtener un SPC, debe obtener un certificado cruzado emitido por Microsoft. El certificado cruzado se usa para comprobar que la CA que emitió un SPC es una entidad raíz de confianza. Un certificado cruzado es un certificado X.509 emitido por una CA que firma la clave pública para el certificado raíz de otra entidad de certificación. Los certificados cruzados permiten al sistema tener una única entidad raíz de Microsoft de confianza, pero también proporcionan la flexibilidad de ampliar la cadena de confianza a las entidades de certificación comerciales (CA) que emiten SPC.

Los publicadores no tienen que distribuir un certificado cruzado con un paquete de controladores. El certificado cruzado se incluye con la firma digital del archivo de catálogo de un paquete de controladores o la firma incrustada en un archivo de controlador. Los usuarios que instalan el paquete de controladores no tienen que realizar ningún paso de configuración adicional causado por el uso de certificados cruzados.

Extractos seleccionados de Certificados cruzados para la firma de código en modo kernel:

Un certificado cruzado es un certificado digital emitido por una entidad de certificación (CA) que se usa para firmar la clave pública para el certificado raíz de otra entidad de certificación. Los certificados cruzados proporcionan un medio para crear una cadena de confianza a partir de una única CA raíz de confianza a otras CA.

En Windows, los certificados cruzados:

  • Permiten que el kernel del sistema operativo tenga una única entidad raíz de Microsoft de confianza.
  • Amplían la cadena de confianza a varias CA comerciales que emiten certificados de publicador de software (SPC), que se usan para la firma de código del software para su distribución, instalación y carga en Windows.

Los certificados cruzados que se proporcionan aquí se usan con las herramientas de firma de código del Kit de controladores para Windows (WDK) para firmar correctamente el software en modo kernel. La firma digital del software en modo kernel es similar a la firma de código de cualquier software publicado para Windows. El desarrollador o publicador de software agrega certificados cruzados a la firma digital al firmar el software en modo kernel. Las herramientas de firma de código agregan el certificado cruzado a la firma digital del archivo binario o catálogo.

Selección del certificado cruzado correcto

Microsoft proporciona un certificado cruzado específico para cada entidad de certificación que emite SPC para la firma de código en modo kernel. Para obtener más información sobre los certificados cruzados, consulte Certificados cruzados para la firma de código en modo kernel. En este artículo se enumeran los nombres de los proveedores de CA autorizados de Microsoft y el certificado cruzado correcto para la entidad raíz que emitió el SPC. Busque el certificado cruzado correcto para el SPC emitido por el proveedor de la CA, descargue el certificado cruzado en el equipo de firma que usa para la firma para publicación y almacénelo en el directorio del controlador. Proporcione la ruta absoluta a este certificado al usarlo en cualquier comando de firma.

Instalación de información de SPC en el almacén de certificados personales

Extractos adicionales del certificado de publicador de software:

Para usar un SPC para firmar un controlador de manera que cumpla con la directiva de firma de código en modo kernel, la información del certificado primero debe estar contenida en un archivo de Intercambio de información personal (.pfx). Después, la información contenida en el archivo .pfx debe agregarse al almacén de certificados personales del equipo local que firma un controlador.

Una CA puede emitir un archivo .pfx que contenga la información de certificado necesaria. Si es así, puede agregar el archivo .pfx al almacén de certificados personales siguiendo las instrucciones descritas en Instalación de un archivo .pfx en el almacén de certificados personales.

Sin embargo, una CA podría emitir los siguientes pares de archivos:

  • Un archivo .pvk que contenga la información de la clave privada.
  • Un archivo .spc o .cer que contenga la información de clave pública.

En este caso, el par de archivos (un .pvk y un .spc, o un .pvk y un .cer) se deben convertir a un archivo .pfx para agregar la información del certificado al almacén de certificados personales.

Para crear un archivo .pfx del par de archivos emitidos por la CA, siga estas instrucciones:

  • Para convertir un archivo .pvk y un archivo .spc en un archivo .pfx, use el siguiente comando Pvk2Pfx en un símbolo del sistema:

    Pvk2Pfx -pvk mypvkfile.pvk -pi mypvkpassword -spc myspcfile.spc -pfx mypfxfile.pfx -po pfxpassword -f
    
  • Para convertir un archivo .pvk y un archivo .cer en un archivo .pfx, use el siguiente comando Pvk2Pfx en un símbolo del sistema:

    Pvk2Pfx -pvk mypvkfile.pvk -pi mypvkpassword -spc mycerfile.cer -pfx mypfxfile.pfx -po pfxpassword -f
    

A continuación se describen los parámetros que se utilizan en el comando Pvk2Pfx:

  • El parámetro -pvkmypvkfile.pvk especifica un archivo .pvk.
  • La opción -pimypvkpassword especifica la contraseña del archivo .pvk.
  • El parámetro -spcmyspcfile.spc especifica un archivo .spc o el parámetro -spcmycerfile.cer especifica un archivo .cer.
  • La opción -pfxmypfxfile.pfx especifica el nombre de un archivo .pfx.
  • La opción -popfxpassword especifica una contraseña para el archivo .pfx.
  • La opción -f configura Pvk2Pfx para reemplazar un archivo .pfx existente, si lo hay.

Importante

Debe proteger los archivos pvk y pfx con contraseñas seguras.

Instalación de un archivo .pfx en el almacén de certificados personales

Para firmar controladores en modo kernel, los certificados y la clave almacenados en el archivo .pfx deben importarse en el almacén local de certificados personales. Signtool no admite el uso de archivos .pfx para firmar controladores en modo kernel. La restricción se debe a un conflicto al agregar certificados cruzados en la firma mientras se usa un certificado de un archivo .pfx.

Extractos finales del certificado del publicador de software:

Después de obtener un archivo .pfx de una CA o de crear un archivo .pfx a partir de un archivo .pvk y un archivo .spc o .cer, agregue la información del archivo .pfx al almacén de certificados personales del equipo local que firma el controlador. Puede usar el Asistente para importación de certificados para importar la información del archivo .pfx al almacén de certificados personales, como se indica a continuación:

  1. Para abrir el Asistente para importación de certificados, busque el archivo .pfx en el Explorador de Windows y haga doble clic en él.
  2. Para importar el certificado de firma de código en el almacén de certificados personales, siga el procedimiento del Asistente para importación de certificados.

Extracto de Importación de un SPC a un almacén de certificados.

Una manera alternativa de importar el archivo .pfx al almacén local de certificados personales es con la utilidad de línea de comandos CertUtil. En el ejemplo de línea de comandos siguiente se usa CertUtil para importar el archivo abc.pfx en el almacén de certificados personales:

certutil -user -p pfxpassword -importPFX abc.pfx

Donde:

  • La opción -user especifica el almacén personal "Usuario actual".
  • La opción -p especifica la contraseña del archivo .pfx (pfxpassword).
  • La opción -importPFX especifica el nombre del archivo .pfx (abc.pfx).

Visualización de propiedades de SPC

Use el complemento Certificados de MMC (certmgr.msc) para ver los certificados en el almacén de certificados personales.

  1. Inicie el complemento Certificados, certmgr.msc.
  2. Seleccione la carpeta Almacén de certificados personales en el panel izquierdo del complemento.
  3. Seleccione la carpeta Certificados y haga doble clic en el certificado que se va a usar para la firma para publicación.
  4. Seleccione Asunto en la lista de campos para resaltar el nombre del firmante del certificado en la pestaña Detalles del cuadro de diálogo Certificado. Este nombre de firmante se usa con el argumento /n de Signtool en los ejemplos de esta sección.

de firma

Según Firma de un archivo de catálogo de un paquete de controladores para su publicación:

Ejecute los siguientes comandos para firmar el archivo cat que firma el paquete de controladores. El comando /n debe usar el nombre entre comillas del certificado que ve en Asunto en el paso 4 anterior, como CN= MyCompany Inc.

signtool sign /v /ac MSCV-VSClass3.cer /s My /n "MyCompany Inc." /t http://timestamp.digicert.com toaster.cat

/ac FileName

Especifica un archivo que contiene otro certificado que se va a agregar al bloque de firma. Este archivo es el certificado de firma cruzada, MSCV-VSClass3.cer, obtenido del vínculo de descarga entre certificados de Microsoft. Use un nombre de ruta completo si el certificado cruzado no está en el directorio actual. Aunque no es necesario, es aconsejable agregar el certificado cruzado al firmar el archivo cat.

/s StoreName

Especifica el almacén que se va a abrir al buscar el certificado. Si no se especifica esta opción, se abre Mi almacén, que es el almacén de certificados personales.

/n SubjectName

Especifica el nombre del sujeto del certificado de firma. Este valor puede corresponder a una subcadena del nombre del sujeto completo.

/t URL

Especifica la dirección URL del servidor con marca de tiempo. Si esta opción no aparece, el archivo firmado no tendrá la marca de tiempo. Con la marca de tiempo, el paquete de controladores firmado permanece válido indefinidamente hasta que el certificado de firma SPC se revoque por otros motivos.

Debe seguir todos los pasos de firma correctamente; de lo contrario, no podrá firmar el controlador. Pueden aparecer los errores siguientes.

SignTool Error: No certificates were found that met all the given criteria

Incrustar firma

Según Firma para publicación de un controlador con una firma incrustada:

La directiva de firma de código en modo kernel controla si se carga un controlador en modo kernel. Las versiones de 64 bits de Windows tienen requisitos más estrictos en comparación con las versiones de 32 bits de Windows.

Un controlador de arranque en modo kernel debe tener una firma incrustada del certificado de publicador de software (SPC). Este requisito se aplica a cualquier controlador de arranque en modo kernel PnP o no PnP. También se aplica a las versiones de 32 bits de Windows. Un controlador PnP en modo kernel que no sea un controlador de arranque debe tener una firma SPC incrustada, un archivo de catálogo con una firma para publicación de WHQL o un archivo de catálogo con una firma SPC.

Para obtener más información, consulte Requisitos de firma de código en modo kernel.

Comando para incrustar la firma del archivo toaster.sys.

signtool sign /v /ac MSCV-VSClass3.cer /s my /n "MyCompany Inc. " /t http://timestamp.digicert.com toaster.sys

Una vez completada la firma, ejecute el siguiente comando para comprobar el controlador firmado.

signtool verify /kp /v /c tstamd64.cat toastpkg.inf

Salida del comando:

Verifying: toaster.inf
File is signed in catalog: toaster.cat
Hash of file (sha1): 580C2A24C3A9E12817E18ADF1C4FE9CF31B01EA3

Signing Certificate Chain:

    Issued to: VeriSign Class 3 Public Primary Certification Authority - G5
    Issued by: VeriSign Class 3 Public Primary Certification Authority - G5
    Expires:   Wed Jul 16 15:59:59 2036
    SHA1 hash: 4EB6D578499B1CCF5F581EAD56BE3D9B6744A5E5

        Issued to: VeriSign Class 3 Code Signing 2010 CA
        Issued by: VeriSign Class 3 Public Primary Certification Authority - G5
        Expires:   Fri Feb 07 15:59:59 2020
        SHA1 hash: 495847A93187CFB8C71F840CB7B41497AD95C64F

            Issued to: Contoso, Inc
            Issued by: VeriSign Class 3 Code Signing 2010 CA
            Expires:   Thu Dec 04 15:59:59 2014
            SHA1 hash: EFC77FA6BA295580C2A2CD25B56C00606CA21269

The signature is timestamped: Mon Jan 27 14:48:55 2014
Timestamp Verified by:
    Issued to: Thawte Timestamping CA
    Issued by: Thawte Timestamping CA
    Expires:   Thu Dec 31 15:59:59 2020
    SHA1 hash: BE36A4562FB2EE05DBB3D32323ADF445084ED656

        Issued to: Symantec Time Stamping Services CA - G2
        Issued by: Thawte Timestamping CA
        Expires:   Wed Dec 30 15:59:59 2020
        SHA1 hash: 6C07453FFDDA08B83707C09B82FB3D15F35336B1

            Issued to: Symantec Time Stamping Services Signer - G4
            Issued by: Symantec Time Stamping Services CA - G2
            Expires:   Tue Dec 29 15:59:59 2020
            SHA1 hash: 65439929B67973EB192D6FF243E6767ADF0834E4
Cross Certificate Chain:
    Issued to: Microsoft Code Verification Root
    Issued by: Microsoft Code Verification Root
    Expires:   Sat Nov 01 05:54:03 2025
    SHA1 hash: 8FBE4D070EF8AB1BCCAF2A9D5CCAE7282A2C66B3

 Issued to: VeriSign Class 3 Public Primary Certification Authority - G5
        Issued by: Microsoft Code Verification Root
        Expires:   Mon Feb 22 11:35:17 2021
        SHA1 hash: 57534CCC33914C41F70E2CBB2103A1DB18817D8B

            Issued to: VeriSign Class 3 Code Signing 2010 CA
            Issued by: VeriSign Class 3 Public Primary Certification Authority -  G5
            Expires:   Fri Feb 07 15:59:59 2020
            SHA1 hash: 495847A93187CFB8C71F840CB7B41497AD95C64F

                Issued to: Contoso, Inc
                Issued by: VeriSign Class 3 Code Signing 2010 CA
                Expires:   Thu Dec 04 15:59:59 2014
                SHA1 hash: EFC77FA6BA295580C2A2CD25B56C00606CA21269

Successfully verified: toaster.inf

Number of files successfully Verified: 1
Number of warnings: 0
Number of errors: 0

Tenga en cuenta la presencia de la raíz de verificación de código de Microsoft en la cadena de certificados.

A continuación, compruebe la firma incrustada del archivo toaster.sys.

signtool verify /v /kp toaster.sys

Salida del comando:

Verifying: toaster.sys Hash of file (sha1): CCF5F5C02FEDE87D92FCB7B536DBF5D5EFDB7B41

Signing Certificate Chain:
    Issued to: VeriSign Class 3 Public Primary Certification Authority - G5
    Issued by: VeriSign Class 3 Public Primary Certification Authority - G5
    Expires:   Wed Jul 16 15:59:59 2036
    SHA1 hash: 4EB6D578499B1CCF5F581EAD56BE3D9B6744A5E5

        Issued to: VeriSign Class 3 Code Signing 2010 CA
        Issued by: VeriSign Class 3 Public Primary Certification Authority - G5
        Expires:   Fri Feb 07 15:59:59 2020
        SHA1 hash: 495847A93187CFB8C71F840CB7B41497AD95C64F

            Issued to: Contoso, Inc
            Issued by: VeriSign Class 3 Code Signing 2010 CA
            Expires:   Thu Dec 04 15:59:59 2014             SHA1 hash: EFC77FA6BA295580C2A2CD25B56C00606CA21269
The signature is timestamped: Mon Jan 27 14:48:55 2014 Timestamp Verified by:
    Issued to: Thawte Timestamping CA     Issued by: Thawte Timestamping CA     Expires:   Thu Dec 31 15:59:59 2020     SHA1 hash: BE36A4562FB2EE05DBB3D32323ADF445084ED656
        Issued to: Symantec Time Stamping Services CA - G2         Issued by: Thawte Timestamping CA         Expires:   Wed Dec 30 15:59:59 2020         SHA1 hash: 6C07453FFDDA08B83707C09B82FB3D15F35336B1
            Issued to: Symantec Time Stamping Services Signer - G4             Issued by: Symantec Time Stamping Services CA - G2             Expires:   Tue Dec 29 15:59:59 2020             SHA1 hash: 65439929B67973EB192D6FF243E6767ADF0834E4
Cross Certificate Chain:
    Issued to: Microsoft Code Verification Root     Issued by: Microsoft Code Verification Root     Expires:   Sat Nov 01 05:54:03 2025     SHA1 hash: 8FBE4D070EF8AB1BCCAF2A9D5CCAE7282A2C66B3
        Issued to: VeriSign Class 3 Public Primary Certification Authority - G5
        Issued by: Microsoft Code Verification Root
        Expires:   Mon Feb 22 11:35:17 2021
        SHA1 hash: 57534CCC33914C41F70E2CBB2103A1DB18817D8B

            Issued to: VeriSign Class 3 Code Signing 2010 CA
            Issued by: VeriSign Class 3 Public Primary Certification Authority -  G5
            Expires:   Fri Feb 07 15:59:59 2020
            SHA1 hash: 495847A93187CFB8C71F840CB7B41497AD95C64F
                Issued to: Contoso, Inc                 Issued by: VeriSign Class 3 Code Signing 2010 CA                 Expires:   Thu Dec 04 15:59:59 2014                 SHA1 hash: EFC77FA6BA295580C2A2CD25B56C00606CA21269
Successfully verified: toaster.sys
Number of files successfully Verified: 1 Number of warnings: 0 Number of errors: 0

De nuevo, observe la presencia de la raíz de verificación de código de Microsoft en la cadena de certificados.