Pesquisar na Comunidade
Showing results for tags 'segurança'.
Encontrado 5 registros
-
Assinatura de Documento Xml
um tópico no fórum postou Marcos Fernando Barbosa Dúvidas Gerais sobre o ACBr
Função para selecionar o certificado digital function SelCert: string; var Store: IStore3; CertsLista, CertsSelecionado: ICertificates2; CertDados: ICertificate; lSigner: TSigner; lSignedData: TSignedData; Cert: TCertificate; Ov: OleVariant; begin Result := ''; Store := CoStore.Create; try Store.Open(CAPICOM_CURRENT_USER_STORE, 'My', CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED); except On E: Exception do begin MsgErro(E.Message); Exit; end; end; try CertsLista := Store.Certificates as ICertificates2; CertsSelecionado := CertsLista.Select ('Certificado(s) Digital(is) disponível(is)', 'Selecione o Certificado Digital para uso no aplicativo', False); except On E: Exception do begin MsgErro('Operação cancelada pelo usuário!'); Exit; end; end; if not(CertsSelecionado.Count = 0) then begin CertDados := IInterface(CertsSelecionado.Item[1]) as ICertificate2; lSigner := TSigner.Create(nil); lSigner.Certificate := CertDados; lSignedData := TSignedData.Create(nil); lSignedData.Content := ' '; try lSignedData.Sign(lSigner.DefaultInterface, false, CAPICOM_ENCODE_BINARY); except On E : Exception do begin MsgErro('Erro na autenticação do Certificado Digital!'); Exit; end; end; Cert := TCertificate.Create(nil); Ov := IInterface(CertsSelecionado.Item[1]) as ICertificate2; Cert.ConnectTo(IDispatch(Ov) as ICertificate2); Result := Cert.Export(CAPICOM_ENCODE_BASE64); lSignedData.Free; lSigner.Free; end; Store.Close; end; function MontaFileAssinatura(const URI: String): String; var ArquivoXml: string; begin ArquivoXml := '<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">' + '<SignedInfo>' + '<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>' + '<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>' + '<Reference URI="#' + URI + '">'+ '<Transforms>' + '<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>' + '<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>' + '</Transforms>' + '<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>' + '<DigestValue></DigestValue>' + '</Reference>' + '</SignedInfo>' + '<SignatureValue></SignatureValue>' + '<KeyInfo>' + '<X509Data>' + '<X509Certificate></X509Certificate>'+ '</X509Data>' + '</KeyInfo>' + '</Signature>'; Result := ArquivoXml; end; Com ou sem no da assinatura não esta funcionando function MontaFileXml(const FileXml, Id: string): string; begin Result := FileXml; // Result := StringReplace(FileXml, ':CERTIFICADO', MontaFileAssinatura(Id), [rfReplaceAll]); end; Função que deveria assinar o documento xml passado como parametro function Assinar(const FileXml, Id: string; var FileOut: string): Boolean; var A: TDFeSSL; B: TDFeSSLXmlSignXmlSec; C: TDFeWinCrypt; I: Integer; fileXmlNew, s : string; F : TStringList; begin fileXmlNew := MontaFileXml(FileXml, Id); Result := False; try try A := TDFeSSL.Create; A.SSLCryptLib := cryOpenSSL; A.SSLXmlSignLib := xsXmlSec; try C:= TDFeWinCrypt.Create(A); s := SelCert; if not Empty(s) then begin try if C.CarregarCertificadoPublico(AnsiString(s))then begin B:= TDFeSSLXmlSignXmlSec.Create(A); F := TStringList.Create; with F do begin Add(fileXmlNew); s := ''; for I := 0 to Count - 1 do S := S + Trim(StringReplace(StringReplace(Pchar(Strings[I]), #13, '', [rfReplaceAll]),#10,'',[rfReplaceAll])); Text := '<?xml version="1.0" encoding="iso-8859-1"?>' + B.Assinar(S,'Signature',''); FileOut := Text; end; end else begin MsgAdverte('Certificado digital selecionado inválido'); Exit; end; except On E1 : Exception do begin MsgErro('Erro durante a seleção do certificado ->' + sLineBreak + E1.Message); Exit; end; end; end else Exit; except On E2 : Exception do begin MsgErro('Erro ao carregar biblioteca do certificado digital ->' + sLineBreak + E2.Message); Exit; end; end; except On E3 : Exception do begin MsgErro('Erro ao carregar biblioteca dinâmica wincrypt do certificado digital ->' + sLineBreak + E3.Message); Exit; end; end; finally FreeAndNil(B); FreeAndNil(C); FreeAndNil(A); end; Result := True; end; Procedimento que passa o arquivo já formatado para realização da assinatura procedure TFormImportaXMLNFe.AdvGlowButton1Click(Sender: TObject); const xml: string = '<?xml version="1.0" encoding="UTF-8"?>'+ '<enviNFe versao="2.00" xmlns="http://www.portalfiscal.inf.br/nfe">' + '<idLote>71</idLote>' + '<NFe>' + '<infNFe id="NFe31120723401920000117550020000295121002311579" versao="2.00">' + '<cUF>35</cUF>' + '<cNF>518005127</cNF>' + '<natOp>Venda a vista</natOp>' + '<mod>55</mod>' + '<serie>1</serie>' + '<dEmi>2012-05-06</dEmi>' + '<tpAmb>2</tpAmb>' + '</infNFe>' + '</NFe>' + '</enviNFe>'; xml: string = '<?xml version="1.0" encoding="UTF-8"?>'+ '<enviNFe versao="2.00" xmlns="http://www.portalfiscal.inf.br/nfe">' + '<idLote>71</idLote>' + '<NFe>' + '<infNFe id="NFe31120723401920000117550020000295121002311579" versao="2.00">' + '<cUF>35</cUF>' + '<cNF>518005127</cNF>' + '<natOp>Venda a vista</natOp>' + '<mod>55</mod>' + '<serie>1</serie>' + '<dEmi>2012-05-06</dEmi>' + '<tpAmb>2</tpAmb>' + '</infNFe>' + ':CERTIFICADO' + '</NFe>' + '</enviNFe>'; var xmlAssi : string; begin inherited; if Assinar(xml,'NFe31120723401920000117550020000295121002311579', xmlAssi) then begin MsgAvisa('xml assinado: ' + sLineBreak + xmlAssi); end; end; Não completa o processo e sempre gera exceção, será que os desenvolvedores do componente não poderia criar um exemplo somente de uso dos componentes em questão já com o arquivo da nfe, cte, bpe para ser assinado.- 5 replies
-
- certificado
- segurança
- (e 8 mais)
-
Graças aos esforços do @edunucleo e @JoãoDJ, estamos agora operando em HTTPS... Estamos usando um Certificado com criptografia TLS, Gratuito, fornecido pela Let's Encrypt
-
Bom dia caros amigos, Estou enfrentando um problema e não tô conseguindo sucesso na resolução. Uso ACBR e em um cliente nosso dá o seguinte erro no momento em que o certificado digital é solicitado: "classfactory não pode fornecer a classe solicitada" A tela de seleção do certificado nem chega a aparecer e a exceção é gerada. Acontece apenas com esse cliente, de muitos, o PC dele roda Win7 64 bits, já fiz a reinstalação do certificado, das dll's e inclusive rodei novamente o instalador CAPICOM da pasta ACBr e não obtive sucesso. O certificado aparece normalmente no ie e inclusive é possível acessar o portal e-cac com o mesmo. Alguém tem idéia do que possa estar acontecendo? Desde já muito obrigado. Abraço!
- 7 replies
-
- certificado
- capicom
- (e 2 mais)
-
contingência Nota em Contingência sem formulário de Segurança
um tópico no fórum postou Elias Rodrigues ACBrNFe
Tenho um processo de emissão antigo para Contingência. Necessito melhora-lo para que quando a receita não funcionar posso envia-lo sem a necessidade de usar o formulário de segurança. tenho algumas dúvidas a respeito: Ao usar o EPEC gero a nota normalmente e apenas envio o evento de EPEC? os dados da nota devem ser salvos? Ou apenas reenviados em modo normalização do processo? Alguém tem um exemplo de envio por EPEC porque estou apanhando muito para faze-lo. -
Prezados, em um computador apenas, estou tendo esse problema, computador esse com Win 8, porém executei em outros com o Win 8 e não tenho esse problema, sempre que vou consultar o status, enviar, ou qualquer processo que faça uso do certificado digital (após a primeira confirmação só solicita novamente em caso de encerrar e abrir novamente o programa) me aparece uma tela de Segurança do Windows questionando se eu desejo permitir que o aplicativo acesse minha chave privada - com as opções de Permitir e Não Permitir... O cliente não reclamou, mas é uma coisinha chata, sempre tem que ir lá e permitir. Alguém já passou por isso ou algo semelhante? Alguma sugestão de configuração do mesmo? Att. Rômulo Mayworm