Uso de Microsoft SignTool con el SDK de cliente 5 para firmar archivos
En criptografía y en la infraestructura de claves públicas (PKI), se utilizan firmas digitales para confirmar que los datos los ha enviado una entidad de confianza. Las firmas también indican que los datos no se han manipulado durante su transmisión. Una firma es un hash cifrado que se genera con la clave privada del remitente. El destinatario puede verificar la integridad de los datos al descifrar la firma hash con la clave pública del remitente. A su vez, el remitente tiene la responsabilidad de mantener un certificado digital. El certificado digital demuestra que el remitente es el propietario de la clave privada y proporciona al destinatario la clave pública necesaria para realizar el descifrado. Siempre que la clave privada sea propiedad del remitente, se puede confiar en la firma. AWS CloudHSM le proporciona hardware seguro que cuenta con la validación FIPS 140-2 de nivel 3 para que proteja estas claves con acceso exclusivo de un solo propietario.
Muchas organizaciones utilizan Microsoft SignTool, una herramienta de línea de comandos que firma, verifica y aplica marcas de tiempo a los archivos para simplificar el proceso de firma de código. Puede utilizar AWS CloudHSM para almacenar de forma segura sus pares de claves hasta que SignTool los necesite, con lo que se crea un flujo de trabajo para firmar datos que puede automatizarse fácilmente.
Los siguientes temas proporcionan información general sobre cómo usar SignTool con el AWS CloudHSM.
Temas
Paso 1: configurar los requisitos previos
Para utilizar Microsoft SignTool con AWS CloudHSM, necesita lo siguiente:
-
Una instancia del cliente Amazon EC2 con el sistema operativo Windows.
-
Una autoridad de certificación (CA) cuyo mantenimiento se realiza internamente o a través de un proveedor externo.
-
Un clúster de AWS CloudHSM activo en la misma nube virtual privada (VPC) que la instancia EC2. El clúster debe contener al menos un HSM.
-
Un usuario de criptografía (CU) que será el propietario y administrará las claves del clúster de AWS CloudHSM.
-
Un archivo o un archivo ejecutable sin firma.
-
El kit de desarrollo de software (SDK) de Microsoft Windows.
Para configurar los requisitos previos para utilizar AWS CloudHSM con Windows SignTool
-
Siga las instrucciones de la sección Introducción de esta guía para lanzar una instancia EC2 de Windows y un clúster de AWS CloudHSM.
-
Si desea alojar su propia CA de Windows Server, siga los pasos 1 y 2 de Configuración de Windows Server como entidad de certificación con AWS CloudHSM. De lo contrario, continúe el uso de una autoridad de certificación (CA) de terceros de confianza pública.
-
Descargue e instale una de las siguientes versiones de SDK de Microsoft Windows en la instancia EC2 de Windows:
El archivo ejecutable de
SignToolforma parte de la característica de instalación Windows SDK Signing Tools for Desktop Apps. Puede omitir la instalación de las demás funciones si no las necesita. La ubicación de instalación predeterminada es:C:\Program Files (x86)\Windows Kits\<SDK version>\bin\<version number>\<CPU architecture>\signtool.exe
A partir de ahora, puede utilizar el SDK de Microsoft Windows, el clúster de AWS CloudHSM y la CA para Crear un certificado de firma.
Paso 2: crear un certificado de firma
Ahora que ha descargado el SDK de Windows en la instancia EC2, puede utilizarlo para generar una solicitud de firma de certificado (CSR). La CSR es un certificado sin firma que se puede pasar a la CA para que lo firme. En este ejemplo, se utiliza el archivo ejecutable certreq que se incluye con el SDK de Windows para generar la CSR.
Para generar una CSR mediante el archivo ejecutable certreq
-
Si todavía no lo ha hecho, conéctese a la instancia EC2 de Windows. Para obtener más información, consulte Conexión a una instancia en la Guía del usuario de Amazon EC2.
-
Cree un archivo denominado
request.infque contenga las líneas siguientes. Sustituya la información deSubjectpor la de su organización. Para ver una explicación de cada uno de los parámetros, consulte la documentación de Microsoft. [Version] Signature= $Windows NT$ [NewRequest] Subject = "C=<Country>,CN=<www.website.com>,O=<Organization>,OU=<Organizational-Unit>,L=<City>,S=<State>" RequestType=PKCS10 HashAlgorithm = SHA256 KeyAlgorithm = RSA KeyLength = 2048 ProviderName = "CloudHSM Key Storage Provider" KeyUsage = "CERT_DIGITAL_SIGNATURE_KEY_USAGE" MachineKeySet = True Exportable = False -
Ejecuta
certreq.exe. En este ejemplo, se guarda la CSR comorequest.csr.certreq.exe -new request.inf request.csrInternamente, se genera un par de claves nuevo en el clúster de AWS CloudHSM y se utiliza la clave privada del par para crear la CSR.
-
Envíe la CSR a su CA. Si utiliza una CA de Windows Server, siga estos pasos:
-
Escriba el siguiente comando para abrir la herramienta de CA:
certsrv.msc -
En la ventana nueva, haga clic con el botón derecho del ratón en el nombre del servidor de la CA. Elija Todas las tareas y, a continuación, elija Enviar solicitud nueva.
-
Vaya a la ubicación de
request.csry elija Abrir. -
Navegue hasta la carpeta Solicitudes pendientes expandiendo el menú Entidad de certificación de Server. Haga clic con el botón derecho del ratón en la solicitud que acaba de crear y, en Todas las tareas, elija Emitir.
-
Ahora vaya a la carpeta Certificados emitidos (situada encima de la carpeta Solicitudes pendientes).
-
Elija Abrir para ver el certificado y, a continuación, elija la pestaña Detalles.
-
Elija Copiar en archivo para iniciar el Asistente para exportación de certificados. Guarde en un lugar seguro el archivo X.509 con codificación DER como
signedCertificate.cer. -
Salga de la herramienta de CA y utilice el siguiente comando para mover el archivo de certificado al almacén de certificados personales de Windows. Esto permite que puedan utilizarlo otras aplicaciones.
certreq.exe -accept signedCertificate.cer
-
A partir de ahora, puede utilizar el certificado importado para Firmar un archivo .
Paso 3: firmar un archivo
Ahora está listo para utilizar SignTool y el certificado importado para firmar el archivo de ejemplo. Para ello, debe conocer el hash SHA-1 o huella digital del certificado. La huella digital se utiliza para garantizar que SignTool solo utiliza los certificados verificados por AWS CloudHSM. En este ejemplo, se utiliza PowerShell para obtener el hash del certificado. También puede utilizar la GUI de la CA o el archivo ejecutable certutil del SDK de Windows.
Para obtener la huella digital de un certificado y utilizarla para firmar un archivo
-
Abra PowerShell como administrador y ejecute el siguiente comando:
Get-ChildItem -path cert:\LocalMachine\MyCopie la huella digital que se visualiza debajo de
Thumbprint.
-
Vaya al directorio dentro de PowerShell que contiene
SignTool.exe. La ubicación predeterminada esC:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64. -
Por último, firme el archivo ejecutando el comando siguiente. Si el comando se ejecuta correctamente, PowerShell devuelve un mensaje de confirmación.
signtool.exe sign /v /fd sha256 /sha1<thumbprint>/sm C:\Users\Administrator\Desktop\<test>.ps1
-
(Opcional) Para verificar la firma del archivo, utilice el comando siguiente:
signtool.exe verify /v /pa C:\Users\Administrator\Desktop\<test>.ps1