[Neapolis] ha scritto:
+m2+ ha scritto:
In realtà no, o meglio quella è un altro tipo di firma.
E' vero, ci sono diverse tipologie di firme.
Quella di cui parlavo prima, mi riferivo ed Entratel (ora si fa tramite desktop telematico). Genera un nuovo file con lo stesso nome e con l'aggiunta del .p7m finale
Invece la firma "Sigillo" presente su "Fatture e corrispettivi", aggiunge il tag <Signature> al file xml, ed in quel tag ci sono una miriade di codici strani...
Ritengo che i file fatture elettroniche possano essere firmati con entrambe modalità.
La prima è la firma c.d. CAdES, dove, appunto, si "imbusta" in un file .p7m qualsiasi cosa.
XML, ma anche PDF, o JPG, o quello che ti pare.
Il problema è che il certificato (cioè il file che serve per generare i codici da aggiungere al file per imbustarlo) è presente su una chiavetta (es. Aruba).
E da lì NON si può leggere.
Non c'è alcun modo per estrarlo, scriverlo in un file, e poi firmare con quel file.
Bisogna in sostanza "aprire" la chiavetta (con la sua API), leggere il suo certificato (o meglio la parte pubblica), e quando vuoi firmare il file NON puoi farlo da programma, bensì devi "spedirlo" alla chiavetta (* in realtà alla DLL che poi colloquia con la chiavetta la sto facendo breve) che te lo rispedisce lavorato.
Non so se è chiaro come funziona la faccenda.
Già ora il mio programmello è perfettamente in grado di mettere queste firme (.p7m) e quindi la spedizione in agenzia entrate è assicurata.
---
La firma XAdES, aggiunge una serie di tag al file XML (i "codici strani").
La cosa "bella" è che mentre un .p7m non è immediatamente visibile, cioè devi PRIMA "estrarre" il contenuto XML, l'XML firmato E' visibile.
Se ci appiccichi sopra un foglio di stile lo "vedi" da un browser.
Il mio programmello converte brutalmente gli XML in PDF, senza browser
Qualcosa del genere (ci sto lavorando)
</FatturaElettronicaBody><ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="Signature-329205963">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
<ds:Reference URI="">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>ZZZZZZZZZZZZZZZZZZZZZZZZZZZZ=</ds:DigestValue>
</ds:Reference>
<ds:Reference Type="http://uri.etsi.org/01903#SignedProperties" URI="#SignedProperties-44444444444444444">
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>ZZZZZZZZZZZZZZZZZZZZZZZZZZZ=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
ClZ52OYFMvWCSMoWzL8vk/XQan58zz6lyak9nFVkNW7Or82jN8+AZNlKRQLFf7hN
pKrCJ1kmXg7XG2kzm/vdI30ZvuyZu7Jma3MTmMLikis=
</ds:SignatureValue>
<ds:KeyInfo>
<ds:KeyValue>
<ds:RSAKeyValue>
<ds:Modulus>
nZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
qv455aZNDbxAERRJ74859c/TzwkgqpuYLBC+hkjCuJUwIMhH9Er2GIJSFMbGKh8V
GVw6XAX/2VkRJseJ5RKqNdUom4Bb2RHKpvsB9H4oW4E=
</ds:Modulus>
<ds:Exponent>AQAB</ds:Exponent>
</ds:RSAKeyValue>
</ds:KeyValue>
<ds:X509Data>
<ds:X509IssuerSerial>
<ds:X509IssuerName>CN=ArubaPEC S.p.A. NG CA 3, OU=Certification AuthorityC, O=ArubaPEC S.p.A., C=IT</ds:X509IssuerName>
<ds:X509SerialNumber>2222222222222222222222222222222222222222</ds:X509SerialNumber>
</ds:X509IssuerSerial>
<ds:X509SubjectName>2.5.4.46=#3333333333333333331, 2.5.4.4=#444444444444, 2.5.4.42=#FFFFFFFFFFFFFFFF, 2.5.4.5=#XXXXXXXXXXXXXXXXXXXXXX, CN=CXXXXXXXXXXXX, O=non presente, C=IT</ds:X509SubjectName>
<ds:X509Certificate>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
...
</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
<ds:Object>
<xades:QualifyingProperties xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" xmlns:xadesv141="http://uri.etsi.org/01903/v1.4.1#" Target="#Signature-329205963">
<xades:SignedProperties Id="SignedProperties-577302706">
<xades:SignedSignatureProperties>
<xades:SigningTime>2018-07-23T16:25:08.045Z</xades:SigningTime>
<xades:SigningCertificate>
<xades:Cert>
<xades:CertDigest>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>XXXXXXXXXXXXXXXXXXXXXXX</ds:DigestValue>
</xades:CertDigest>
<xades:IssuerSerial>
<ds:X509IssuerName>CN=ArubaPEC S.p.A. NG CA 3, OU=Certification AuthorityC, O=ArubaPEC S.p.A., C=IT</ds:X509IssuerName>
<ds:X509SerialNumber>5XXXXXXXXXXXXXXXXXXXXXXX</ds:X509SerialNumber>
</xades:IssuerSerial>
</xades:Cert>
</xades:SigningCertificate>
</xades:SignedSignatureProperties>
</xades:SignedProperties>
</xades:QualifyingProperties>
</ds:Object>
</ds:Signature>
---
Ecco perchè XAdES è comoda: perchè i file rimangono sempre XML con "un po' di roba" attaccata.
Mentre la CAdES (il .p7m) è un formato usato ampiamente da avvocati e commercialisti (che quindi hanno i programmi per estrarre facilmente il contenuto), non tutti gli altri clienti sono abituati (es. hotel)
---
Quindi, per tornare al punto, per una firma "invisibile" serve SIA un firmatore CAdES (p7m) o XAdES (xml), SIA una interfaccia PKCS11, per leggere il certificato dal token USB (o dalla tessera, per i commercialisti).
La stragrande maggioranza delle librerie che ho trovato fa le firme CAdES, ma NON leggono il certificato dalla chiavetta.
E la stragrande NON sa come firmare in formato XAdES italiano (qualcuno in quello XAdES spagnolo).
---
Ovviamente se esistesse un XML firmato, come già detto, basterebbero un paio d'ore per guardare i tag che ci sono dentro, e rifare una firma uguale.
Allo stato il "mio" firmatore XAdES genera XML che il checker dell'agenzia delle entrate riconosce come buona.
Ma, in realtà, non so perchè (cioè è un "paciugamento" che ho fatto io, non una specifica tecnica seguita per filo e per segno).
Potrei lasciar perdere e tenere p7m e, infatti, il programma già l'ho fatto ... ma non voglio arrendermi!