TCS

Ayuda con los certificados de firma de código

La presente página se ha confeccionado gracias a la ayuda de los usuarios del servicio TCS, que nos han enviado información con sus experiencias.

Tabla de contenido

Certificado de firma de código OV con token de Sectigo

Los compañeros de la Universidad de Jaén han creado una pequeña guía para la emisión de certificados de firma de código (CS) mediante SCM

Certificado de firma de código OV con YubiKey

Esta información se ha obtenido del wiki de la red holandesa Surfnet Code-signing certificaten, y hemos traducido automáticamente con Google. Para cualquier actualización se recomienda acudir a la fuente original.

A partir del 8 de mayo de 2023, solo se pueden solicitar certificados de firma de código cuyo par de claves se haya generado en un HSM que cumpla con estándares específicos o Sectigo lo suministre directamente en un token. Más información sobre el cambio está disponible aquí: https://sectigo.com/knowledge-base/detail/Changes-to-Sectigo-Code-Signing-Offerings/kA03l000000BoIs . Para certificados de firma de código OV, recomendamos utilizar una YubiKey (FIPS) y describir los pasos a continuación.

Nota: Necesita una YubiKey que sea compatible con FIPS. Las YubiKeys estándar no lo son . Consulte https://www.yubico.com/products/yubikey-fips/ para conocer los dispositivos adecuados.

Sectigo tiene el siguiente manual disponible para usar una YubiKey: https://www.sectigo.com/knowledge-base/detail/Key-Generation-and-Attestation-with-YubiKey/kA03l000000roEV . Esto ha sido probado por nosotros. A continuación se presentan algunas adiciones:

1.1 Le recomendamos encarecidamente que primero cambie al menos el PIN PIV y la clave de administración. Esta es una capa adicional de seguridad, esencial si pierde la YubiKey o la deja en su PC mientras se aleja.

2.2 generar attestation.pem ( attestation.crt intermediateCA.crt > attestation.pem) está en 'Windows (cualquier shell)' pero se aplica a todos los sistemas operativos. La codificación en base64 ( cat attestation.pem | base64) solo es posible en Linux, pero también es necesaria en MacOS.

2.2 el manual le permite colocar los archivos en la carpeta YubiKey Manager, pero en las computadoras portátiles administradas es posible que no tenga permisos de lectura/escritura allí. En ese caso, colóquelos en su escritorio o en otra carpeta a la que pueda acceder.

Se pueden omitir 3.1 y 3.2. Un perfil de 'Firma de código Sectigo OV (atestación de clave)' está disponible como estándar y se delega a cada organización.

3.3 a 3.5 debe ser realizado por el RAO ​​(administrador) de la institución, a partir de 3.6 el usuario final puede continuar con la carga del CSR y Atestación de Clave.

3.3 Después del paso 8, no olvide verificar si el formulario ha sido delegado a su propia organización para su protección. Al lado del botón "Cuentas" que usó anteriormente, hay un botón "Delegar".

3.4 ya se ha implementado en la mayoría de los dominios.

3.5 Encontrará las invitaciones en Certificados → Certificados de firma de código → Arriba a la derecha. El enlace del correo electrónico funciona una vez, así que asegúrese de que el usuario final ya haya completado los pasos anteriores. Recomendamos hacer esto durante una conversación (chat/teléfono) con el usuario final. El enlace es único, por lo que si un usuario tiene que buscar algo (que suele ser el caso), necesitará un nuevo enlace.

3.6 al final puede descargar el certificado como 'Certificado (con emisor posterior), codificado PEM', esta es la forma en que YubiKey puede analizar el certificado.

3.6 Para muchas aplicaciones necesitarás conocer la huella digital del certificado, que puedes obtener, por ejemplo, conopenssl x509 -noout -in /pad/naar/.pem -fingerprint

Firmar en Windows 10

Se ha instalado JDK 1.8 de 64bits.

A continuación hay que seguir el procedimiento de Sectigo How To Sign Java .jar Files Using an EV Code Signing Certificate.

  1. Conectar el Token USB en un ordenador Windows 10
  2. Crear un fichero con nombre eToken.cfg y contenido

    name=eToken
    library=c:\\WINDOWS\\system32\\eTPKCS11.dll

  3. Abrir una ventana de MS-DOS (Ejecutando como Administrador) ir al path de la instalación del Java (C:\Program Files\Java\JDK-1.8\bin)

    Ejectutar el comando

    keytool -list -keystore NONE -storetype PKCS11 -providerclass
    sun.security.pkcs11.SunPKCS11 -providerArg eToken.cfg

  4. Introducir el password del Token y aparecerá el "Alias". Debemos anotarlo porque hace falta para poder firmar.

  5. Copiar los ficheros que se quieren firmar en un directorio c:\ en nuestro caso eran c:\jars

  6. Instalar el software SafeNet Authentication Client

  7. Exportar el certificado del Token USB con el software SafeNet Authentication Client Tools, haciendo clic en "Advanced View" export

    Seleccionamos el certificado y hacemos clic en "Export Certificate"

  8. Una vez lo tenemos exportado (sólo el certificado), ya que la Private Key "nunca" se exportará del Token USB, hay que convertir este CRT a formato PEM

    Ejemplo:

    Openssl.exe x509 -inform DER -outform PEM -in my_certificate.crt -out my_certificate.crt.pem

    Abrimos el certificado, y en la Ruta de Certificación, vamos uno a uno (los 3 certificados) hacemos un "Copy To File" lo exportamos y lo concatenamos en un fichero con nombre chain.crt y lo copiamos en el directorio c:/jars

  9. Firmar los ficheros, en nuestro caso JARS

    Utilitzamos el comando JARSIGNER

    Abrimos una ventana de MS-DOS y en el path de la instalación del JAVA (C:\Program Files\Java\JDK-1.8\bin) ejecutamos el comando:

    jarsigner -tsa http://timestamp.sectigo.com/rfc3161
    -keystore NONE -storetype PKCS11
    -providerClass sun.security.pkcs11.SunPKCS11 -providerArg ./eToken.cfg
    -certs -certchain c:\jars\chain.crt c:\jars\FICHERO.jar
    Sectigo_20230718121746
    

    Después hay que verificar siempre que se haya firmado y comprobar la nueva fecha de expiración del certificado de código

    jarsigner -verify -verbose c:\jars\FICHERO.jar

    Si aparecen s= signature was verified y la información jar verified junto con la frase The signer certificate will expire on FECHA_EXPIRACIÓN que coincida con la del certificado de Firma de Código, es que ha funcionado!