Skip to content

maxgreco/extract-p7m

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

7 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Extract P7M

License Version Bash PowerShell Platform

Strumento robusto e completo per l'estrazione del contenuto originale da file firmati digitalmente in formato PKCS#7 (.p7m), comunemente utilizzati per la firma digitale in Italia.

Disponibile per Linux, macOS e Windows!

πŸ“‹ Caratteristiche

  • βœ… Estrazione robusta: Gestisce file .p7m in formato DER e PEM
  • πŸ” Verifica firma: Opzione per verificare la validitΓ  della firma digitale
  • πŸ“œ Info certificato: Visualizza informazioni dettagliate sul certificato di firma
  • πŸ“ Elaborazione batch: Processa singoli file o intere directory (anche ricorsivamente)
  • 🎨 Output colorato: Interfaccia colorata e intuitiva con icone
  • πŸ“Š Statistiche dettagliate: Report completo delle operazioni eseguite
  • πŸ”§ ModalitΓ  dry-run: Simula le operazioni senza estrarre realmente i file
  • πŸ“ Logging: Salva log dettagliati delle operazioni
  • ⚑ Gestione errori: Controllo completo degli errori con messaggi informativi
  • πŸ• Preservazione timestamp: Mantiene le date originali dei file
  • πŸͺŸ Multipiattaforma: Funziona su Linux, macOS e Windows

πŸš€ Requisiti

