Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Boa tarde Senhores,

Utilizo a WinCrypt para pegar algumas informações do certificado, uma das informações que utilizo é a do CNPJ/CPF do mesmo. Porém me deparei com um problema ao utilizar e-CPF, onde o atributo CNPJ esta sendo preenchido de forma incorreta, para corrigir o problema alterei a seguinte função no arquivo ACBrDFeWinCrypt.pas.pas:

function GetTaxIDFromExtensions(ACertContext: PCCERT_CONTEXT
  ): String;
var
  pExtension: PCERT_EXTENSION;
  pNameInfo: PCERT_ALT_NAME_INFO ;
  ABlob: CERT_NAME_BLOB;
  aOID: AnsiString;
begin
  Result := '';

  if Assigned(ACertContext) then
  begin
    pExtension := GetCertExtension(ACertContext, szOID_SUBJECT_ALT_NAME2);
    if pExtension <> Nil then
    begin
      pNameInfo := DecodeCertExtensionToNameInfo(pExtension, szOID_SUBJECT_ALT_NAME2);
      if pNameInfo <> Nil then
      begin
        try
          ABlob := GetOtherNameBlobFromNameInfo(pNameInfo, '2.16.76.1.3.3');  // Informações de P.F. ou P.J.
          if ABlob.cbData > 0 then
          begin
            aOID := PAnsiChar(ABlob.pbData);
            aOID := AdjustAnsiOID(aOID);
            Result := copy(Trim(aOID), 1, 14);
          end;

          if (Result = '') then
          begin
            ABlob := GetOtherNameBlobFromNameInfo(pNameInfo, '2.16.76.1.3.1');  // Informações de P.F.
            if ABlob.cbData > 0 then
            begin
              aOID := PAnsiChar(ABlob.pbData);
              aOID := AdjustAnsiOID(aOID);
              //Result := copy(Trim(aOID), 9, 11);
              Result := copy(Trim(aOID), 10, 11);
            end;
          end;
        finally
          Freemem(pNameInfo);
        end;
      end;
    end;
  end;
end;

 

O comando copy estava pegando da posição 9 e alterei para 10.

O erro apresentado ocorreu com dois certificado diferentes do tipo A3 e-CPF da serasa. Como não tenho outro eCPF de uma outra certificadora, gostaria de saber se alguem está utilizando WinCrypt com eCPF e se o atributo CNPJ esta sendo preenchido corretamente.

 

Obrigado.

Postado

A alteração que sugeri causará erros com outras certificadoras... Consegui outro certificado e-CPF e a alteração que sugeri ocasionou erro...

Talvez seria necessário por uma condição sobre a certificadora na função que alterei...

Analisando em outro ponto me deparei com a seguinte função no arquivo ACBrDFeSSl.pas:

function TDadosCertificado.GetCNPJFromSubjectName( SubjectName: String ): String;
var
  P: Integer;
begin
  Result := '';
  P := pos('CN=',SubjectName);
  if P > 0 then
  begin
    P := PosEx(':', SubjectName, P);
    if P > 0 then
    begin
      Result := OnlyNumber(copy(SubjectName, P+1, 14));
      // Evita pegar CPF ou outro Documento, do SubjectName (comuns em EPP)
      if (ValidarCNPJ(Result) <> '') then
        Result := '';
    end;
  end;
end; 

Não entendi o motivo de evitar pegar o CPF do SubjectName, já que a função "GetOtherNameBlobFromNameInfo" retorna uma string diferente dependendo da entidade Certificadora que se está utilizando.

Ocorreria algum problema caso além de validar se é um CNPJ validar também se trata-se de um CPF?

Obrigado.

  • Fundadores
Postado

Lembro de ter tido alguns casos do Certificado, onde nem o CNPJ ou CPF estavam no SubjectName... mas um outro código qualquer...
(Mas isso poderia ser resolvido, com uma validação de CPF ou CNPJ)

Se for possível, por favor me envie (por mensagem privada) o PFX desse certificado, para estudar o caso...

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

Boa noite Daniel,

Infelizmente os certificados que apresentaram problema foram do tipo A3... Da Serasa, então não conseguirei enviar...

O que fiz até o momento foi exatamente isso, incluir a validação do CPF na função "GetCNPJfromSubjectName" mas fiquei em dúvida devido o comentário que consta na função e quais problemas poderiam trazer...

  • Este tópico foi criado há 2437 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.