Ir para conteúdo
  • Cadastre-se

mdbs99

Membros
  • Total de ítens

    49
  • Registro em

  • Última visita

Tudo que mdbs99 postou

  1. 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.
  2. 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?
  3. Ó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.
  4. 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".
  5. Sim, você está correto. Vi que a informação de ambos os tipos ficam no "token" CN=...
  6. 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?
  7. Postei na lista do FreePascal sobre como saber a codificação de uma string. Espero que alguém dê alguma ideia por lá...
  8. Nada ainda por aqui... Infelizmente não tive tanto tempo quanto gostaria pra trabalhar nisso ontem.
  9. Amanhã, feriado, vou tentar trabalhar nessa conversão.
  10. "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...
  11. 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.
  12. 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).
  13. É claro. Mandei em Private (XML e certificado)
  14. 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
  15. 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.
  16. Olá Daniel, Conseguiu algum tempo para esse meu problema?
  17. 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.
  18. 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.
  19. 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.
  20. 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.
  21. 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.
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...