/// <summary> /// Generazione timestamp con il vecchio metodo di IT /// </summary> /// <param name="TimeStampQuery">Struttura contente le informazioni per la generazione della marca</param> /// <returns>Struttura contente le informazioni della marca generata</returns> public OutputResponseMarca getTimeStamp(InputMarca TimeStampQuery) { logger.Debug("Chiamato DocsPa_TSAuthority_InfoTN"); OutputResponseMarca resultMarca = new OutputResponseMarca(); marcatura.InputMarca inputMarca = new DocsPa_TSAuthority_InfoTN.marcatura.InputMarca(); marcatura.OutputResponseMarca outMarca = new DocsPa_TSAuthority_InfoTN.marcatura.OutputResponseMarca(); marcatura.marcatura Marca = new DocsPa_TSAuthority_InfoTN.marcatura.marcatura(); string urlTSA = string.Empty; if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["URL_TSA"])) { urlTSA = ConfigurationManager.AppSettings["URL_TSA"].ToString(); Marca.Url = urlTSA; } inputMarca.applicazione = TimeStampQuery.applicazione; inputMarca.file_p7m = TimeStampQuery.file_p7m; inputMarca.riferimento = TimeStampQuery.riferimento; outMarca = Marca.getTSR(inputMarca); //mapping del risultato sull'oggetto di DocsPa resultMarca.descrizioneErrore = outMarca.descrizioneErrore; resultMarca.docm = outMarca.docm; resultMarca.dsm = outMarca.dsm; resultMarca.esito = outMarca.esito; resultMarca.fhash = outMarca.fhash; resultMarca.marca = outMarca.marca; resultMarca.sernum = outMarca.sernum; resultMarca.TSA = new TSARFC2253(); resultMarca.TSA.TSARFC2253Name = outMarca.TSA; return(resultMarca); }
/// <summary> /// Funzione di generazione della marca temporale. /// </summary> /// <param name="inMarca">Struttura contente le informazioni per la generazione della marca</param> /// <param name="svcUrl">Url del webservice tibco della marca temporale</param> /// <returns></returns> public OutputResponseMarca getMarcaByFile(InputMarca inMarca, string svcUrl) { logger.DebugFormat("INIZIO {0} - {1}", inMarca.file_p7m, svcUrl); byte[] fileContent = String_To_Bytes(inMarca.file_p7m); //System.IO.File.ReadAllBytes(inMarca.file_p7m); OutputResponseMarca retval = new OutputResponseMarca(); retval.TSA = new TSARFC2253(); System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls | System.Net.SecurityProtocolType.Ssl3; MarcaturaTemporale.MarcaturaTemporalePortTypeClient client = createClient(svcUrl); try { MarcaturaTemporale.MarcaType mt = client.EmissioneMarcaTemporale(fileContent); retval.marca = Convert.ToBase64String(mt.marca); retval.sernum = mt.serialNumber.ToString(); retval.TSA.TSARFC2253Name = mt.timestampAuthority; retval.docm_date = mt.dataOraMarca.ToString(); retval.esito = "OK"; logger.DebugFormat("Generazione Marca per file MarcaBase64 len:{2} Val [{0}] DATATA {1}", retval.marca, retval.docm_date.ToString(), mt.marca.Length); //Per la generazione del fhash.. ma non è richiesto per il funzionamento SHA256Managed sha256 = new SHA256Managed(); byte[] hash = sha256.ComputeHash(fileContent); string hexHash = BitConverter.ToString(hash); hexHash = hexHash.Replace("-", ""); retval.fhash = hexHash; } catch (FaultException <MarcaturaTemporale.FaultType> f) { logger.Error(String.Format("Errore {0} code {1}", f.Detail.userMessage, f.Code)); //Console.WriteLine(String.Format("Errore {0} code {1}", f.Detail.userMessage, f.Code)); retval.descrizioneErrore = f.Detail.userMessage; retval.esito = "KO"; } catch (Exception e) { logger.Error(String.Format("Errore {0} code {1}", e.Message, e.Data)); // Console.WriteLine(String.Format("Errore {0} code {1}", pe.Message, pe.Data)); retval.descrizioneErrore = e.Message; retval.esito = "KO"; } return(retval); }
public OutputResponseMarca getTSR(InputMarca richiesta, InfoUtente utente) { OutputResponseMarca resultMarca = new OutputResponseMarca(); //Se l'oggetto infoUtente non è valorizzato non eseguo alcuna operazione e restituisco solo //il messaggio di errore dell'oggetto OutputResponseMarca if (utente == null) { logger.Debug("InfoUtente nullo o non valido."); resultMarca.esito = "KO"; resultMarca.descrizioneErrore = "Utente nullo o non autorizzato!"; return(resultMarca); } try { //Scelta del tipo di implementazione per la richiesta della marca temporale string typeName = System.Configuration.ConfigurationManager.AppSettings["TYPE_TSA"]; Type instanceType = Type.GetType(typeName, false); if (instanceType == null) { throw new ApplicationException(string.Format("Tipo non valido per la configurazione '{0}'", "TYPE_TSA")); } DocsPa_I_TSAuthority.I_TSR_Request instance = (DocsPa_I_TSAuthority.I_TSR_Request)Activator.CreateInstance(instanceType); //ottengo una marca temporale in base alla specifica implementazione settata nel web.config resultMarca = instance.getTimeStamp(richiesta); //genero l'array di byte per il file p7m e TSR byte[] p7m = String_To_Bytes(richiesta.file_p7m); byte[] TSR = Convert.FromBase64String(resultMarca.marca); //verifico la marca e completo l'oggetto OutputResponseMarca resultMarca = VerificaMarca(p7m, TSR); } catch (Exception eMarca) { resultMarca.esito = "KO"; resultMarca.descrizioneErrore = "richiesta della marca fallita: " + eMarca.Message; logger.Debug("richiesta della marca fallita: " + eMarca.Message); } return(resultMarca); }
/// <summary> /// Generazione timestamp con il nuovo metodo di IT /// </summary> /// <param name="TimeStampQuery">Struttura contente le informazioni per la generazione della marca</param> /// <returns>Struttura contente le informazioni della marca generata</returns> public OutputResponseMarca getTimeStamp(InputMarca TimeStampQuery) { logger.Debug("Chiamato DocsPa_TSAuthority_InfoTN_V2"); string urlTSA = string.Empty; if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["URL_TSA"])) { urlTSA = ConfigurationManager.AppSettings["URL_TSA"].ToString(); } DocsPa_TSAuthority_InfoTN.MarcaWCF m = new DocsPa_TSAuthority_InfoTN.MarcaWCF(); InputMarca inputMarca = new DocsPaVO.areaConservazione.InputMarca(); inputMarca.applicazione = TimeStampQuery.applicazione; inputMarca.file_p7m = TimeStampQuery.file_p7m; inputMarca.riferimento = TimeStampQuery.riferimento; DocsPaVO.areaConservazione.OutputResponseMarca outVal = m.getMarcaByFile(inputMarca, urlTSA); return(outVal); }
/// <summary> /// /// </summary> /// <param name="TimeStampQuery"></param> /// <returns></returns> public OutputResponseMarca getTimeStamp(InputMarca TimeStampQuery) { OutputResponseMarca outputMarca = new OutputResponseMarca(); byte[] dati = String_To_Bytes(TimeStampQuery.file_p7m); //SHA1 sha1 = SHA1CryptoServiceProvider.Create(); //byte[] hash = sha1.ComputeHash(dati); SHA256Managed sha256 = new SHA256Managed(); byte[] hash = sha256.ComputeHash(dati); TimeStampRequestGenerator reqGen = new TimeStampRequestGenerator(); reqGen.SetCertReq(true); //Funzione randomica per il Nonce. //RandomNumberGenerator nRand = new RNGCryptoServiceProvider(); long casuale = (long)nRandom.Next(); //TimeStampRequest tsReq = reqGen.Generate(TspAlgorithms.Sha1, hash, BigInteger.ValueOf(casuale)); TimeStampRequest tsReq = reqGen.Generate(TspAlgorithms.Sha256, hash, BigInteger.ValueOf(casuale)); byte[] tsData = tsReq.GetEncoded(); string urlTSA = string.Empty; if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["URL_TSA"])) { urlTSA = ConfigurationManager.AppSettings["URL_TSA"].ToString(); HttpWebRequest req = (HttpWebRequest)WebRequest.Create(urlTSA); req.Method = "POST"; req.ContentType = "application/timestamp-query"; //Username e password per accedere alla Time Stamping Authority string pwd = string.Empty; if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["PASSWORD_UTENTE_TSA"])) { pwd = ConfigurationManager.AppSettings["PASSWORD_UTENTE_TSA"].ToString(); req.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(pwd))); } req.ContentLength = tsData.Length; Stream reqStream = req.GetRequestStream(); reqStream.Write(tsData, 0, tsData.Length); reqStream.Close(); HttpWebResponse res = (HttpWebResponse)req.GetResponse(); if (res == null) { outputMarca.esito = "KO"; outputMarca.descrizioneErrore = "Impossibile contattare la TSA o autorizzazione negata"; return(outputMarca); } else { Stream resStream = new BufferedStream(res.GetResponseStream()); TimeStampResponse tsRes = new TimeStampResponse(resStream); resStream.Close(); BusinessLogic.Documenti.DigitalSignature.VerifyTimeStamp checkMarca = new BusinessLogic.Documenti.DigitalSignature.VerifyTimeStamp(); outputMarca = checkMarca.Verify(tsReq, tsRes); } } else { outputMarca.esito = "KO"; outputMarca.descrizioneErrore = "Impossibile contattare la TSA o url configurata errata!"; return(outputMarca); } return(outputMarca); }