Utilizzando Linux per lavoro può capitare di avere a che fare con documenti in formato .p7m. Il formato .p7m identifica un file firmato digitalmente, nello specifico un documento informatico a cui è stata aggiunta una firma digitale in formato CAdES (Cryptographic Message Syntax Advanced Electronic Signature). In pratica, quando si firma digitalmente un documento (come PDF, Word, ecc.), il file originale viene “incapsulato” in una busta informatica con estensione .p7m, che contiene sia il documento originale che la firma digitale. La firma digitale in formato .p7m ha piena validità legale in Italia, sostituendo la firma autografa in molti contesti.
Per aprire questi file e necessario disporre di software idonei ma su Linux la loro fruizione non è proprio agevole. Personalmente preferisco l’approccio da command line.
Script
Come prerequisito va installato OpenSSL e successivamente va creato lo script apposito.
$ sudo apt install openssl
$ sudo vi /usr/local/bin/extract_p7m_to_pdf.sh
n.b. mettendo nel path indicato sarà eseguibile indipendentemente dal path in cui viene richiamato.
#!/bin/bash
# Check for input file
if [ -z "$1" ]; then
echo "Usage: $0 file.p7m"
exit 1
fi
INPUT="$1"
BASENAME=$(basename "$INPUT" .p7m)
OUTPUT="${BASENAME}.pdf"
TEMPFILE="/tmp/${BASENAME}.raw"
# Extract the original file using OpenSSL
openssl smime -verify -inform DER -in "$INPUT" -noverify -out "$TEMPFILE" 2>/dev/null
if [ $? -ne 0 ]; then
echo "Failed to extract content from $INPUT. Not a valid .p7m or corrupted file."
exit 2
fi
# Check if the extracted file is a PDF
if file "$TEMPFILE" | grep -q "PDF document"; then
mv "$TEMPFILE" "$OUTPUT"
echo "PDF extracted successfully: $OUTPUT"
else
echo "Extracted content is not a PDF. Saved as: $TEMPFILE"
fi
Successivamente andiamo a dare i permessi di esecuzione al file.
$ sudo chmod +x /usr/local/bin/extract_p7m_to_pdf.sh
Per utilizzare il comando sarà sufficiente specificare il file da convertire
$ extract_p7m_to_pdf.sh 'Nome file p7m'
No responses yet