Ir para conteúdo
  • Cadastre-se

dev botao

Como obtenho o segundo certificado de um arquivo .p12


Ver Solução Respondido por Daniel Simoes,
  • Este tópico foi criado há 1822 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Boa noite, Pessoal!

Como devo proceder?

Como obtenho o segundo certificado de um arquivo .p12 na biblioteca libeay32.dll, pois a função PKCS12_parse (p12, PAnsiChar (Senha), FPrivKey, FCert, Fca) sempre me traz o primeiro certificado.

Obrigado pela ajuda

  • Fundadores
Postado

Provavelmente eles estão em Fca 

https://www.openssl.org/docs/manmaster/man3/PKCS12_parse.html

STACK_OF(X509)

https://zakird.com/2013/10/13/certificate-parsing-with-openssl

procure por: "Misordered Certificate Chains"

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado
9 horas atrás, Daniel Simoes disse:

Provavelmente eles estão em Fca 

https://www.openssl.org/docs/manmaster/man3/PKCS12_parse.html

STACK_OF(X509)

https://zakird.com/2013/10/13/certificate-parsing-with-openssl

procure por: "Misordered Certificate Chains"

Muito obrigado pela vossa ajuda.
  Por favor, como faço para transformar isso em pascal?

https://zakird.com/2013/10/13/certificate-parsing-with-openssl

 "Misordered Certificate Chains"


  STACK_OF(X509) *r_sk = sk_X509_new_null();
  sk_X509_push(r_sk, sk_X509_value(st, 0));
  for (int i=1; i < sk_X509_num(st); i++) {
      X509 *prev = sk_X509_value(r_sk, i-1);
      X509 *next = NULL;
      for (int j=1; j < sk_X509_num(st); j++) {
              X509 *cand = sk_X509_value(st, j);
              if (!X509_NAME_cmp(cand->cert_info->subject, prev->cert_info->issuer)
                              || j == sk_X509_num(st) - 1) {
                      next = cand;
                      break;
              }
      }
      if (next) {
              sk_X509_push(r_sk, next);
      } else {

              sk_X509_free(r_sk);
              r_sk = sk_X509_dup(st);
              break;
      }
  }
 

  • Fundadores
  • Solution
Postado

Não será simples... o primeiro passo é verificar se seus "Binds" em pascal, possuem esses métodos indicados...

Se você não precisar usar OpenSSL... na Unit ACBrDFeWinCrypt.pas,  tem o método:

procedure AddCertContexToStoreMemory(NewCertContext: PCCERT_CONTEXT);

que faz algo semelhante...

 

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado (editado)
1 hora atrás, Daniel Simoes disse:

Não será simples... o primeiro passo é verificar se seus "Binds" em pascal, possuem esses métodos indicados...

Se você não precisar usar OpenSSL... na Unit ACBrDFeWinCrypt.pas,  tem o método:

procedure AddCertContexToStoreMemory(NewCertContext: PCCERT_CONTEXT);

que faz algo semelhante...

 

 

Muito obrigado pela vossa ajuda.
Vou verificar,  

Unit ACBrDFeWinCrypt.pas,   método:

procedure AddCertContexToStoreMemory(NewCertContext: PCCERT_CONTEXT);

 

 

Editado por williamero
  • Curtir 1
  • Este tópico foi criado há 1822 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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...