Пример #1
0
        public string[] BatchDettaglioCertificato(string[] CertificateBase64)
        {
            List <String> retval = new List <string>();

            OpenWcfChannel();
            string        serviceUrl = ConfigurationManager.AppSettings["SERVICE_URL"];
            Verifica      clr        = new Verifica();
            EsitoVerifica retvalCert = null;

            byte[] CertificateCAPEM = null;
            foreach (string certStr in CertificateBase64)
            {
                //converto il certificato base64 in binario
                byte[] CertificateDer = Convert.FromBase64String(certStr);
                try
                {
                    retvalCert = clr.VerificaCertificato(CertificateDer, CertificateCAPEM, client);
                    logger.Debug("Verifica cerificato effettuato con successo.");
                    retval.Add(Utils.SerializeObject <DocsPaVO.documento.CertificateInfo>(clr.GetCertificateInfoFromEv(retvalCert)));
                }
                catch (Exception e)
                {
                    logger.Error("Verifica cerificato Errore :" + e.Message + e.StackTrace);
                    //return e.Message;
                }
            }
            return(retval.ToArray());
        }
Пример #2
0
        public string ProvaServizioCERT()
        {
            string file       = Server.MapPath("~") + "\\cert.der";
            string serviceUrl = ConfigurationManager.AppSettings["SERVICE_URL"];

            OpenWcfChannel();
            Verifica clr = new Verifica();

            logger.Debug("Effettuo la verifica certificato");
            EsitoVerifica retval = null;

            try
            {
                byte[] ca = new  byte[0];
                //byte[] cer = new System.Text.ASCIIEncoding().GetBytes(Convert.ToBase64String(System.IO.File.ReadAllBytes(file)));
                byte[] cer    = System.IO.File.ReadAllBytes(file);
                string b64Cer = Convert.ToBase64String(System.IO.File.ReadAllBytes(file));
                retval = clr.VerificaCertificato(cer, ca, client);
                logger.Debug("Verifica cerificato effettuato.");
            }
            catch (Exception e)
            {
                logger.Error("Verifica cerificato Errore :" + e.Message + e.StackTrace);
                return(e.Message);
            }


            return(Utils.SerializeObject <EsitoVerifica>(retval));
        }
Пример #3
0
        public string VerificaCertificato(byte[] content, DateTime?dataverificaDT, bool ancheFile, bool isCadesPades)
        {
            OpenWcfChannel();
            Verifica      clr    = new Verifica();
            EsitoVerifica retval = null;

            try
            {
                if (!isCadesPades)
                {
                    retval = clr.VerificaByteEV(content, null, dataverificaDT, client);
                }
                else
                {
                    retval = clr.VerificaByteEVCompleta(content, dataverificaDT, client);
                }
                logger.Debug("Verifica cerificato effettuato con successo.");
            }
            catch (Exception e)
            {
                logger.Error("Verifica cerificato Errore :" + e.Message + e.StackTrace);
            }

            if (!ancheFile)
            {
                retval.content = null;
            }


            return(Utils.SerializeObject <EsitoVerifica>(retval));
        }
Пример #4
0
 public CertificateInfo GetCertificateInfoFromEv(EsitoVerifica ev)
 {
     //grande assunto
     try
     {
         return(ev.VerifySignatureResult.PKCS7Documents[0].SignersInfo[0].CertificateInfo);
     }
     catch
     {
         return(new CertificateInfo());
     }
 }
Пример #5
0
        public string DettaglioCertificato(byte[] CertificateDer, byte[] CertificateCAPEM)
        {
            OpenWcfChannel();
            string        serviceUrl = ConfigurationManager.AppSettings["SERVICE_URL"];
            Verifica      clr        = new Verifica();
            EsitoVerifica retval     = null;

            try
            {
                retval = clr.VerificaCertificato(CertificateDer, CertificateCAPEM, client);
                logger.Debug("Verifica cerificato effettuato con successo.");
            }
            catch (Exception e)
            {
                logger.Error("Verifica cerificato Errore :" + e.Message + e.StackTrace);
                return(e.Message);
            }

            return(Utils.SerializeObject <EsitoVerifica>(retval));
        }
