Mensagem de erro
error:0680009B:asn1 encoding routines:ASN1_get_object:too long
Reproduzido no OpenSSL 3.6; o OpenSSL 1.1.x imprime a mesma falha como “error:0D07209B:asn1 encoding routines:ASN1_get_object:too long”. O muito buscado “header too long” (error:0680007B no OpenSSL 3, error:0D07207B no 1.1.x) é um erro da mesma família: a entrada termina antes que o próprio cabeçalho de tag e comprimento esteja completo — um arquivo vazio ou de um byte, ou um cabeçalho cortado no meio do comprimento.
O que significa
O parser DER leu o que deveria ser um cabeçalho ASN.1 de tag e comprimento e obteve um comprimento maior que os dados disponíveis — o sintoma clássico de que “estes bytes não são DER”. Normalmente a entrada é texto base64, PEM ou dados truncados sendo interpretados como DER binário, e não uma estrutura com um defeito sutil.
Por que acontece
Texto Base64/PEM interpretado como DER binário
comumCaracteres ASCII interpretados como bytes de tag/comprimento produzem comprimentos absurdos imediatamente. Passar -inform der quando o arquivo é PEM (ou enviar base64 por um pipe sem decodificação) é o gatilho clássico.
DER truncado
comumUm download interrompido, o limite de tamanho de uma coluna do banco de dados ou um copiar e colar que perde os bytes finais deixam um cabeçalho que anuncia mais conteúdo do que existe. O comprimento da SEQUENCE externa deixa de corresponder ao tamanho do arquivo.
Dados concatenados ou deslocados
ocasionalBytes extras antes da estrutura real — cabeçalhos HTTP salvos no arquivo, o enquadramento de outro protocolo — deslocam o parser para bytes que são lidos como um cabeçalho inválido, relatado como este erro ou como “header too long”, o erro da mesma família, dependendo dos bytes. Um prefixo de comprimento curto também pode ser interpretado errado sem nenhum aviso: nesse caso, o asn1parse imprime uma primeira linha sem sentido em vez de falhar.
Como corrigir
- 1.
Adequar o formato da entrada ao parser
Decodifique o base64 primeiro ou informe à ferramenta que a entrada é PEM. O asn1parse espera entrada PEM por padrão; -inform der serve só para binário de verdade.
bash # base64 signature/blob → DER, then parse openssl base64 -d -in sig.b64 | openssl asn1parse -inform der # PEM object: let asn1parse handle the armor itself openssl asn1parse -in cert.pem - 2.
Conferir os tamanhos antes do parsing
Para uma assinatura ECDSA P-256 em DER, espere ~70–72 bytes começando com 0x30. Uma “assinatura” de 96 bytes provavelmente é base64; 64 bytes são r‖s raw, que não é DER de forma alguma.
bash wc -c < sig.der head -c 8 sig.der | xxd # 30 44/45/46 ... → DER SEQUENCE - 3.
Se for uma assinatura raw r‖s, convertê-la
O JWS e a WebCrypto geram assinaturas ECDSA raw de 64 bytes, que nenhum parser DER aceita. O conversor abaixo transforma raw em DER (e vice-versa) e mostra os inteiros r e s — cole os bytes e veja qual formato você tem de fato.