예제 #1
0
 public bool richiediOTP(string aliasCertificato, string dominioCertificato, FirmaRemota.FirmaRemotaPortTypeClient client)
 {
     if (string.IsNullOrEmpty(dominioCertificato))
     {
         dominioCertificato = ConfigurationManager.AppSettings["HSMCERTDOMAIN"];
     }
     System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls | System.Net.SecurityProtocolType.Ssl3;
     try
     {
         string retval = client.RichiestaOTP(aliasCertificato, dominioCertificato);
         if (retval.ToUpperInvariant().Equals("OK"))
         {
             return(true);
         }
         else
         {
             return(false);
         }
     }
     catch (FaultException <FirmaRemota.WSFault> f)
     {
         string errMsg = componiErroreWSFault(f.Detail);
         logger.Error(errMsg);
         throw new Exception(errMsg);
     }
     catch (Exception e)
     {
         string errMsg = componiErrore(e, "VisualizzaCertificatoHSM");
         logger.Error(errMsg);
         throw new Exception(errMsg);
     }
 }
예제 #2
0
        private void OpenWcfChannel()
        {
            string serviceUrl = ConfigurationManager.AppSettings["HSMSERVICE_URL"];

            if (client == null)
            {
                logger.Debug("Il canale è null, apro un nuovo canale di comunicazione");
                client = HSMConnector.createClient(serviceUrl);
            }

            if (client.State != System.ServiceModel.CommunicationState.Opened)
            {
                logger.Debug("Il canale è chiuso, lo apro nuovamente");
                client = HSMConnector.createClient(serviceUrl);
            }
        }
예제 #3
0
        public static bool Session_RemoteSign(string SessionToken, string aliasCertificato, string dominioCertificato, string pinCertificato, string otpFirma, FirmaRemota.FirmaRemotaPortTypeClient client)
        {
            List <byte[]> filesRead = new List <byte[]>();

            SessionToken = SessionToken.ToUpper();

            //string cacheDir = Path.Combine ( AppDomain.CurrentDomain.BaseDirectory , "MultiSignWorkDir");
            string cacheDir   = ConfigurationManager.AppSettings["CACHEDIR"] + "MultiSignWorkDir";
            string sessionDir = Path.Combine(cacheDir, SessionToken);

            if (Directory.Exists(sessionDir))
            {
                string manifestFile = Path.Combine(sessionDir, "Manifest.xml");
                if (File.Exists(manifestFile))
                {
                    String manifestXML        = File.ReadAllText(manifestFile);
                    Manifest.ManifestFile mft = Manifest.ManifestFile.Deserialize(manifestXML);
                    foreach (Manifest.MainfestFileInformation FileInformation in mft.FileInformation)
                    {
                        byte[] content = File.ReadAllBytes(Path.Combine(sessionDir, FileInformation.OriginalFullName));

                        filesRead.Add(content);
                    }

                    sbyte marca          = 0;
                    sbyte firmaParallela = 0;

                    if (mft.timestamp)
                    {
                        marca = 1;
                    }

                    if (mft.cosign)
                    {
                        firmaParallela = 1;
                    }

                    ClrVerificationService.FirmaRemota.FileFirmatiType retval = null;
                    try
                    {
                        if (client != null)
                        {
                            System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls | System.Net.SecurityProtocolType.Ssl3;
                            if (mft.SignatureType == Manifest.SignType.CADES)
                            {
                                retval = client.FirmaRemotaMultiplaP7M(filesRead.ToArray(), aliasCertificato, dominioCertificato, pinCertificato, otpFirma, marca, firmaParallela);
                            }
                            else
                            {
                                retval = client.FirmaRemotaMultiplaPDF(filesRead.ToArray(), aliasCertificato, dominioCertificato, pinCertificato, otpFirma, marca);
                            }
                        }
                        else
                        {
                            retval = new ClrVerificationService.FirmaRemota.FileFirmatiType();
                            //dummy
                            retval.documentoFirmato = filesRead.ToArray();
                        }
                    }
                    catch (FaultException <FirmaRemota.WSFault> f)
                    {
                        string errMsg = componiErroreWSFault(f.Detail);
                        logger.Error(errMsg);
                        throw new Exception(errMsg);
                    }
                    catch (Exception e)
                    {
                        logger.ErrorFormat("Errore chimando la firma multipla {0} {1}", e.Message, e.StackTrace);
                        return(false);
                    }
                    int index = 0;
                    foreach (byte[] filebyteArray in retval.documentoFirmato)
                    {
                        filesRead[index++] = filebyteArray;
                    }

                    index = 0;
                    foreach (Manifest.MainfestFileInformation FileInformation in mft.FileInformation)
                    {
                        byte[] content = filesRead[index++];
                        string newName = "signed_" + FileInformation.OriginalFullName;
                        File.WriteAllBytes(Path.Combine(sessionDir, newName), content);
                        FileInformation.SignedFullName = newName;
                    }
                    File.WriteAllText(manifestFile, mft.Serialize());

                    return(true);
                }
            }
            return(false);
        }