Пример #6
0
        public EsitoVerifica VerificaByteEVCompleta(byte[] fileContents, DateTime?dataverificaDT, FirmaDigitale.FirmaDigitalePortTypeClient client)
        {
            logger.Debug("INIZIO");
            logger.Debug("VERIFICA FIRMA COMPLETA");
            string verbosesgb   = ConfigurationManager.AppSettings["VERBOSEDEBUG"];
            bool   verboseDebug = false;

            Boolean.TryParse(verbosesgb, out verboseDebug);


            EsitoVerifica ev = new EsitoVerifica();

            FirmaDigitale.DettaglioFirmaDigitaleType ret = null;

            string dataVerificaString = string.Empty;


            try
            {
                if (dataverificaDT != null)
                {
                    dataVerificaString = zeniDateConverter(dataverificaDT);
                }
                else
                {
                    dataVerificaString = null;
                }
                System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls | System.Net.SecurityProtocolType.Ssl3;
            }
            catch (Exception ex)
            {
                string inner = string.Empty;
                ev.status = EsitoVerificaStatus.ErroreGenerico;
                if (ex.InnerException != null)
                {
                    inner = ex.InnerException.Message;
                }
                ev.message = string.Format("{0},{1}   INNER {2} ", ex.Message, ex.StackTrace, inner);
                return(ev);
            }


            try
            {
                sbyte?controlloFirmeAnnidate = 1;
                logger.Debug("Data Verifica: " + dataVerificaString + " (" + dataverificaDT.ToString() + ")");

                FirmaDigitale.DocumentoType doc = new FirmaDigitale.DocumentoType();
                ret = client.VerificaFirmaCompleta(fileContents, dataVerificaString, controlloFirmeAnnidate, out doc);

                ev.status = EsitoVerificaStatus.Valid;

                if (ret != null)
                {
                    ev.VerifySignatureResult = ConvertToVerifySignatureResult(ev.status, ret);
                }
                ;

                if (verboseDebug)
                {
                    logger.Info(Utils.SerializeObject <EsitoVerifica>(ev));
                }
                logger.Debug("Firma OK");

                return(ev);
            }

            catch (FaultException <FirmaDigitale.FaultType> f)
            {
                ev.status    = EsitoVerificaStatus.ErroreGenerico;
                ev.message   = f.Detail.userMessage;
                ev.errorCode = f.Detail.errorCode;
                logger.Error("errore in verifica firma completa:" + ev.message);
                if (logger.IsInfoEnabled)
                {
                    logger.Info(Utils.SerializeObject <EsitoVerifica>(ev));
                }
                return(ev);
            }

            catch (FaultException <FirmaDigitale.WarningResponseType> w)
            {
                List <string> lstW = new List <string>();
                foreach (FirmaDigitale.WarningType s in w.Detail.WarningFault)
                {
                    lstW.Add(Utils.SerializeObject <FirmaDigitale.WarningType>(s));

                    ev.message   = s.errorMsg;
                    ev.errorCode = s.errorCode;
                    ev.SubjectDN = s.SubjectDN;
                    ev.SubjectCN = s.SubjectCN;

                    ev.status = EsitoVerificaStatus.ErroreGenerico;

                    if (s.errorCode == "1426")
                    {
                        ev.status = EsitoVerificaStatus.CtlNotTimeValid;
                    }
                    if (s.errorCode == "1468")
                    {
                        ev.status = EsitoVerificaStatus.SHA1NonSupportato;
                    }
                    if (s.errorCode == "1407")  // check
                    {
                        ev.status = EsitoVerificaStatus.NotTimeValid;
                    }
                    if (s.errorCode == "1408")  // check
                    {
                        ev.status = EsitoVerificaStatus.Revoked;
                        foreach (FirmaDigitale.FirmatarioType ft in w.Detail.DettaglioFirmaDigitale.datiFirmatari)
                        {
                            if (ft.firmatario.dataRevocaCertificato != DateTime.MinValue)
                            {
                                ev.dataRevocaCertificato = ft.firmatario.dataRevocaCertificato;
                            }
                        }
                    }
                }

                //TEST!!!!
                FirmaDigitale.DettaglioFirmaDigitaleType d = w.Detail.DettaglioFirmaDigitale;
                if (w.Detail.Documento != null)
                {
                    ev.content = w.Detail.Documento.fileOriginale;
                }

                ev.VerifySignatureResult = ConvertToVerifySignatureResult(ev.status, d);;
                ev.additionalData        = lstW.ToArray();

                logger.Debug("Firma verificata con warning");
                if (logger.IsInfoEnabled)
                {
                    logger.Info(Utils.SerializeObject <EsitoVerifica>(ev));
                }
                return(ev);
            }

            catch (Exception ex)
            {
                ev.status  = EsitoVerificaStatus.ErroreGenerico;
                ev.message = string.Format("{0},{1}", ex.Message, ex.StackTrace);
                logger.Error(ev.message);
                if (logger.IsInfoEnabled)
                {
                    logger.Info(Utils.SerializeObject <EsitoVerifica>(ev));
                }
                return(ev);
            }
        }
