示例#1
0
        private bool CheckIsPresentCadesAndPades()
        {
            bool          result         = false;
            FileDocumento signedDocument = this.GetSignedDocument();
            bool          cades          = false;
            bool          pades          = false;

            if (signedDocument != null && signedDocument.signatureResult != null)
            {
                VerifySignatureResult signatureResult = signedDocument.signatureResult;
                foreach (PKCS7Document document in signatureResult.PKCS7Documents)
                {
                    if (document.SignatureType == SignType.PADES)
                    {
                        pades = true;
                    }
                    if (document.SignatureType == SignType.CADES)
                    {
                        cades = true;
                    }
                    if (cades && pades)
                    {
                        break;
                    }
                }
            }
            result = cades && pades;
            return(result);
        }
示例#2
0
 private Microsoft.Web.UI.WebControls.TreeNode GetNodeCheckDocumento(VerifySignatureResult signatureResult)
 {
     Microsoft.Web.UI.WebControls.TreeNode node = new Microsoft.Web.UI.WebControls.TreeNode();
     node.NavigateUrl = DETAIL_PAGE + "?type=signatureResult";
     node.Target      = "right";
     node.Text        = "Risultato verifica";
     return(node);
 }
示例#3
0
        private static VerifySignatureResult ConvertToVerifySignatureResult(EsitoVerificaStatus status, DocsPaVO.documento.Internal.PKCS7Document[] p7docsLst)
        {
            VerifySignatureResult vsr = new VerifySignatureResult();

            vsr.PKCS7Documents    = p7docsLst;
            vsr.StatusCode        = (int)status;
            vsr.StatusDescription = status.ToString();
            vsr.CRLOnlineCheck    = true;
            return(vsr);
        }
        public async Task <VerifySignatureResult> VerifySignature(Object data, string method, string nonceStr, string publicKey, string requestUrl, string signType, string timestamp, string signature, string environment)
        {
            VerifySignatureResult result = new VerifySignatureResult();

            try
            {
                string url = "";
                if (environment == "sandbox")
                {
                    url = String.Concat(Url.SandBoxOpen, "/tool/signature/verify");
                }
                else if (environment == "production")
                {
                    url = String.Concat(Url.ProductionOpen, "/tool/signature/verify");
                }

                VerifySignatureRequestData verifySignatureData = new VerifySignatureRequestData();
                verifySignatureData.data       = data;
                verifySignatureData.method     = method;
                verifySignatureData.nonceStr   = nonceStr;
                verifySignatureData.publicKey  = publicKey;
                verifySignatureData.requestUrl = requestUrl;
                verifySignatureData.signType   = signType;
                verifySignatureData.timestamp  = timestamp;
                verifySignatureData.signature  = signature;

                var content     = JsonConvert.SerializeObject(verifySignatureData);
                var buffer      = System.Text.Encoding.UTF8.GetBytes(content);
                var byteContent = new ByteArrayContent(buffer);
                byteContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                HttpClient client   = new HttpClient();
                var        response = await client.PostAsync(url, byteContent);

                var responseStr = await response.Content.ReadAsStringAsync();

                if (response.IsSuccessStatusCode)
                {
                    var jsonAsString = await response.Content.ReadAsStringAsync();

                    result = JsonConvert.DeserializeObject <VerifySignatureResult>(jsonAsString);
                }
                else
                {
                    result = JsonConvert.DeserializeObject <VerifySignatureResult>(response.Content.ReadAsStringAsync().Result);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error", ex.Message);
            }
            return(result);
        }
示例#5
0
        private void Page_Load(object sender, System.EventArgs e)
        {
            Response.Expires = -1;

            this._requestType          = (string)Request.QueryString["type"];
            this._requestDocumentIndex = Convert.ToInt32(Request.QueryString["documentIndex"]);
            //this._requestSignerIndex=Convert.ToInt32(Request.QueryString["index"]);

            this._fileDocument    = DocumentManager.GetSignedDocument();
            this._signatureResult = this._fileDocument.signatureResult;

            // Put user code to initialize the page here
            this.FillTable();
        }
示例#6
0
        private static VerifySignatureResult ConvertToVerifySignatureResult(EsitoVerificaStatus status, FirmaDigitale.DettaglioFirmaDigitaleType d)
        {
            VerifySignatureResult vsr = new VerifySignatureResult();
            List <DocsPaVO.documento.SignerInfo> siLst = new List <DocsPaVO.documento.SignerInfo>();

            if (d.datiFirmatari != null)
            {
                foreach (FirmaDigitale.FirmatarioType ft in d.datiFirmatari)
                {
                    DocsPaVO.documento.SignerInfo si = new DocsPaVO.documento.SignerInfo();
                    si.CertificateInfo = new DocsPaVO.documento.CertificateInfo
                    {
                        ValidFromDate               = ft.firmatario.dataInizioValiditaCert,
                        ValidToDate                 = ft.firmatario.dataFineValiditaCert,
                        RevocationDate              = ft.firmatario.dataRevocaCertificato,
                        RevocationStatus            = (int)status,
                        RevocationStatusDescription = status.ToString(),
                        IssuerName         = "CN=" + ft.firmatario.cnCertAuthority,
                        SignatureAlgorithm = "N.D."
                    };

                    si.SubjectInfo = new DocsPaVO.documento.SubjectInfo
                    {
                        CodiceFiscale  = ft.firmatario.codiceFiscale,
                        CommonName     = ft.firmatario.commonName,
                        CertId         = ft.firmatario.distinguishName,
                        Organizzazione = ft.firmatario.organizzazione,
                        SerialNumber   = ft.firmatario.serialNumber,
                    };
                    si.SignatureAlgorithm = convertOidtoString(ft.firmatario.digestAlgorithm);
                    siLst.Add(si);
                }
            }


            List <DocsPaVO.documento.PKCS7Document> p7docsLst = new List <DocsPaVO.documento.PKCS7Document>();

            DocsPaVO.documento.PKCS7Document p7doc = new DocsPaVO.documento.PKCS7Document
            {
                SignersInfo      = siLst.ToArray(),
                DocumentFileName = null,
                Level            = 0
            };
            p7docsLst.Add(p7doc);
            vsr.PKCS7Documents    = p7docsLst.ToArray();
            vsr.StatusCode        = (int)status;
            vsr.StatusDescription = status.ToString();
            vsr.CRLOnlineCheck    = true;
            return(vsr);
        }
示例#7
0
        private VerifySignatureResult ConvertToVerifySignatureResult(Return actalisReturn)
        {
            VerifySignatureResult vsr = new VerifySignatureResult();

            try
            {
                List <DocsPaVO.documento.SignerInfo> siLst = null;
                SignerInfo[] signersInfo = null;
                if (actalisReturn.signers != null)
                {
                    siLst       = ConvertFromActalisSigner(actalisReturn.signers);
                    signersInfo = siLst.ToArray();
                }
                List <DocsPaVO.documento.PKCS7Document> p7docsLst = new List <DocsPaVO.documento.PKCS7Document>();
                DocsPaVO.documento.PKCS7Document        p7doc     = new DocsPaVO.documento.PKCS7Document
                {
                    SignersInfo      = signersInfo,
                    DocumentFileName = null,
                    Level            = 0
                };
                p7docsLst.Add(p7doc);
                vsr.PKCS7Documents = p7docsLst.ToArray();


                /// ATTNEZIONE DA GESTIRE
                /// actalisReturn.error quando tutto va bene torna OK, mentre non dovrebbe tornare nulla
                /// volendo possiamo mettere che se torna OK, la stringa in actalisReturn.error viene eliminata.
                /// estratto dalla documentazione VOL Pagina 4
                /// Error  1..1  Stringa   Eventuale codice di errore. Vuoto se non si è verificato nessun errore nella validazione.
                /// decommentare codice sotto per risolvere il bug

                /*
                 * if (actalisReturn.error.Equals ("OK"))
                 *  actalisReturn.error="";
                 */
                vsr.StatusCode        = String.IsNullOrEmpty(actalisReturn.error) ? 0 : 1;
                vsr.StatusDescription = actalisReturn.error;
                vsr.CRLOnlineCheck    = true;
            }
            catch (Exception ex)
            {
                string err = string.Format("Errore in toCertificateInfo {0} stk {1}", ex.Message, ex.StackTrace);
                logger.ErrorFormat(err);
                vsr.StatusDescription = err;
                vsr.StatusCode        = -1;
            }
            return(vsr);
        }
示例#8
0
        private EsitoVerifica getResult(Return ret, byte[] originalFile)
        {
            VerifySignatureResult vsr = ConvertToVerifySignatureResult(ret);

            EsitoVerifica retval = new EsitoVerifica {
                VerifySignatureResult = vsr, content = originalFile
            };

            retval.status = EsitoVerificaStatus.Valid;

            if (revoked)
            {
                retval.status = EsitoVerificaStatus.Revoked;
            }
            else if (certExpired)
            {
                retval.status = EsitoVerificaStatus.NotTimeValid;
            }


            return(retval);
        }
示例#9
0
        private static VerifySignatureResult ConvertToVerifySignatureResult(EsitoVerificaStatus status)
        {
            VerifySignatureResult vsr = new VerifySignatureResult();
            List <DocsPaVO.documento.SignerInfo> siLst = new List <DocsPaVO.documento.SignerInfo>();

            {
                DocsPaVO.documento.SignerInfo si = new DocsPaVO.documento.SignerInfo();
                si.CertificateInfo = new DocsPaVO.documento.CertificateInfo
                {
                    ValidFromDate               = DateTime.Parse("2011-03-25T13:57:54+01:00"),
                    ValidToDate                 = DateTime.Parse("2014-03-25T00:00:00+01:00"),
                    RevocationStatus            = (int)EsitoVerificaStatus.Valid,
                    RevocationStatusDescription = EsitoVerificaStatus.Valid.ToString()
                };

                si.SubjectInfo = new DocsPaVO.documento.SubjectInfo
                {
                    CodiceFiscale = "TTVLFF44P28D969E",
                    CommonName    = "Elio Raffaele Ottaviano",
                    CertId        = "2011500471127",
                };

                siLst.Add(si);
            }


            {
                DocsPaVO.documento.SignerInfo si = new DocsPaVO.documento.SignerInfo();
                si.CertificateInfo = new DocsPaVO.documento.CertificateInfo
                {
                    ValidFromDate               = DateTime.Parse("2008-09-01T14:09:40+02:00"),
                    ValidToDate                 = DateTime.Parse("2013-12-31T18:00:00+01:00"),
                    RevocationDate              = DateTime.Parse("2011-01-21T12:48:17+01:00"),
                    RevocationStatus            = (int)EsitoVerificaStatus.Revoked,
                    RevocationStatusDescription = EsitoVerificaStatus.Revoked.ToString()
                };

                si.SubjectInfo = new DocsPaVO.documento.SubjectInfo
                {
                    CodiceFiscale = "TTVLFF44P28D969E",
                    CommonName    = "ELIO RAFFAELE OTTAVIANO",
                    CertId        = "12202828:4330:1",
                };

                siLst.Add(si);
            }

            List <DocsPaVO.documento.PKCS7Document> p7docsLst = new List <DocsPaVO.documento.PKCS7Document>();

            DocsPaVO.documento.PKCS7Document p7doc = new DocsPaVO.documento.PKCS7Document
            {
                SignersInfo      = siLst.ToArray(),
                DocumentFileName = null,
                Level            = 0
            };
            p7docsLst.Add(p7doc);
            vsr.PKCS7Documents    = p7docsLst.ToArray();
            vsr.StatusCode        = (int)EsitoVerificaStatus.Revoked;
            vsr.StatusDescription = status.ToString();
            vsr.CRLOnlineCheck    = true;
            return(vsr);
        }
示例#10
0
        private void BuildTreeView()
        {
            FileDocumento signedDocument = this.GetSignedDocumentFromSession();

            VerifySignatureResult signatureResult = signedDocument.signatureResult;

            if (signatureResult != null)
            {
                //this.trvDettagliFirma.Nodes.Add(this.GetNodeCheckDocumento(signatureResult));

                int documentIndex = 0;

                Microsoft.Web.UI.WebControls.TreeNode documentNode     = null;
                Microsoft.Web.UI.WebControls.TreeNode parentNode       = null;
                Microsoft.Web.UI.WebControls.TreeNode originalDocument = null;

                foreach (PKCS7Document document in signatureResult.PKCS7Documents)
                {
                    // Aggiunta del nodo solo se il documento è p7m
                    documentNode = this.GetNodePKCS7Document(document, documentIndex);

                    if (documentIndex == 0)
                    {
                        this.trvDettagliFirma.Nodes.Add(documentNode);
                    }
                    else
                    {
                        parentNode.Nodes.Add(documentNode);
                    }

                    parentNode = documentNode;

                    documentIndex++;
                }

                // Aggiunta del nodo relativo al file originale
                originalDocument = this.GetNodeDocumentoOriginale(signedDocument);

                if (parentNode != null)
                {
                    parentNode.Nodes.Add(originalDocument);
                }
                else
                {
                    this.trvDettagliFirma.Nodes.Add(originalDocument);
                }


                //Questo Codice commentato visualizza la marca temporale sulla ROOT del certificato
                //Per visualizzarla è necessario decommentarla

                /*
                 * if (signatureResult.tsInfo != null)
                 * {
                 *  int idx = 0;
                 *  foreach (TSInfo ts in signatureResult.tsInfo)
                 *  {
                 *      Microsoft.Web.UI.WebControls.TreeNode tsNode = new Microsoft.Web.UI.WebControls.TreeNode();
                 *      tsNode.NavigateUrl = DETAIL_PAGE + "?type=timestamp";
                 *      tsNode.Target = TARGET;
                 *      string tsText = "Marca Temporale";
                 *      tsNode.Text = tsText;
                 *      this.trvDettagliFirma.Nodes.Add(tsNode);
                 *  }
                 * }
                 */
            }
            else
            {
                // Il documento non è firmato digitalmente
                this.trvDettagliFirma.Nodes.Add(this.GetNodeDocumentoOriginale(signedDocument));
            }
        }
示例#11
0
        private static VerifySignatureResult ConvertToVerifySignatureResultUsingInternalStructures(EsitoVerificaStatus status, FirmaDigitale.DettaglioFirmaDigitaleType d)
        {
            VerifySignatureResult vsr = new VerifySignatureResult();
            List <DocsPaVO.documento.SignerInfo> siLst = new List <DocsPaVO.documento.SignerInfo>();

            string verbosesgb   = ConfigurationManager.AppSettings["VERBOSEDEBUG"];
            bool   verboseDebug = false;

            Boolean.TryParse(verbosesgb, out verboseDebug);


            if (verboseDebug)
            {
                logger.Debug(d.datiGeneraliVerifica);
            }


            if (d.fileMarcatoSpecified)
            {
                if (d.dataVerificaFirmaSpecified)
                {
                    logger.InfoFormat("data verifica firma  {0}", d.dataVerificaFirma);
                }

                if (d.fileMarcato)
                {
                    logger.Debug("Marcato");
                    TSInfo ts = new TSInfo();
                    if (d.marcaDetached != null)
                    {
                        logger.Debug("marcaDetached !=null");
                        //Gestire la marca
                        //logger.DebugFormat("TSANameIssuer [{0}]", d.marcaDetached.TSANameIssuer);
                        //logger.DebugFormat("TSANameSubject [{0}]", d.marcaDetached.TSANameSubject);
                        //logger.DebugFormat("TSimprint [{0}]", d.marcaDetached.TSimprint);
                        //logger.DebugFormat("TSserialNumber [{0}]", d.marcaDetached.TSserialNumber);


                        if (!String.IsNullOrEmpty(d.marcaDetached.TSANameIssuer))
                        {
                            ts.TSANameIssuer = d.marcaDetached.TSANameIssuer;
                        }

                        if (!String.IsNullOrEmpty(d.marcaDetached.TSANameSubject))
                        {
                            ts.TSANameSubject = d.marcaDetached.TSANameSubject;
                        }

                        if (!String.IsNullOrEmpty(d.marcaDetached.TSimprint))
                        {
                            ts.TSimprint = d.marcaDetached.TSimprint;
                        }

                        if (!String.IsNullOrEmpty(d.marcaDetached.TSserialNumber))
                        {
                            ts.TSserialNumber = d.marcaDetached.TSserialNumber;
                        }


                        if (d.marcaDetached.TSdateTimeSpecified)
                        {
                            ts.TSdateTime = d.marcaDetached.TSdateTime;
                        }


                        if (d.marcaDetached.dataFineValiditaCertSpecified)
                        {
                            ts.dataFineValiditaCert = d.marcaDetached.dataFineValiditaCert;
                        }


                        if (d.marcaDetached.dataInizioValiditaCertSpecified)
                        {
                            ts.dataInizioValiditaCert = d.marcaDetached.dataInizioValiditaCert;
                        }
                    }
                    else
                    {
                        //default nel caso la try sotto desse errore
                        ts.TSANameIssuer = "Marca non Detached, dati non disponibili";

                        //se questo dato ce l'ho lo valido
                        if (d.dataVerificaFirmaSpecified)
                        {
                            ts.TSdateTime = d.dataVerificaFirma;
                        }
                    }
                }
                else
                {
                }
            }

            if (d.datiFirmatari != null)
            {
                foreach (FirmaDigitale.FirmatarioType ft in d.datiFirmatari)
                {
                    //firmatari
                    DocsPaVO.documento.SignerInfo si = ExtractSignerInfo(status, ft.firmatario, ft.marcaFirma);

                    //controfirmatari
                    if (ft.controfirmatario != null)
                    {
                        List <DocsPaVO.documento.SignerInfo> csiLst = new List <DocsPaVO.documento.SignerInfo>();
                        foreach (FirmaDigitale.FirmatarioTypeControfirmatario cft in ft.controfirmatario)
                        {
                            DocsPaVO.documento.SignerInfo csi = ExtractSignerInfo(status, cft.firma, cft.marca);
                            csi.isCountersigner = true;
                            csiLst.Add(csi);
                        }
                        if (csiLst.Count > 0)
                        {
                            si.counterSignatures = csiLst.ToArray();
                        }
                    }

                    siLst.Add(si);
                }
            }

            List <DocsPaVO.documento.PKCS7Document> p7docsLst = new List <DocsPaVO.documento.PKCS7Document>();

            DocsPaVO.documento.PKCS7Document p7doc = new DocsPaVO.documento.PKCS7Document
            {
                SignersInfo      = siLst.ToArray(),
                DocumentFileName = null,
                Level            = 0
            };
            p7docsLst.Add(p7doc);
            vsr.PKCS7Documents = p7docsLst.ToArray();
            vsr.CRLOnlineCheck = true;
            return(vsr);
        }
示例#12
0
        private static VerifySignatureResult ConvertToVerifySignatureResultUsingDatiGeneraliVerifica(EsitoVerificaStatus status, FirmaDigitale.DettaglioFirmaDigitaleType d)
        {
            DeSign.deSign design       = null;
            string        verbosesgb   = ConfigurationManager.AppSettings["VERBOSEDEBUG"];
            bool          verboseDebug = false;

            Boolean.TryParse(verbosesgb, out verboseDebug);

            try
            {
                if (!String.IsNullOrEmpty(d.datiGeneraliVerifica))
                {
                    if (verboseDebug)
                    {
                        logger.InfoFormat("Risposta da infocert {0}", d.datiGeneraliVerifica);
                    }

                    design = DeSign.deSign.Deserialize(d.datiGeneraliVerifica);
                }
            }
            catch (Exception e)
            {
                logger.ErrorFormat("Errore deserializzando i dati da infocert {0} {1}", e.Message, e.StackTrace);
                return(null);
            }

            VerifySignatureResult vsr = new VerifySignatureResult();


            List <DocsPaVO.documento.SignerInfo>    siLst     = new List <SignerInfo>();
            List <DocsPaVO.documento.PKCS7Document> p7docsLst = new List <PKCS7Document>();
            string digestAlgo   = string.Empty;
            bool   badSignature = false;

            foreach (object item in design.signedData)
            {
                //trattasi di signedData
                DeSign.signedData sd = item as DeSign.signedData;
                foreach (DeSign.signer signer in sd.signer)
                {
                    DocsPaVO.documento.SignerInfo si = convertToSignerInfo(signer);

                    if (si.CertificateInfo.RevocationStatus != 0)
                    {
                        vsr.StatusCode        = si.CertificateInfo.RevocationStatus;
                        vsr.StatusDescription = si.CertificateInfo.RevocationStatusDescription;
                    }
                    digestAlgo = convertOidToString(signer.digestAlgorithm);

                    if (signer.status == "KO")
                    {
                        if (!badSignature)
                        {
                            badSignature = true;
                        }
                    }

                    siLst.Add(si);
                }
            }

            List <TSInfo> tsList = new List <TSInfo>();

            foreach (object item in design.timeStamp)
            {
                //trattasi di signedData
                DeSign.timeStamp ts  = item as DeSign.timeStamp;
                TSInfo           tsi = new TSInfo
                {
                    dataInizioValiditaCert = convertSimpleDateTime(ts.certNotBefore),
                    dataFineValiditaCert   = convertSimpleDateTime(ts.certNotAfter),
                    TSdateTime             = convertSimpleDateTime(ts.timeStampDate),
                    TSimprint      = ts.timeStampImprint,
                    TSANameIssuer  = ts.issuer.CN,
                    TSANameSubject = ts.subject.CN,
                    TSserialNumber = ts.timeStampSerial,
                    TSType         = TsType.PKCS
                };
                tsList.Add(tsi);
            }
            if (tsList.Count > 0)
            {
                vsr.DocumentTimeStampInfo = tsList.ToArray();
            }

            p7docsLst.Add(new PKCS7Document
            {
                SignersInfo      = siLst.ToArray(),
                DocumentFileName = null,
                Level            = 0
            });
            vsr.PKCS7Documents = p7docsLst.ToArray();
            vsr.CRLOnlineCheck = true;

            if ((badSignature) && (vsr.StatusCode == 0))
            {
                vsr.StatusCode = -1;
            }

            return(vsr);
        }