예제 #4
0
        public byte[] FirmaFileCADES(byte[] fileDafirmare, string aliasCertificato, string dominioCertificato, string pinCertificato, string otpFirma, bool marcaTemporale, bool cofirma, FirmaRemota.FirmaRemotaPortTypeClient client)
        {
            DateTime dataVerifica = DateTime.Now;

            if (string.IsNullOrEmpty(dominioCertificato))
            {
                dominioCertificato = ConfigurationManager.AppSettings["HSMCERTDOMAIN"];
            }

            sbyte marca          = 0;
            sbyte firmaParallela = 0;

            if (marcaTemporale)
            {
                marca = 1;
            }

            if (cofirma)
            {
                firmaParallela = 1;
            }


            System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls | System.Net.SecurityProtocolType.Ssl3;
            try
            {
                ClrVerificationService.FirmaRemota.fileFirmato retval = client.FirmaRemotaP7M(fileDafirmare, aliasCertificato, dominioCertificato, pinCertificato, otpFirma, marca, firmaParallela);
                return(retval.Value);
            }
            catch (FaultException <FirmaRemota.WSFault> f)
            {
                string errMsg = componiErroreWSFault(f.Detail);
                logger.Error(errMsg);
                throw new Exception(errMsg);
            }
            catch (Exception e)
            {
                string errMsg = componiErrore(e, "FirmaFileCADES");
                logger.Error(errMsg);
                throw new Exception(errMsg);
            }
        }
예제 #5
0
        public byte[] ControFirmaFileCADES(byte[] fileDafirmare, string aliasCertificatoDaControfirmare, string aliasCertificato, string dominioCertificato, string pinCertificato, string otpFirma, bool marcaTemporale, FirmaRemota.FirmaRemotaPortTypeClient client)
        {
            DateTime dataVerifica = DateTime.Now;

            if (string.IsNullOrEmpty(dominioCertificato))
            {
                dominioCertificato = ConfigurationManager.AppSettings["HSMCERTDOMAIN"];
            }

            sbyte marca          = 0;
            sbyte firmaParallela = 0;

            if (marcaTemporale)
            {
                marca = 1;
            }

            System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls | System.Net.SecurityProtocolType.Ssl3;
            List <byte[]> fileArr = new List <byte[]>();

            fileArr.Add(fileDafirmare);
            try
            {
                ClrVerificationService.FirmaRemota.DocumentiControFirmatiType retval = client.ControFirma(fileArr.ToArray(), aliasCertificatoDaControfirmare, aliasCertificato, dominioCertificato, pinCertificato, otpFirma, marca);
                return(retval.docControFirmato[0]);
            }
            catch (FaultException <FirmaRemota.WSFault> f)
            {
                string errMsg = componiErroreWSFault(f.Detail);
                logger.Error(errMsg);
                throw new Exception(errMsg);
            }
            catch (Exception e)
            {
                string errMsg = componiErrore(e, "ControFirmaFileCADES");
                logger.Error(errMsg);
                throw new Exception(errMsg);
            }
        }
