Skip to content

Instantly share code, notes, and snippets.

@Swyter
Last active October 27, 2025 00:44
Show Gist options
  • Select an option

  • Save Swyter/e5515ee7c3b4ae03b6ad3ab6f330409e to your computer and use it in GitHub Desktop.

Select an option

Save Swyter/e5515ee7c3b4ae03b6ad3ab6f330409e to your computer and use it in GitHub Desktop.
Cómo firmar electrónicamente un PDF con certificado digital en Linux y que aparezca como LTV (de largo plazo) en Acrobat Reader

Para que la firma digital de un PDF no solo sea válida, sino que tampoco deje de funcionar en unos cuatro años (cuando expire nuestro certificado) y que por lo tanto Acrobat Reader la marque como LTV (long-time validation) necesita adjuntar entre los datos de la firma dos requisitos extra que no están muy bien documentados:

  1. Usar un servidor de marca de tiempo (TSA en inglés) cualificado, de una empresa o servicio respetado, que esté en la lista de la Unión Europea. Es como una especie de notario virtual.
    • Con esto el servicio nos valida que realmente firmamos en ese día y hora, después de la emisión del certificado pero antes de que caduque. Nos da una prueba, una especie de certificado, de que eso (da igual lo que sea, no se mira el contenido) pasó ese día, a esa hora.
    • Sin adjuntar esta contrafirma podríamos rebobinar y cambiar la fecha del ordenador y utilizar certificados caducados o extraviados, por lo que sin la contrafirma de tiempo nuestra firma digital no es tan fiable y el tiempo podría ser falseado.
    • Aquí hay una lista de servidores gratuitos en la EU Trust list, solo necesitas uno de los que tienen el simbolito en la lista. Yo utilizo http://tsa.izenpe.com o http://tss.accv.es:8318/tsa, que son servicios públicos del País Vasco y Valencia.
  2. Adjuntar una prueba (respuesta OCSP o lista de revocación CRL, o ambas cosas a la vez) que diga que tu certificado no había sido revocado antes de firmar.
    • La firma tiene que adjuntar una respuesta del servidor que emitió tu certificado (ej. FNMT) que diga que ese día seguía en activo.
    • Esto, junto con la marca de tiempo hace que el programa tenga toda la información para dar por buenas tus firmas sin conexión a Internet, o incluso cuando en unos años los servidores de revocación de la gente que expide tus certificados dejen de funcionar.
    • Esto es menos común y hay pocos programas que lo hagan bien sin configurar nada antes, y todavía menos en Linux.
    • Lo bueno es que el servidor de revocación viene escrito dentro de nuestro certificado y no hay que ponerlo en ningún sitio a mano. Solo hay un servidor, pero tenemos que hacer que el programa de firma lo use de verdad.

Tip

Para recibir ambos datos (del servidor de selllado de tiempo TSA, y del de revocación), naturalmente se necesita una conexión a Internet al firmar. Es un momento y no consume casi datos.

Y sí, ya se que es un cacao gigante, pero es lo que hay. Mejor entenderlo y ahorrarse disgustos y problemas legales.

Cómo firmar en Linux

  • LibreOffice permite firmar con marca de tiempo al exportar un documento a PDF, pero aparentemente en pleno 2025 todavía no mira ni adjunta datos de revocación, por lo que aún así no aparecerá como LTV. Otra limitación es que la firma siempre será invisible, no se ve ningún "sello" en el documento, solo en el panel de firma al abrirlo en un programa que las entienda.

    • Si queremos editar y rellenar un PDF ya existente podemos abrirlo en LibreOffice Draw. Como editor está bien, pero no lo recomiendo para firmar, salvo única opción.
    • El servidor de marca de tiempo hay que configurarlo previamente. De forma predeterminada la lista de servidores de cronomarcación está vacía y la firma no incluirá/adjuntará nada extra, pero el programa tampoco avisará ni se quejará de que falte.
  • JSignPdf admite firmas visibles e invisibles en PDFs existentes, así como adjuntar marcas de tiempo y la información de revocación, pero es opcional y hay que configurarlo a mano. Se puede utilizar tanto en línea de comandos como en modo visual, con sus menús y botones.

    • Para una firma básica necesitas el archivo de tu certificado en formato .p12, que puedes exportar desde Firefox y demás, con o sin contraseña. Después tienes que elegir el archivo PDF de entrada y poner el nombre de archivo PDF que quieres para la versión modificada y firmada de salida.
    • En TSA y configuración avanzada pega la dirección URL de un servidor de marca de tiempo (o cronomarcación) de los que pongo arriba, y marca la opción de comprobar OCSP, sin más. También podrías activar lo del CRL, pero entonces los archivos PDF ocupan bastante más.
      • No pasa nada si incluyes ambas cosas, o uno u otro. Lo importante es tener algo que indique el estado de revocación actual. Tanto el protocolo OCSP y el CRL cumplen la misma función de formas diferentes.
        • Con OCSP solo preguntas por el estado de tu certificado segundos antes de usarlo y lo "grapas" a tu firma, si descargas el CRL tienes que adjuntar la lista gigante con todos los certificados revocados hasta el momento para demostrar (al que valide tu firma) que no apareces ahí ese día.
    • Si quieres poner una especie de sello visible puedes seleccionar un área de la página en la sección "Ajuste". Y sí, la traducción al castellano es horrorosa. Puedes cambiar el tamaño del texto del pegote y la cantidad de detalle, funciona de forma bastante parecida a Acrobat Reader.
      • Con la pega de que no parece adjuntar la fuente que usa al propio PDF, y Acrobat Reader puede soltar una advertencia en Windows al abrirlo. Yo la dejaría como invisible, si quieres un sello o marca visual hazlo o ponlo en LibreOffice Draw de antemano.
    • Le damos al pequeño botón de "Firmarlo" abajo a la derecha y esperamos, tarda unos segundos y en el registro de texto debería poner si realmente ha hecho la marca de tiempo y contactado lo de revocación, y al final que ya está terminado.
      • Ya lo tendrías, abre el PDF resultante en Acrobat Reader en una máquina virtual de Windows o por Wine para asegurarte de que ponga LTV en el panel de firma.
    • Si al abrir el documento en Acrobat Reader te aparece un mensaje raro de que faltan fuentes es porque JSignPdf utiliza fuentes de Linux para la firma o sello visual, en teoría no pasa nada. Pero si quitas la firma visual (la dejas como invisible) esa advertencia dejará de aparecer.

Cómo ver y validar firmas en Linux

  • Okular es el único visor PDF que he encontrado que valide firmas, aunque no distingue entre firmas básicas ni LTV, ni tampoco marcas de tiempo ni si está validado por un servidor TSA dentro de la lista de la Unión Europea, por lo que está más limitado que Acrobat Reader. Pero para un uso básico vale.

—Espero que os sea útil, un saludo de Swyter. :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment