예제 #1
0
파일: MCfdi.cs 프로젝트: IsraelBV/SUN
        public static string GetSelloDigitalEmisor33_v2(ref string noCertificado, ref string certificadoB64, string cadenaOriginal, byte[] archivoCer, byte[] archivoKey, string password)
        {
            string selloDigital = null;

            try
            {
                CertificadoDigital cert = GetCertificadoDigital_v2(archivoCer);
                noCertificado  = cert.NoCertificado;
                certificadoB64 = cert.CertificadoBase64;

                SecureString identidad = new SecureString();
                identidad.Clear();

                foreach (var c in password.ToCharArray())
                {
                    identidad.AppendChar(c);
                }

                byte[] llavePrivadaBytes = archivoKey;

                RSACryptoServiceProvider    lrsa   = opensslkey.DecodeEncryptedPrivateKeyInfo(llavePrivadaBytes, identidad);
                SHA256CryptoServiceProvider hasher = new SHA256CryptoServiceProvider();
                byte[] bytesFirmados = lrsa.SignData(Encoding.UTF8.GetBytes(cadenaOriginal), hasher);
                //bool isValid = lrsa.VerifyData(Encoding.UTF8.GetBytes(cadenaOriginal), hasher, bytesFirmados);

                selloDigital = Convert.ToBase64String(bytesFirmados);

                return(selloDigital);
            }
            catch (Exception ex)
            {
                return(selloDigital);
            }
        }
예제 #2
0
 private void btn_certificado_windows_Click(object sender, EventArgs e)
 {
     try
     {
         X509Certificate2 certificado = CertificadoDigital.ListareObterDoRepositorio();
         if (certificado.IsA3())
         {
             string senha = Prompt.ShowDialog("Entre com a senha do certificado", "");
             certificado = CertificadoDigital.getA3Certificado(certificado.SerialNumber, senha);
             certificado.VerificaValidade();
             user_control.salvarCertificadoUserLogado(certificado, 3, "", senha);
         }
         else
         {
             certificado.VerificaValidade();
             user_control.salvarCertificadoUserLogado(certificado, 2, "", "");
         }
         MessageBox.Show("O certificado foi configurado com êxito");
         this.Close();
     }
     catch (Exception ex)
     {
         if (ex.Message.Contains("Nome do parâmetro: index"))
         {
             MessageBox.Show("Certificado não selecionado.");
         }
         else
         {
             MessageBox.Show("Erro ao obter certificado: " + ex.Message);
         }
     }
 }