예제 #6
0
        public static FirmaRemota.FirmaRemotaPortTypeClient createClient(string endPoindAddress)
        {
            logger.Debug("INIZIO");
            FirmaRemota.FirmaRemotaPortTypeClient channel = null;
            try
            {
                var binding = new CustomBinding();
                binding.Name = "FirmaRemotaPortTypeEndpoint2BindingMIO";

                XmlDictionaryReaderQuotas readquota = new XmlDictionaryReaderQuotas
                {
                    MaxStringContentLength = 100000000,
                    MaxArrayLength         = 100000000,
                    MaxBytesPerRead        = 52428800
                };
                MtomMessageEncodingBindingElement mtomEconding = new MtomMessageEncodingBindingElement
                {
                    MaxReadPoolSize  = 640,
                    MaxWritePoolSize = 160,
                    MessageVersion   = MessageVersion.Soap12,
                    MaxBufferSize    = 2147483647,
                };

                mtomEconding.ReaderQuotas.MaxArrayLength         = 100000000;
                mtomEconding.ReaderQuotas.MaxBytesPerRead        = 52428800;
                mtomEconding.ReaderQuotas.MaxStringContentLength = 52428800;

                HttpsTransportBindingElement httpsTransposport = new HttpsTransportBindingElement
                {
                    ManualAddressing          = false,
                    MaxBufferPoolSize         = 52428800,
                    MaxBufferSize             = 2147483647,
                    MaxReceivedMessageSize    = 2147483647,
                    AllowCookies              = false,
                    AuthenticationScheme      = System.Net.AuthenticationSchemes.Anonymous,
                    BypassProxyOnLocal        = false,
                    HostNameComparisonMode    = System.ServiceModel.HostNameComparisonMode.StrongWildcard,
                    KeepAliveEnabled          = true,
                    ProxyAuthenticationScheme = System.Net.AuthenticationSchemes.Anonymous,
                    Realm        = "",
                    TransferMode = System.ServiceModel.TransferMode.Buffered,
                    UnsafeConnectionNtlmAuthentication = false,
                    UseDefaultWebProxy       = false,
                    RequireClientCertificate = true
                };

                binding.Elements.Add(mtomEconding);
                binding.Elements.Add(httpsTransposport);

                EndpointAddress     epAddre = new EndpointAddress(endPoindAddress);
                ContractDescription cd      = new ContractDescription("FirmaRemota.FirmaRemotaPortType");

                channel = new FirmaRemota.FirmaRemotaPortTypeClient(binding, epAddre);
                string certFindData = ConfigurationManager.AppSettings["HSM_CERTNAME"];
                channel.ClientCredentials.ClientCertificate.SetCertificate(System.Security.Cryptography.X509Certificates.StoreLocation.LocalMachine, System.Security.Cryptography.X509Certificates.StoreName.My, System.Security.Cryptography.X509Certificates.X509FindType.FindBySubjectName, certFindData);
                channel.Endpoint.Behaviors.Add(new MaxFaultSizeBehavior(2147483647));
            }
            catch (Exception e)
            {
                logger.Error("createClient error :" + e.Message + e.StackTrace);
                throw e;
            }
            return(channel);
        }
예제 #7
0
        public string VisualizzaCertificatoHSM(string aliasCertificato, string dominioCertificato, FirmaRemota.FirmaRemotaPortTypeClient client)
        {
            if (string.IsNullOrEmpty(dominioCertificato))
            {
                dominioCertificato = ConfigurationManager.AppSettings["HSMCERTDOMAIN"];
            }


            DateTime dataVerifica = DateTime.Now;

            System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls | System.Net.SecurityProtocolType.Ssl3;
            try
            {
                ClrVerificationService.FirmaRemota.CertificatoType ct = client.VisualizzaCertificato(aliasCertificato, dominioCertificato, out dataVerifica);
                return(GetCertificateListAsJsonFormat(ct));
            }
            catch (FaultException <FirmaRemota.WSFault> f)
            {
                string errMsg = componiErroreWSFault(f.Detail);
                logger.Error(errMsg);
                throw new Exception(errMsg);
            }
            catch (Exception e)
            {
                string errMsg = componiErrore(e, "VisualizzaCertificatoHSM");
                logger.Error(errMsg);
                throw new Exception(errMsg);
            }
        }