Linux / macOS

  • Bash 5.0 o superiore
  • OpenSSL (per l'estrazione e verifica dei file)

Windows

  • PowerShell 5.1 o superiore (giΓ  incluso in Windows 10/11)
  • OpenSSL per Windows

Installazione dipendenze

Debian/Ubuntu

sudo apt-get update
sudo apt-get install openssl

Fedora/RHEL/CentOS

sudo dnf install openssl

macOS

brew install openssl

Windows

  1. Scarica OpenSSL per Windows da: https://slproweb.com/products/Win32OpenSSL.html
  2. Installa la versione "Win64 OpenSSL" (non la versione Light)
  3. Durante l'installazione, seleziona l'opzione per aggiungere OpenSSL al PATH di sistema
  4. Riavvia il terminale/PowerShell dopo l'installazione

πŸ“¦ Installazione

Linux / macOS

  1. Clona il repository:
git clone https://github.com/yourusername/extract-p7m.git
cd extract-p7m
  1. Rendi lo script eseguibile:
chmod +x extract-p7m.sh
  1. (Opzionale) Crea un link simbolico per usarlo da qualsiasi posizione:
sudo ln -s $(pwd)/extract-p7m.sh /usr/local/bin/extract-p7m

Windows

  1. Clona il repository o scarica i file:
git clone https://github.com/yourusername/extract-p7m.git
cd extract-p7m
  1. Lo script Γ¨ giΓ  pronto all'uso! Puoi eseguirlo in due modi:

    • Metodo 1 (consigliato): Usa il file batch

      extract-p7m.bat documento.pdf.p7m
    • Metodo 2: Esegui direttamente lo script PowerShell

      .\extract-p7m.ps1 documento.pdf.p7m
  2. (Opzionale) Aggiungi la directory al PATH per usarlo da qualsiasi posizione:

    • Apri "Variabili d'ambiente" dal Pannello di controllo
    • Aggiungi il percorso della cartella extract-p7m alla variabile PATH
    • Riavvia il terminale

πŸ“– Utilizzo

Sintassi base

Linux / macOS:

./extract-p7m.sh [OPZIONI] <input>

Windows (PowerShell):

.\extract-p7m.ps1 [PARAMETRI] <InputPath>

Windows (Batch):

extract-p7m.bat [OPZIONI] <input>

Opzioni disponibili

Opzione Linux/macOS Opzione Windows PowerShell Descrizione
-h, --help -Help Mostra il messaggio di aiuto
-V, --version -Version Mostra la versione dello script
-v, --verbose -VerboseOutput Output verboso con informazioni dettagliate
-r, --recursive -Recursive Elabora ricorsivamente tutte le sottodirectory
-o, --output DIR -OutputDir DIR Specifica la directory di output (default: stessa del file input)
-f, --force -Force Sovrascrive i file esistenti senza chiedere conferma
-n, --dry-run -DryRun Simula l'operazione senza estrarre realmente i file
-s, --verify-signature -VerifySignature Verifica la validitΓ  della firma digitale
-c, --cert-info -ShowCertInfo Mostra informazioni sul certificato di firma
-l, --log FILE -LogFile FILE Salva il log delle operazioni in un file
--no-timestamps -NoTimestamps Non preserva i timestamp originali dei file

Nota: Il file batch Windows (extract-p7m.bat) accetta le stesse opzioni della versione Linux/macOS.

πŸ’‘ Esempi

Esempio 1: Estrazione singolo file

Linux/macOS:

./extract-p7m.sh documento.pdf.p7m

Windows (Batch):

extract-p7m.bat documento.pdf.p7m

Windows (PowerShell):

.\extract-p7m.ps1 documento.pdf.p7m

Estrae il contenuto da documento.pdf.p7m e crea documento.pdf nella stessa directory.

Esempio 2: Estrazione ricorsiva

Linux/macOS:

./extract-p7m.sh -r /percorso/cartella

Windows (Batch):

extract-p7m.bat -r C:\Documenti

Windows (PowerShell):

.\extract-p7m.ps1 -Recursive C:\Documenti

Elabora ricorsivamente tutti i file .p7m nella cartella specificata e nelle sue sottodirectory.

Esempio 3: Verifica firma e informazioni certificato

Linux/macOS:

./extract-p7m.sh -s -c documento.pdf.p7m

Windows (PowerShell):

.\extract-p7m.ps1 -VerifySignature -ShowCertInfo documento.pdf.p7m

Estrae il file, verifica la firma digitale e mostra le informazioni del certificato.

Esempio 4: Output in directory specifica

Linux/macOS:

./extract-p7m.sh -o /tmp/estratti -r /percorso/cartella

Windows (PowerShell):

.\extract-p7m.ps1 -OutputDir C:\Temp\Estratti -Recursive C:\Documenti

Estrae tutti i file .p7m nella directory specificata.

Esempio 5: Dry-run con verbose

Linux/macOS:

./extract-p7m.sh -n -v -r /percorso/cartella

Windows (PowerShell):

.\extract-p7m.ps1 -DryRun -VerboseOutput -Recursive C:\Documenti

Simula l'estrazione di tutti i file mostrando cosa verrebbe fatto, senza modificare nulla.

Esempio 6: Elaborazione con log

Linux/macOS:

./extract-p7m.sh -v -l extraction.log -r /percorso/cartella

Windows (PowerShell):

.\extract-p7m.ps1 -VerboseOutput -LogFile extraction.log -Recursive C:\Documenti

Estrae tutti i file salvando un log dettagliato.

Esempio 7: Batch con sovrascrizione automatica

Linux/macOS:

./extract-p7m.sh -f -r /percorso/cartella

Windows (PowerShell):

.\extract-p7m.ps1 -Force -Recursive C:\Documenti

Estrae tutti i file sovrascrivendo automaticamente eventuali file esistenti.

πŸ” Output dello script

Lo script fornisce un output colorato e intuitivo:

  • βœ“ Verde: Operazioni completate con successo
  • βœ— Rosso: Errori
  • ⚠ Giallo: Avvisi
  • β„Ή Blu: Informazioni
  • β†’ Cyan: Messaggi di debug (solo in modalitΓ  verbose)

Esempio di output

╔════════════════════════════════════════════════════════════╗
β•‘          Extract P7M - Estrattore File Firmati            β•‘
β•‘                    Versione 1.0.0                          β•‘
β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

βœ“ Dipendenze verificate

β„Ή Scansione directory: /documenti
β„Ή Trovati 5 file .p7m

β„Ή Elaborazione: fattura_2024.pdf.p7m
βœ“ Estratto: fattura_2024.pdf

β„Ή Elaborazione: contratto.docx.p7m
βœ“ Estratto: contratto.docx

════════════════════════════════════════════════════════════
STATISTICHE
════════════════════════════════════════════════════════════
β„Ή File totali processati: 5
βœ“ Estrazioni riuscite: 5
════════════════════════════════════════════════════════════

πŸ“Š Codici di uscita

Codice Descrizione
0 Operazione completata con successo
1 Errore generico
2 Dipendenze mancanti
3 File di input non valido
4 Errore durante l'estrazione

Questi codici possono essere utilizzati negli script di automazione:

./extract-p7m.sh documento.pdf.p7m
if [ $? -eq 0 ]; then
    echo "Estrazione completata!"
else
    echo "Estrazione fallita!"
fi

πŸ” Formato P7M

I file .p7m sono file firmati digitalmente secondo lo standard PKCS#7 (Public Key Cryptography Standards). Questi file contengono:

  • Il documento originale
  • La firma digitale
  • Il certificato del firmatario
  • La catena di certificati (opzionale)

Lo script estrae il documento originale verificando (opzionalmente) la validitΓ  della firma.

πŸ› οΈ Risoluzione problemi

Linux/macOS

Errore "openssl: command not found"

Installa OpenSSL seguendo le istruzioni nella sezione Requisiti.

File non riconosciuto come valido .p7m

Alcuni file potrebbero:

  • Non essere realmente file .p7m
  • Essere corrotti
  • Utilizzare un formato non standard

Prova a verificare il file con:

file documento.pdf.p7m
openssl pkcs7 -in documento.pdf.p7m -inform DER -print_certs -noout

Permessi insufficienti

Assicurati di avere i permessi di lettura sul file di input e di scrittura sulla directory di output:

chmod +r input.pdf.p7m
chmod +w /percorso/output

Windows

OpenSSL non trovato

Se ricevi l'errore "OpenSSL non trovato":

  1. Verifica che OpenSSL sia installato: apri PowerShell e digita openssl version
  2. Se non installato, scaricalo da https://slproweb.com/products/Win32OpenSSL.html
  3. Assicurati che OpenSSL sia nel PATH di sistema
  4. Riavvia PowerShell dopo l'installazione

Per aggiungere OpenSSL al PATH manualmente:

$env:Path += ";C:\Program Files\OpenSSL-Win64\bin"

Errore "Execution Policy"

Se ricevi errori di execution policy quando esegui lo script PowerShell:

Soluzione 1 (Consigliata): Usa il file batch

extract-p7m.bat documento.pdf.p7m

Soluzione 2: Esegui con bypass policy

powershell -ExecutionPolicy Bypass -File .\extract-p7m.ps1 documento.pdf.p7m

Soluzione 3: Cambia la policy (richiede amministratore)

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Problema con i percorsi con spazi

Se il percorso contiene spazi, racchiudilo tra virgolette:

.\extract-p7m.ps1 "C:\Documenti con spazi\file.pdf.p7m"

Caratteri speciali nel nome file

Windows potrebbe avere problemi con alcuni caratteri. Rinomina il file rimuovendo caratteri speciali se necessario.

🀝 Contribuire

I contributi sono benvenuti! Per favore:

  1. Fai un fork del repository
  2. Crea un branch per la tua feature (git checkout -b feature/AmazingFeature)
  3. Commit le tue modifiche (git commit -m 'Add some AmazingFeature')
  4. Push al branch (git push origin feature/AmazingFeature)
  5. Apri una Pull Request

πŸ“ Changelog

v1.0.0 (2026-01-05)

  • Release iniziale
  • Estrazione file .p7m in formato DER e PEM
  • Supporto elaborazione batch e ricorsiva
  • Verifica firma digitale
  • Visualizzazione informazioni certificato
  • ModalitΓ  dry-run
  • Logging dettagliato
  • Output colorato
  • Gestione completa degli errori
  • Supporto multipiattaforma: Linux, macOS e Windows
  • Script Bash per Linux/macOS (extract-p7m.sh)
  • Script PowerShell per Windows (extract-p7m.ps1)
  • File batch wrapper per Windows (extract-p7m.bat)

πŸ“„ Licenza

Questo progetto Γ¨ rilasciato sotto licenza GPL-3.0. Vedi il file LICENSE per i dettagli.

πŸ‘€ Autore

Creato con ❀️ per semplificare la gestione dei file firmati digitalmente.

πŸ™ Ringraziamenti

  • OpenSSL per le funzionalitΓ  crittografiche
  • La community open source

⚠️ Disclaimer

Questo strumento è fornito "così com'è", senza garanzie di alcun tipo. L'autore non è responsabile per eventuali danni derivanti dall'uso di questo software. Usalo a tuo rischio.


Nota: I file .p7m sono comunemente utilizzati in Italia per documenti come fatture elettroniche, contratti firmati digitalmente, e altre comunicazioni ufficiali che richiedono firma digitale.

About

estrazione massiva di p7m in ambiente Windows

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors