# Estrarre XML da un file con firma digitale

**URL:** <https://forum.italia.it/t/estrarre-xml-da-un-file-con-firma-digitale/8527>\
**Category:** Fatturazione Elettronica\
**Created:** [6 Marzo 2019, 3:34pm UTC](https://forum.italia.it/t/estrarre-xml-da-un-file-con-firma-digitale/8527 "2019-03-06T15:34:32Z")\
**Posts on this page:** 19\
**Page:** 1

<div class="post-metadata">

**Author:** ![AngeloF](https://forum.italia.it/letter_avatar_proxy/v4/letter/a/58f4c7/32.png) [@AngeloF](https://forum.italia.it/u/AngeloF)\
**Post date:** [6 Marzo 2019, 3:34pm UTC](https://forum.italia.it/t/estrarre-xml-da-un-file-con-firma-digitale/8527/1 "2019-03-06T15:34:32Z")

</div>

Salve,  
mi chiedevo se è possibile estrarre il contenuto XML di una fattura elettronica con apposta la firma digitale, se sì come è possibile procedere ??

GRAZIE come sempre del vs. prezioso aiuto

---

<div class="post-metadata">

**Author:** ![vbato](https://forum.italia.it/letter_avatar_proxy/v4/letter/v/3e96dc/32.png) [@vbato](https://forum.italia.it/u/vbato)\
**Post date:** [6 Marzo 2019, 4:48pm UTC](https://forum.italia.it/t/estrarre-xml-da-un-file-con-firma-digitale/8527/2 "2019-03-06T16:48:26Z")

</div>

Lo chiedi da sviluppatore o da normale utente?

Se è la seconda, puoi usare uno dei tanti programmi per la firma digitale (tipo Dike di InfoCert o ArubaSign di Aruba) oppure anche online sui siti di PosteCert e InfoCert. Cerca “Come aprire file p7m” con google.

---

<div class="post-metadata">

**Author:** ![AngeloF](https://forum.italia.it/letter_avatar_proxy/v4/letter/a/58f4c7/32.png) [@AngeloF](https://forum.italia.it/u/AngeloF)\
**Post date:** [7 Marzo 2019, 8:45am UTC](https://forum.italia.it/t/estrarre-xml-da-un-file-con-firma-digitale/8527/3 "2019-03-07T08:45:42Z")

</div>

come programmatore informatico

---

<div class="post-metadata">

**Author:** ![fednikx](https://forum.italia.it/user_avatar/forum.italia.it/fednikx/32/1415_2.png) [@fednikx](https://forum.italia.it/u/fednikx)\
**Post date:** [7 Marzo 2019, 9:00am UTC](https://forum.italia.it/t/estrarre-xml-da-un-file-con-firma-digitale/8527/4 "2019-03-07T09:00:24Z")

</div>

openssl smime -verify -noverify -in file.xml.p7m -inform DER -out file.xml

---

<div class="post-metadata">

**Author:** ![genesi](https://forum.italia.it/letter_avatar_proxy/v4/letter/g/53a042/32.png) [@genesi](https://forum.italia.it/u/genesi)\
**Post date:** [7 Marzo 2019, 9:21am UTC](https://forum.italia.it/t/estrarre-xml-da-un-file-con-firma-digitale/8527/5 "2019-03-07T09:21:06Z")

</div>

aggiungo che se ci dici anche il linguaggio di programmazione usato, qualcuno che magari c’e’ passato potrebbe dirti di più.

---

<div class="post-metadata">

**Author:** ![giacomello1](https://forum.italia.it/user_avatar/forum.italia.it/giacomello1/32/1327_2.png) [@giacomello1](https://forum.italia.it/u/giacomello1)\
**Post date:** [7 Marzo 2019, 10:15am UTC](https://forum.italia.it/t/estrarre-xml-da-un-file-con-firma-digitale/8527/6 "2019-03-07T10:15:40Z")

</div>

A mio parere il metodo migliore è utilizzare OpenSSL.

---

<div class="post-metadata">

**Author:** ![vbato](https://forum.italia.it/letter_avatar_proxy/v4/letter/v/3e96dc/32.png) [@vbato](https://forum.italia.it/u/vbato)\
**Post date:** [7 Marzo 2019, 10:41am UTC](https://forum.italia.it/t/estrarre-xml-da-un-file-con-firma-digitale/8527/7 "2019-03-07T10:41:30Z")

</div>

Come ha detto @genesi, dipende dal linguaggio di programmazione.  
Se usi .NET, il framework ha già le funzioni necessarie. Vedi qui: [Estrazione xml da file p7m](https://forum.italia.it/t/estrazione-xml-da-file-p7m/8032/4)  
Immagino che anche in Java si trova tutto già pronto (ma non usandolo non so dirti come si fa).  
Se invece usi php, ti conviene seguire i consigli di @fednikx e @giacomello1 e usare OpenSSL.

Tieni anche presente che alle volte i file .p7m sono codificati in base64, quindi dovrai prima verificare se sono dati base64 e, se lo sono, eseguire la decodifica base64 prima di estrarre il file xml.

Ci sono già parecchi topic a riguardo in questo forum.

---

<div class="post-metadata">

**Author:** ![AngeloF](https://forum.italia.it/letter_avatar_proxy/v4/letter/a/58f4c7/32.png) [@AngeloF](https://forum.italia.it/u/AngeloF)\
**Post date:** [7 Marzo 2019, 10:53am UTC](https://forum.italia.it/t/estrarre-xml-da-un-file-con-firma-digitale/8527/8 "2019-03-07T10:53:48Z")

</div>

Il Linguaggio che usiamo è ormai vecchio, comunque si tratta del VB6

---

<div class="post-metadata">

**Author:** ![vbato](https://forum.italia.it/letter_avatar_proxy/v4/letter/v/3e96dc/32.png) [@vbato](https://forum.italia.it/u/vbato)\
**Post date:** [7 Marzo 2019, 11:23am UTC](https://forum.italia.it/t/estrarre-xml-da-un-file-con-firma-digitale/8527/9 "2019-03-07T11:23:56Z")

</div>

Con VB6 non credo ci sia niente di integrato.  
Qualche idea:

- Usare OpenSSL. Non so se c’è già qualcosa di pronto per usare direttamente la libreria (dll) di openssl. Se no, potete sempre eseguire openssl come programma esterno.
- Usare la libreria Chilkat, che però è a pagamento.

---

<div class="post-metadata">

**Author:** ![AngeloF](https://forum.italia.it/letter_avatar_proxy/v4/letter/a/58f4c7/32.png) [@AngeloF](https://forum.italia.it/u/AngeloF)\
**Post date:** [7 Marzo 2019, 11:34am UTC](https://forum.italia.it/t/estrarre-xml-da-un-file-con-firma-digitale/8527/10 "2019-03-07T11:34:41Z")

</div>

Da dove posso scaricare OpenSSL per Windows se è possibile ??

---

<div class="post-metadata">

**Author:** ![genesi](https://forum.italia.it/letter_avatar_proxy/v4/letter/g/53a042/32.png) [@genesi](https://forum.italia.it/u/genesi)\
**Post date:** [7 Marzo 2019, 11:42am UTC](https://forum.italia.it/t/estrarre-xml-da-un-file-con-firma-digitale/8527/11 "2019-03-07T11:42:04Z")

</div>

[https://wiki.openssl.org/index.php/Binaries](https://wiki.openssl.org/index.php/Binaries)  
qui ci sono tutte le versioni

---

<div class="post-metadata">

**Author:** ![AngeloF](https://forum.italia.it/letter_avatar_proxy/v4/letter/a/58f4c7/32.png) [@AngeloF](https://forum.italia.it/u/AngeloF)\
**Post date:** [7 Marzo 2019, 12:13pm UTC](https://forum.italia.it/t/estrarre-xml-da-un-file-con-firma-digitale/8527/12 "2019-03-07T12:13:38Z")

</div>

GRAZIE mille come sempre del vs. prezioso aiuto

---

<div class="post-metadata">

**Author:** ![Marco\_M](https://forum.italia.it/user_avatar/forum.italia.it/marco_m/32/3728_2.png) [@Marco\_M](https://forum.italia.it/u/Marco_M)\
**Post date:** [8 Marzo 2019, 8:55am UTC](https://forum.italia.it/t/estrarre-xml-da-un-file-con-firma-digitale/8527/13 "2019-03-08T08:55:05Z")

</div>

Più o meno una cosa del genere può bastare:

```
$regex="/(?=\<\?xml|\<.*Fattura.*\>)([\s\S]*)(?=\<\/.*FatturaElettronica)/";

```

p.s. non sono un mago delle espressioni regolari

---

<div class="post-metadata">

**Author:** ![Romolo\_Manfredini](https://forum.italia.it/user_avatar/forum.italia.it/romolo_manfredini/32/1934_2.png) [@Romolo\_Manfredini](https://forum.italia.it/u/Romolo_Manfredini)\
**Post date:** [8 Marzo 2019, 10:15am UTC](https://forum.italia.it/t/estrarre-xml-da-un-file-con-firma-digitale/8527/14 "2019-03-08T10:15:27Z")

</div>

no non basta o perlomeno non basta sempre…  
La regexp potrebbe estrarre un xml non valido.  
Il P7M può contenere chunks di lunghezza differente con headers presenti ad ogni chuck.  
Le regexp funzionano solo su P7M senza chunk ma quando le fatture contengono allegati di dimensioni significative non è garantito che la regexp ti estragga la fattura senza contenuti spuri aggiunti.  
se ne è già parlato qui…

> [@P7m codificato](https://forum.italia.it/t/p7m-codificato/6470/47):
>
> Oggi faccio il pignolo. Quello che hai scoperto non è necessariamente vero. Dipende da quanto sono lunghi i “blocchi” in cui è spezzato il file XML. Piuttosto che fare a caso, forse è meglio leggere le specifiche (ASN.1 con codifica BER), oppure usare un tool già pronto (tipo openssl). Comunque, se il file XML è spezzato in blocchi, ogni blocco avrà davanti un header di due o più byte fatto così: Il primo byte sarà 0x04 (tipo OCTET STRING) Se la lunghezza del blocco è \<=127, il secondo byte…

---

<div class="post-metadata">

**Author:** ![Marco\_M](https://forum.italia.it/user_avatar/forum.italia.it/marco_m/32/3728_2.png) [@Marco\_M](https://forum.italia.it/u/Marco_M)\
**Post date:** [8 Marzo 2019, 11:21am UTC](https://forum.italia.it/t/estrarre-xml-da-un-file-con-firma-digitale/8527/15 "2019-03-08T11:21:17Z")

</div>

Io ho risolto al momento con una cosa di questo tipo:

```
 $content=preg_replace('/([\x0-\x8]{1}[^A-Za-z0-9]{1})|([\x0-\x8]{1}[[:ascii:]]{1})|([^\x{000}-\x{007A}])/','',$xml);

```

Come dicevo non sono un esperto di espressioni regolari, però al funziona.

---

<div class="post-metadata">

**Author:** ![Silvano](https://forum.italia.it/letter_avatar_proxy/v4/letter/s/3e96dc/32.png) [@Silvano](https://forum.italia.it/u/Silvano)\
**Post date:** [13 Marzo 2019, 4:40pm UTC](https://forum.italia.it/t/estrarre-xml-da-un-file-con-firma-digitale/8527/16 "2019-03-13T16:40:01Z")

</div>

Se usi C# o [VB.Net](http://VB.Net) puoi usare il namespace System.Security.Cryptography.Pkcs  
Ecco un esempio in [VB.Net](http://VB.Net) (previo Imports System.Security.Cryptography.Pkcs):

Dim sSignedBytes() As Byte = My.Computer.FileSystem.ReadAllBytes(sFile)  
Dim sContentBytes() As Byte  
Dim SignedCms As New SignedCms()  
SignedCms.Decode(sSignedBytes)  
sContentBytes = SignedCms.ContentInfo.Content  
sXML = System.Text.Encoding.Default.GetString(sContentBytes)

Nella variabile sXML ti trovi il solo xml senza la firma.

---

<div class="post-metadata">

**Author:** ![sgardini](https://forum.italia.it/user_avatar/forum.italia.it/sgardini/32/1265_2.png) [@sgardini](https://forum.italia.it/u/sgardini)\
**Post date:** [19 Marzo 2019, 10:13am UTC](https://forum.italia.it/t/estrarre-xml-da-un-file-con-firma-digitale/8527/17 "2019-03-19T10:13:57Z")

</div>

Io uso firmacerta di Namirial

---

<div class="post-metadata">

**Author:** ![Laischon](https://forum.italia.it/user_avatar/forum.italia.it/laischon/32/3769_2.png) [@Laischon](https://forum.italia.it/u/Laischon)\
**Post date:** [6 Settembre 2019, 5:10pm UTC](https://forum.italia.it/t/estrarre-xml-da-un-file-con-firma-digitale/8527/18 "2019-09-06T17:10:33Z")

</div>

Per curiosità, hai continuato a utilizzare questo metodo o hai riscontrato problemi?

---

<div class="post-metadata">

**Author:** ![Luca93](https://forum.italia.it/letter_avatar_proxy/v4/letter/l/b487fb/32.png) [@Luca93](https://forum.italia.it/u/Luca93)\
**Post date:** [6 Giugno 2022, 8:58pm UTC](https://forum.italia.it/t/estrarre-xml-da-un-file-con-firma-digitale/8527/19 "2022-06-06T20:58:42Z")

</div>

salve,  
e nel caso in cui il file sia codificato in base64 cosi si procede?  
grazie