예제 #3
0
        private static async Task ManifestarCienciaOperacao()
        {
            try
            {
                Console.WriteLine("Informe a chave da NFe para download:");
                string chave = Console.ReadLine();

                using (var _certificado = CertificadoDigital.ObterCertificado(_configuracoes.CfgServico.Certificado))
                    using (var servicoNFe = new ServicosNFe(_configuracoes.CfgServico, _certificado))
                    {
                        var retornoManifestacao = servicoNFe.RecepcaoEventoManifestacaoDestinatario(idlote: 1,
                                                                                                    sequenciaEvento: 1,
                                                                                                    chavesNFe: new string[] { chave },
                                                                                                    nFeTipoEventoManifestacaoDestinatario: NFeTipoEvento.TeMdCienciaDaOperacao,
                                                                                                    cpfcnpj: _configuracoes.Emitente.CNPJ,
                                                                                                    justificativa: null);

                        Console.WriteLine($"Retorno da manifestação: {retornoManifestacao.RetornoStr}");
                    }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        private static void ValidCertificateChain(CertificadoDigital cert)
        {
            if (cert.ErrosValidacaoCadeia != null && cert.ErrosValidacaoCadeia.Any())
            {
                StringBuilder erroMessage = new StringBuilder();

                bool exception = cert.ErrosValidacaoCadeia.Any(e =>
                                                               e.Key == (int)X509ChainStatusFlags.PartialChain ||
                                                               e.Key == (int)X509ChainStatusFlags.RevocationStatusUnknown ||
                                                               e.Key == (int)X509ChainStatusFlags.OfflineRevocation);

                foreach (var erro in cert.ErrosValidacaoCadeia)
                {
                    erroMessage.AppendLine($"Status: {erro.Key} | Status Information: {erro.Value}");
                }

                if (exception)
                {
                    erroMessage.Insert(0, $"Não foi possível validar a cadeia do certificado digital.\n");
                    throw new Exception(erroMessage.ToString());
                }
                else
                {
                    erroMessage.Insert(0, $"Certificado digital com cadeia inválida. {message}\n");
                    throw new Exception(erroMessage.ToString());
                }
            }
        }
예제 #5
0
        private static async Task DownloadXml()
        {
            try
            {
                Console.WriteLine("Informe a chave da NFe para download:");
                string chave = Console.ReadLine();

                Console.WriteLine("Deseja manifestar a NFe? (S/N)");
                bool manifestar = string.Equals(Console.ReadLine().Trim().ToLower(), "s");


                using (var _certificado = CertificadoDigital.ObterCertificado(_configuracoes.CfgServico.Certificado))
                    using (var servicoNFe = new ServicosNFe(_configuracoes.CfgServico, _certificado))
                    {
                        if (manifestar)
                        {
                            try
                            {
                                var retornoManifestacao = servicoNFe.RecepcaoEventoManifestacaoDestinatario(idlote: 1,
                                                                                                            sequenciaEvento: 1,
                                                                                                            chavesNFe: new string[] { chave },
                                                                                                            nFeTipoEventoManifestacaoDestinatario: NFeTipoEvento.TeMdCienciaDaOperacao,
                                                                                                            cpfcnpj: _configuracoes.Emitente.CNPJ,
                                                                                                            justificativa: null);

                                Console.WriteLine($"Retorno da manifestação: {retornoManifestacao.RetornoStr}");
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine($"Manifestação: {ex.Message}");
                            }
                        }

                        var retornoNFeDistDFe = servicoNFe.NfeDistDFeInteresse(ufAutor: _configuracoes.EnderecoEmitente.UF.ToString(), documento: _configuracoes.Emitente.CNPJ, chNFE: chave);
                        if (retornoNFeDistDFe.Retorno.loteDistDFeInt == null)
                        {
                            await Task.Delay(2000); //https://github.com/ZeusAutomacao/DFe.NET/issues/568#issuecomment-339862458

                            retornoNFeDistDFe = servicoNFe.NfeDistDFeInteresse(ufAutor: _configuracoes.EnderecoEmitente.UF.ToString(), documento: _configuracoes.Emitente.CNPJ, chNFE: chave);

                            if (retornoNFeDistDFe.Retorno.loteDistDFeInt == null)
                            {
                                throw new Exception(retornoNFeDistDFe.Retorno.xMotivo);
                            }
                        }

                        if ((retornoNFeDistDFe.Retorno.loteDistDFeInt.Count()) > 0)
                        {
                            var    xmlBytes = retornoNFeDistDFe.Retorno.loteDistDFeInt[0].XmlNfe;
                            string xmlStr   = Compressao.Unzip(xmlBytes);

                            Console.WriteLine($"Xml: {xmlStr}");
                        }
                    }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
예제 #6
0
        /// <summary>
        /// Valida o XML de acordo com o schema.
        /// </summary>
        /// <param name="xml">A mensagem XML que deve ser verificada.</param>
        /// <param name="provedor">O provedor.</param>
        /// <param name="schema">O schema que será usado na verificação.</param>
        /// <returns>Se estiver tudo OK retorna null, caso contrário as mensagens de alertas e erros.</returns>
        protected RetornoWebservice ValidarSchema(string xml, string schema)
        {
            schema = Path.Combine(Config.Geral.PathSchemas, Name, schema);
            string[] errosSchema;
            string[] alertasSchema;
            if (!CertificadoDigital.ValidarXml(xml, schema, out errosSchema, out alertasSchema))
            {
                var retLote = new RetornoWebservice
                {
                    Assincrono = true,
                    XmlEnvio   = xml
                };

                foreach (var erro in errosSchema.Select(descricao => new Evento {
                    Codigo = "0", Descricao = descricao
                }))
                {
                    retLote.Erros.Add(erro);
                }

                foreach (var alerta in alertasSchema.Select(descricao => new Evento {
                    Codigo = "0", Descricao = descricao
                }))
                {
                    retLote.Alertas.Add(alerta);
                }

                return(retLote);
            }
            return(null);
        }
예제 #7
0
        private void button_selecionar_certificado_Click(object sender, EventArgs e)
        {
            if (ckbCertificadoInstalado.Checked)
            {
                CertificadoDigital oCertDig = new CertificadoDigital();

                if (oCertDig.SelecionarCertificado() == true)
                {
                    oMeuCert             = oCertDig.oCertificado;
                    oEmpresa.Certificado = oMeuCert.Subject;
                    oEmpresa.CertificadoDigitalThumbPrint = oMeuCert.Thumbprint;
                    oEmpresa.X509Certificado = oMeuCert;
                    DemonstraDadosCertificado();
                }
            }
            else
            {
                if (File.Exists(txtArquivoCertificado.Text))
                {
                    FileInfo arq = new FileInfo(txtArquivoCertificado.Text);
                    this.openFileDialog1.InitialDirectory = arq.DirectoryName;
                    this.openFileDialog1.FileName         = txtArquivoCertificado.Text;
                }
                else
                {
                    this.openFileDialog1.InitialDirectory = "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}";
                    this.openFileDialog1.FileName         = null;
                }

                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    txtArquivoCertificado.Text = this.openFileDialog1.FileName;
                }
            }
        }
예제 #8
0
        public void Validar(bool salvando = true)
        {
            empresa.CertificadoInstalado         = ckbCertificadoInstalado.Checked && ckbTemCertificadoInstalado.Checked;
            empresa.CertificadoArquivo           = ckbTemCertificadoInstalado.Checked ? txtArquivoCertificado.Text : "";
            empresa.CertificadoSenha             = ckbTemCertificadoInstalado.Checked ? txtSenhaCertificado.Text : "";
            empresa.Certificado                  = (ckbTemCertificadoInstalado.Checked ? (this.oMeuCert == null ? empresa.Certificado : oMeuCert.Subject.ToString()) : "");
            empresa.CertificadoDigitalThumbPrint = (ckbTemCertificadoInstalado.Checked ? (this.oMeuCert == null ? empresa.CertificadoDigitalThumbPrint : oMeuCert.Thumbprint) : "");
            empresa.CertificadoPIN               = ckbTemCertificadoInstalado.Checked ? txtPinCertificado.Text : "";
            empresa.UsaCertificado               = ckbTemCertificadoInstalado.Checked;
            if (ckbTemCertificadoInstalado.Checked)
            {
                if (!String.IsNullOrEmpty(empresa.CertificadoPIN))
                {
                    CertificadoDigital oCertificado = new CertificadoDigital();
                    CertProviders      providerInfo = new CertProviders();
                    providerInfo = oCertificado.GetInfoProvider(cboProviders.SelectedItem.ToString());
                    empresa.ProviderCertificado     = providerInfo.NameKey;
                    empresa.ProviderTypeCertificado = providerInfo.Type;

                    if (salvando)
                    {
                        ValidarCertificadoA3(true);
                    }
                }
                if (cboProviders.SelectedItem != null)
                {
                }
            }
        }
예제 #9
0
파일: MCfdi.cs 프로젝트: IsraelBV/SUN
        /// <summary>
        /// Genera el sello digital para el cfdi - pasando como string la cadena original generada previamente
        /// </summary>
        /// <param name="noCertificado"></param>
        /// <param name="certificadoB64"></param>
        /// <param name="cadenaOriginal"></param>
        /// <param name="datos"></param>
        /// <returns></returns>
        public static string GetSelloDigitalEmisor(ref string noCertificado, ref string certificadoB64, string cadenaOriginal, PathsCertificado datos)
        {
            string selloDigital = null;

            try
            {
                CertificadoDigital cert = GetCertificadoDigital(datos.PathArchivoCer);
                noCertificado  = cert.NoCertificado;
                certificadoB64 = cert.CertificadoBase64;

                SecureString identidad = new SecureString();
                identidad.Clear();

                foreach (var c in datos.Password.ToCharArray())
                {
                    identidad.AppendChar(c);
                }

                byte[] llavePrivadaBytes = File.ReadAllBytes(datos.PathArchivoKey);

                RSACryptoServiceProvider  lrsa   = opensslkey.DecodeEncryptedPrivateKeyInfo(llavePrivadaBytes, identidad);
                SHA1CryptoServiceProvider hasher = new SHA1CryptoServiceProvider();
                byte[] bytesFirmados             = lrsa.SignData(Encoding.UTF8.GetBytes(cadenaOriginal), hasher);

                selloDigital = Convert.ToBase64String(bytesFirmados);
                return(selloDigital);
            }
            catch (Exception)
            {
                return(selloDigital);
            }
        }
예제 #10
0
        public void CertificadoDigital_ComListaTesteExpirados_DeveDarErro()
        {
            // arrange
            var(expirados, _, _) = CertificadoDigitalTestsContext.GetListaParaValidar();
            var options = new CertificadoDigitalOptions();

            foreach (var file in expirados)
            {
                if (file.EndsWith(".pdf"))
                {
                    var buffer = ObterCertificadoFromPdf(file);
                    using var certificado = new X509Certificate2(buffer);
                    // act
                    var result = CertificadoDigital.Processar(certificado, options);
                    // assert
                    result.Should().NotBeNull();
                    result.Erro.Should().BeTrue();
                }
                else
                {
                    using var certificado = new X509Certificate2(file);
                    // act
                    var result = CertificadoDigital.Processar(certificado, options);
                    // assert
                    result.Should().NotBeNull();
                    result.Erro.Should().BeTrue();
                }
            }
        }
예제 #11
0
 public void Deletar(CertificadoDigital certificadoDigital)
 {
     using (var instancia = NHibernateHelper.InstanciaComTransacao())
     {
         _repositorioCertificadoDigital.SetNHibernateHelper(instancia);
         _repositorioCertificadoDigital.Deletar(certificadoDigital);
     }
 }
예제 #12
0
 /// <summary>
 ///     Cria uma instância da Classe responsável pelos serviços relacionados à NFe
 /// </summary>
 /// <param name="cFgServico"></param>
 public ServicosNFe(ConfiguracaoServico cFgServico)
 {
     _cFgServico  = cFgServico;
     _certificado = string.IsNullOrEmpty(_cFgServico.Certificado.Arquivo)
         ? CertificadoDigital.ObterDoRepositorio(_cFgServico.Certificado.Serial, _cFgServico.Certificado.Senha)
         : CertificadoDigital.ObterDeArquivo(_cFgServico.Certificado.Arquivo, _cFgServico.Certificado.Senha);
     _path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
 }
예제 #13
0
        public void Generado_PersonaNacional_CertificadoNacionalDeAutenticacion()
        {
            elResultadoEsperado = ObtengaUnCertificadoNacionalDeAutenticacion();

            losDatos            = ObtengaLosDatosDeUnaEmisionNacional();
            elResultadoObtenido = new CertificadoDeAutenticacion(losDatos).Generado();

            Verificacion.SonIguales(elResultadoEsperado, elResultadoObtenido);
        }
        public void Generado_PersonaExtranjera_CertificadoExtranjeroDeFirma()
        {
            elResultadoEsperado = ObtengaUnCertificadoExtranjeroDeFirma();

            losDatos            = ObtengaLosDatosDeUnaEmisionExtranjera();
            elResultadoObtenido = new CertificadoDeFirma(losDatos).Generado();

            Verificacion.SonIguales(elResultadoEsperado, elResultadoObtenido);
        }
        public void Sujeto_ExtranjeroDeFirma_SujetoFormateado()
        {
            elResultadoEsperado = "CN=MIGUEL SUAREZ GODINEZ (FIRMA), OU=EXTRANJERO, O=PERSONA FISICA, C=CR, GivenName=MIGUEL, Surname=SUAREZ GODINEZ, SERIALNUMBER=NUP-3034560333";

            elCertificado       = ObtengaUnCertificadoExtranjeroDeFirma();
            elResultadoObtenido = elCertificado.Sujeto;

            Assert.AreEqual(elResultadoEsperado, elResultadoObtenido);
        }
예제 #16
0
        private static X509Certificate2 ObterCertificado()
        {
            if (!string.IsNullOrEmpty(CaminhoCertificadoDigital) && !string.IsNullOrEmpty(SenhaCertificadoDigital))
            {
                return(CertificadoDigital.ObterDeArquivo(CaminhoCertificadoDigital, SenhaCertificadoDigital));
            }

            return(CertificadoDigital.ObterDoRepositorio(NumeroSerieCertificadoDigital, SenhaCertificadoDigital));
        }
예제 #17
0
 public ServNFe4(EmissorServicoConfig emissorConfig)
 {
     EmissorConfig = emissorConfig ?? throw new ArgumentNullException(nameof(emissorConfig));
     EmissorConfig = emissorConfig;
     //Setar dados de configuração do serviço apropriado para NFe 4.0
     EmissorConfig.VersaoServico = VersaoServico.Ve400;
     //Obter certificado Digital
     X509Certificate2 = CertificadoDigital.ObterCertificado(EmissorConfig.Certificado);
 }
        private static void ValidDigitalCertificate(CertificadoDigital cert, PdfPkcs7 pkcs7)
        {
            bool timestampImprint = pkcs7.VerifyTimestampImprint();

            if (!timestampImprint && !cert.PeriodoValido)
            {
                throw new Exception("Este documento possui uma assinatura ICPBrasil inválida.");
            }
        }
        public void FechaDeVencimiento_UnaFechaActual_CuatroAñosEnElFuturo()
        {
            elResultadoEsperado = new DateTime(2020, 10, 11);

            elCertificado       = ObtengaUnCertificadoNacionalDeAutenticacion();
            elResultadoObtenido = elCertificado.FechaDeVencimiento;

            Assert.AreEqual(elResultadoEsperado, elResultadoObtenido);
        }
예제 #20
0
        /// <summary>
        /// Verificar se o certificado digital está vencido
        /// </summary>
        /// <param name="emp">Empresa que é para ser verificado o certificado digital</param>
        /// <remarks>
        /// Retorna uma exceção ExceptionCertificadoDigital caso o certificado esteja vencido
        /// </remarks>
        protected void CertVencido(Empresa empresa)
        {
            CertificadoDigital CertDig = new CertificadoDigital();

            if (CertDig.Vencido(empresa))
            {
                throw new ExceptionCertificadoDigital(ErroPadrao.CertificadoVencido, "(" + CertDig.dValidadeInicial.ToString() + " a " + CertDig.dValidadeFinal.ToString() + ")");
            }
        }
예제 #21
0
        public void DireccionDeRevocacion_UnaDireccion_LaMisma()
        {
            elResultadoEsperado = "http://direccionderevocacion.com";

            elCertificado       = ObtengaUnCertificadoNacionalDeAutenticacion();
            elResultadoObtenido = elCertificado.DireccionDeRevocacion;

            Assert.AreEqual(elResultadoEsperado, elResultadoObtenido);
        }
        public void Sujeto_NacionalDeFirma_SujetoFormateado()
        {
            elResultadoEsperado = "CN=MIGUEL SUAREZ GODINEZ (FIRMA), OU=CIUDADANO, O=PERSONA FISICA, C=CR, GivenName=MIGUEL, Surname=SUAREZ GODINEZ, SERIALNUMBER=CPF-3034560333";

            elCertificado       = ObtengaUnCertificadoNacionalDeFirma();
            elResultadoObtenido = elCertificado.Sujeto;

            Assert.AreEqual(elResultadoEsperado, elResultadoObtenido);
        }
예제 #23
0
        public void FechaEmision_UnaFechaActual_LaMismaFechaDeEmision()
        {
            elResultadoEsperado = new DateTime(2016, 10, 11);

            elCertificado       = ObtengaUnCertificadoNacionalDeAutenticacion();
            elResultadoObtenido = elCertificado.FechaDeEmision;

            Assert.AreEqual(elResultadoEsperado, elResultadoObtenido);
        }
예제 #24
0
        public void CertificadoDeAutenticacion_DatosNacionales_CertificadoNacional()
        {
            elResultadoEsperado = ObtengaUnCertificadoNacionalDeAutenticacion();

            Emision laEmision = ObtengaUnaEmisionConDatosNacionalesDeAutenticacion();

            elResultadoObtenido = laEmision.CertificadoDeAutenticacion;

            Verificacion.SonIguales(elResultadoEsperado, elResultadoObtenido);
        }
예제 #25
0
        /// <summary>
        ///     Cria uma instância da Classe responsável pelos serviços relacionados à NFe
        /// </summary>
        /// <param name="cFgServico"></param>
        public ServicosNFe(ConfiguracaoServico cFgServico)
        {
            _cFgServico  = cFgServico;
            _certificado = string.IsNullOrEmpty(_cFgServico.Certificado.Arquivo)
                ? CertificadoDigital.ObterDoRepositorio(_cFgServico.Certificado.Serial, _cFgServico.Certificado.Senha)
                : CertificadoDigital.ObterDeArquivo(_cFgServico.Certificado.Arquivo, _cFgServico.Certificado.Senha);
            _path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

            //Define a versão do protocolo de segurança
            ServicePointManager.SecurityProtocol = cFgServico.ProtocoloDeSeguranca;
        }
예제 #26
0
 public void LiberarRecurso()
 {
     AssinaturaDigital      = new AssinaturaDigital();
     Certificado            = new CertificadoDigital();
     ValidarSchemaDocFiscal = new ValidarDocumentoFiscal();
     NumRecibo            = "";
     ProtocoloAutorizacao = "";
     IDToken  = "";
     CSC      = "";
     Erro     = "";
     Mensagem = "";
 }
예제 #27
0
        private void button_selecionar_certificado_Click(object sender, EventArgs e)
        {
            CertificadoDigital oCertDig = new CertificadoDigital();

            if (oCertDig.SelecionarCertificado() == true)
            {
                oMeuCert = oCertDig.oCertificado;
                Empresa.Configuracoes[Empresa.FindConfEmpresaIndex(cbEmpresa.SelectedValue.ToString().Trim())].Certificado     = oMeuCert.Subject;
                Empresa.Configuracoes[Empresa.FindConfEmpresaIndex(cbEmpresa.SelectedValue.ToString().Trim())].X509Certificado = oMeuCert;
                DemonstraDadosCertificado();
            }
        }
예제 #28
0
 private void CarregaDadosCertificado()
 {
     try
     {
         var cert = CertificadoDigital.ObterDoRepositorio();
         TxtCertificado.Text = cert.SerialNumber;
         //TxtValidade.Text = "Validade: " + cert.GetExpirationDateString();
     }
     catch (Exception ex)
     {
         Funcoes.Mensagem(ex.Message, TituloErro, MessageBoxButton.OK);
     }
 }
예제 #29
0
 private void CarregaDadosCertificado()
 {
     try
     {
         var cert = new CertificadoDigital();
         TxtCertificado.Text = cert.Serial;
         //lblCertificadoValidade.Content = cert.Validade.ToString();
     }
     catch (Exception ex)
     {
         Funcoes.Mensagem(ex.Message, TituloErro, MessageBoxButton.OK);
     }
 }
예제 #30
0
        public void CertificadoDigital_ComECpfValido_DeveFuncionar()
        {
            // arrange
            var certificado = ObterCertificado(CertificadoTipo.FileECpfValido);
            var options     = new CertificadoDigitalOptions();

            // act
            var result = CertificadoDigital.Processar(certificado, options);

            // assert
            result.Should().NotBeNull();
            result.Erro.Should().BeFalse();
        }