-
Total de ítens
49 -
Registro em
-
Última visita
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Tudo que mdbs99 postou
-
Método VerificarAssinatura com CAPICOM
mdbs99 replied to mdbs99's tópico in Object Pascal - Delphi & Lazarus
Sugiro fazer uma limpeza de todas as .dcu/.ppu e fazer um build completo. Melhor ainda é baixar os fontes do trunk2 desde zero, ou seja, limpo. -
Agora fiquei confuso. Pensando apenas em 32 bits, tem vantagem ou desvantagem usar uma ou outra versão? E quando eu for migrar para 64 bits, o ACBr irá "ligar" a diretiva automaticamente quando for 64 ou preciso fazer isso manualmente caso opte por usar essa versão?
-
Ótima notícia! Quando você diz compiladas com MinGW, muda alguma coisa? Após atualizar o fontes, obrigatoriamente tenho que atualizar as DLL de 32 bits? Obrigado.
-
Método VerificarAssinatura com CAPICOM
mdbs99 replied to mdbs99's tópico in Object Pascal - Delphi & Lazarus
Testado e aprovado! Pessoal, muito obrigado! -
Método VerificarAssinatura com CAPICOM
mdbs99 replied to mdbs99's tópico in Object Pascal - Delphi & Lazarus
Já atualizei e testei. Está funcionando muito bem, obrigado! Essa parte não entendi, pois eu consigo ler as informações — CPNJ, por exemplo — carregando o Certificado utilizando o "X509Certificate". -
Método VerificarAssinatura com CAPICOM
mdbs99 replied to mdbs99's tópico in Object Pascal - Delphi & Lazarus
Sim, você está correto. Vi que a informação de ambos os tipos ficam no "token" CN=... -
Método VerificarAssinatura com CAPICOM
mdbs99 replied to mdbs99's tópico in Object Pascal - Delphi & Lazarus
Seguindo a ideia que peguei lá na lista FPC, tentei utilizar as funções da unit LConvEncoding... porém sem sucesso. Outra ideia, também lá da lista, é utilizar esse projeto http://chsdet.sourceforge.net Mas agora me ocorreu uma ideia: Os componentes do ACBr estão preparados para ler Certificados de CNPJ, tanto que os nomes dos métodos tem relação com PJ. Mas, se estou utilizando Certificado de PF, é possível que o ACBr — especificamente o TDFeOpenSSL — está lendo as informações em "posições" erradas? Eu ainda não sei, vou pesquisar, mas creio que o Certificado de PJ pode ser diferente do PF. O que acham? -
Método VerificarAssinatura com CAPICOM
mdbs99 replied to mdbs99's tópico in Object Pascal - Delphi & Lazarus
Postei na lista do FreePascal sobre como saber a codificação de uma string. Espero que alguém dê alguma ideia por lá... -
Método VerificarAssinatura com CAPICOM
mdbs99 replied to mdbs99's tópico in Object Pascal - Delphi & Lazarus
Nada ainda por aqui... Infelizmente não tive tanto tempo quanto gostaria pra trabalhar nisso ontem. -
Método VerificarAssinatura com CAPICOM
mdbs99 replied to mdbs99's tópico in Object Pascal - Delphi & Lazarus
Amanhã, feriado, vou tentar trabalhar nessa conversão. -
Método VerificarAssinatura com CAPICOM
mdbs99 replied to mdbs99's tópico in Object Pascal - Delphi & Lazarus
"Fico pensando se há algum "flag" em algum lugar informando o "padrão" ou o "encode" que foi utilizado. " Ahá! Agora ficou "fácil" pro Daniel fazer a mágica dele... -
Método VerificarAssinatura com CAPICOM
mdbs99 replied to mdbs99's tópico in Object Pascal - Delphi & Lazarus
Pode ser. Uma dúvida: Essa codificação não deveria ser padrão em todos os certificados? Outra: Mesmo que consigamos converter, como iremos saber se devemos ou não converter? Fico pensando se há algum "flag" em algum lugar informando o "padrão" ou o "encode" que foi utilizado. -
Método VerificarAssinatura com CAPICOM
mdbs99 replied to mdbs99's tópico in Object Pascal - Delphi & Lazarus
Realmente parece que todo o resto é lido corretamente mas especificamente o Nome/RazãoSocial parece estar codificado diferente. Pode ser isso, codificado em UTF-16. Vou ver se consigo fazer alguma coisa no FreePascal. É uma boa ideia. Se já existir essa opção nas funções da DLL pode ser algo mais prático a se fazer (talvez pra vocês que já conhecem a estrutura). -
Método VerificarAssinatura com CAPICOM
mdbs99 replied to mdbs99's tópico in Object Pascal - Delphi & Lazarus
É claro. Mandei em Private (XML e certificado) -
Método VerificarAssinatura com CAPICOM
mdbs99 replied to mdbs99's tópico in Object Pascal - Delphi & Lazarus
Daniel, Tá quase! Eu tentei dessa forma abaixo. Onde o atributo "FX509Certificate" é o conteúdo do Node que vem no XML. function TSignatureCPFInfo.Value: string; var A: TDFeSSL; begin A := TDFeSSL.Create; try A.SSLLib := libOpenSSL; with TDFeOpenSSL(A.SSLClass) do begin LerX509Info(FX509Certificate); Result := CertSubjectName; end; finally A.Free; end; end; O resultado, no entanto, vem assim: C=BR, O=ICP-Brasil, OU=Secretaria da Receita Federal do Brasil - RFB, OU=RFB e-CPF A3, OU=Certificado de Teste, OU=Autenticado por Irreal Certificadora Digital Virtual, CN=\x00A\x00N\x00D\x00R\x00\xC9\x00 \x00D\x00O\x00 \x00E\x00S\x00P\x00\xCD\x00R\x00I\x00T\x00O\x00 \x00S\x00A\x00N\x00T\x00O\x00 \x00B\x00O\x00G\x00A\x00D\x00O\x00:\x000\x004\x007\x00.\x008\x008\x001\x00.\x009\x000\x007\x00-\x002\x009 -
Método VerificarAssinatura com CAPICOM
mdbs99 replied to mdbs99's tópico in Object Pascal - Delphi & Lazarus
Estou obtendo alguns erros: Compile package ACBrDFeComum 0.0: Exit code 1, Errors: 2 ACBrDFeOpenSSL.pas(125,14) Error: There is no method in an ancestor class to be overridden: "GetCertIssuerName:AnsiString;" ACBrDFeOpenSSL.pas(126,14) Error: There is no method in an ancestor class to be overridden: "GetCertCertificadora:AnsiString;" Então retirei os "overrides". Compilando novamente... erro: ACBrDFeOpenSSL.pas(988,21) Error: Identifier not found "GetCertificadoraFromSubjectName" Acho que vc conseguiu compilar porque deve ter usando a versão já compilada memória, talvez... então basta dar um Build All pra ver esses erros aí também. EDIT: OK, acho que entendi. Preciso atualizar os fontes do SVN. -
Método VerificarAssinatura com CAPICOM
mdbs99 replied to mdbs99's tópico in Object Pascal - Delphi & Lazarus
OK, obrigado. -
Método VerificarAssinatura com CAPICOM
mdbs99 replied to mdbs99's tópico in Object Pascal - Delphi & Lazarus
Olá Daniel, Conseguiu algum tempo para esse meu problema? -
Método VerificarAssinatura com CAPICOM
mdbs99 replied to mdbs99's tópico in Object Pascal - Delphi & Lazarus
Agradeço muitíssimo. Aqui já tentei mas sempre obtenho erros (mal formatado, falta informação, etc). As msgs são em Inglês, é claro, mas é que não estou com meu ambiente de desenvolvimento no momento. Obrigado. -
Método VerificarAssinatura com CAPICOM
mdbs99 replied to mdbs99's tópico in Object Pascal - Delphi & Lazarus
Mas, Daniel, eu mesmo falei sobre esse site aqui... De qq forma, vc consegue utilizar o exe do openssl e fazer as conversões na linha de comando? Porque aqui eu não consigo. Sempre dá erro. O certificado que eu utilizo é um de teste (disponibilizado pelo meu cliente) sem senha. Não sei se isso impacta em alguma coisa, apenas mais uma informação. -
Método VerificarAssinatura com CAPICOM
mdbs99 replied to mdbs99's tópico in Object Pascal - Delphi & Lazarus
Daniel, Pensando melhor agora, eu não poderia usar a função PKCS12parse, visto que um dos parâmetros é a senha e... eu não as tenho. Cada arquivo enviado ao servidor será assinado por um certificado diferente, de pessoas diferentes. Por isso preciso identificar o CPF pra saber quem assinou. Bem, pelo que entendi no link que vc passou, um nó X509 estaria num formato P7B/PKCS#7: P7B/PKCS#7 They contain “—–BEGIN PKCS—–” & “—–END PKCS7—–” statements. It can contain only Certificates & Chain certificates but not the Private key. > They are Base64 encoded ASCII files > They have extensions .p7b, .p7c > Several platforms supports it. eg:- Windows OS, Java Tomcat Então tentei utilizar os códigos abaixo: Convert P7B to PFX ——————————————————————————————————————————————————- $ openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer $ openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CAcert.cer Mas sem sucesso. Também adicionei no arquivo (que contém os dados em base64) os statements “—–BEGIN PKCS—–” & “—–END PKCS7—–” mas também sem sucesso. -
Método VerificarAssinatura com CAPICOM
mdbs99 replied to mdbs99's tópico in Object Pascal - Delphi & Lazarus
Daniel, Analisei a "TDFeOpenSSL.VerificarAssinatura". Basicamente ela carrega o certificado a partir do XML, utilizando várias funções... e depois chama xmlSecDSigCtxVerify() para verificar a assinatura. A função que eu preciso, no entanto, está em ACBrDFeOpenSSL, linha 866: function GetSubjectName( cert: pX509 ): String; var s: AnsiString; begin setlength(s, 4096); {$IFDEF USE_libeay32} Result := X509_NAME_oneline(X509_get_subject_name(cert), PAnsiChar(s), Length(s)); {$ELSE} Result := X509NameOneline(X509GetSubjectName(cert), s, Length(s)); {$ENDIF} if copy(Result,1,1) = '/' then Result := Copy(Result,2,Length(Result)); Result := StringReplace(Result, '/', ', ', [rfReplaceAll]); end; Essa função irá trazer o SubjectName, que é a informação que preciso. Mas veja que a função necessita de uma cert: pX509, declarada em OpenSSLExt... que é outra unit. Até agora eu tenho uma parte de lê o XML encodado em BASE64, mas não tenho funções para ler as informações. E também tenho funções para ler a informação, mas tenho que ter antes uma instância de pX509. Ainda não entendi como isso tudo funciona... estou tentando, mas ainda não consegui ver. Se puder me ajudar, agradeço. -
Método VerificarAssinatura com CAPICOM
mdbs99 replied to mdbs99's tópico in Object Pascal - Delphi & Lazarus
Ninguém? Nenhuma ideia? -
Método VerificarAssinatura com CAPICOM
mdbs99 replied to mdbs99's tópico in Object Pascal - Delphi & Lazarus
Olá, Não consigo fazer o load do certificado através do XML — node X509Certificate. Dentro do método TDFeOpenSSL.LerPFXInfo, parece que só há uma função que obtém o ponteiro para um cert: pX509 Essa função é a : PKCS12parse(p12, FpDFeSSL.Senha, FPrivKey, cert, ca) Procurei por outras funções e não achei nenhuma que pudesse me retornar uma "instância" de cert. Eu tentei utilizar esse código: var A: TDFeSSL; begin A := TDFeSSL.Create; try A.SSLLib := libOpenSSL; with TXMLComponent.Create(TFile.New('entrada.xml').Stream) do try A.DadosPFX := DecodeBase64 ( Document.DocumentElement .FindNode('Assinatura') .FindNode('Signature') .FindNode('KeyInfo') .FindNode('X509Data') .FindNode('X509Certificate').TextContent ); ShowMessage(A.CertSubjectName); finally Free; end; finally A.Free; end; end; Através de um XML pré-gerado, já assinado, chamado "entrada.xml", tento decodificar a Base64 passando o resultado para a propriedade DadosPFX. Infelizmente obtenho um erro de leitura do certificado "provavelmente a senha está errada" (esse certificado nem tem senha) na chama a A.CertSubjectName. Estou usando a Revision 12221. Eu estive fazendo uma pesquisa e constatei que a informação que eu quero está, sim, dentro do nó X509Certificate. A prova disso é esse site: https://www.sslshopper.com/certificate-decoder.html Apenas copiando e colando o conteúdo do nó, em Base64 mesmo, ele decodifica exibe todas as informações como nome, CPF, etc. Restando apenas esse item para que eu conclua meu projeto, peço a ajuda dos senhores novamente.