Пример #7
0
        public EsitoVerifica VerificaCertificato(byte[] certificateDER, byte[] certificateCAPEM, FirmaDigitale.FirmaDigitalePortTypeClient client)
        {
            logger.Debug("INIZIO");
            List <string> addiData = new List <string>();
            EsitoVerifica ev       = new EsitoVerifica();
            // FirmaDigitale.DettaglioFirmaDigitaleType ret = null;
            CertificateInfo ciInfo           = new CertificateInfo();
            sbyte?          controlloCRLCert = 0;
            sbyte?          controlloCRLCa   = 1;

            ciInfo.X509Certificate = certificateDER;
            ciInfo.ThumbPrint      = BitConverter.ToString(System.Security.Cryptography.SHA1.Create().ComputeHash(certificateDER)).Replace("-", "");

            controlloCRLCert = null;
            int statusInt = -1;

            System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls | System.Net.SecurityProtocolType.Ssl3;
            DateTime dataverifica;

            try
            {
                logger.DebugFormat("len {0}", certificateDER.Length);
                FirmaDigitale.CertificatoType certOut = client.VerificaCertificato(certificateDER, certificateCAPEM, controlloCRLCert, controlloCRLCa, out dataverifica);
                logger.Debug("verificaOK");
                ciInfo    = convertFromCertificatoType(certOut);
                statusInt = 0;
            }

            catch (FaultException <FirmaDigitale.WarningCertificatoType> w)
            {
                string status = w.Detail.status;
                string errMsg = w.Detail.errorMsg;
                logger.Debug(status);
                logger.Debug(errMsg);
                addiData.Add(status);
                addiData.Add(errMsg);
                ciInfo = convertFromWarningCertificatoType(w.Detail);
                Int32.TryParse(w.Detail.status, out statusInt);
                ciInfo.RevocationStatus = statusInt;

                ev.errorCode = w.Detail.status.ToString();
                if (errMsg.ToLower().Contains("revoc"))
                {
                    ev.status = EsitoVerificaStatus.Revoked;
                }
                else
                {
                    ev.status = EsitoVerificaStatus.NotTimeValid;
                }
            }
            catch (Exception e)
            {
                logger.ErrorFormat("errore {0} {1}", e.Message, e.StackTrace);
                ev.message = e.Message;
            }

            // ciInfo.ThumbPrint = BitConverter.ToString(System.Security.Cryptography.SHA1.Create().ComputeHash(certificateDER)).Replace("-", "");
            ev.additionalData = addiData.ToArray();

            //quarda che devo fare per restituire il certificateinfo
            List <SignerInfo>    retSI = new List <SignerInfo>();
            List <PKCS7Document> p7doc = new List <PKCS7Document>();

            retSI.Add(new SignerInfo {
                CertificateInfo = ciInfo
            });
            p7doc.Add(new PKCS7Document {
                SignersInfo = retSI.ToArray()
            });
            ev.VerifySignatureResult = new VerifySignatureResult {
                StatusCode = statusInt, PKCS7Documents = p7doc.ToArray()
            };

            return(ev);
        }