Mensaje de error
error:0680009B:asn1 encoding routines:ASN1_get_object:too long
Reproducido con OpenSSL 3.6; OpenSSL 1.1.x imprime el mismo fallo como «error:0D07209B:asn1 encoding routines:ASN1_get_object:too long». El tan buscado «header too long» (error:0680007B en OpenSSL 3, error:0D07207B en 1.1.x) es un error hermano: la entrada termina antes de que el propio encabezado de etiqueta y longitud esté completo, ya sea un archivo vacío o de un solo byte, o un encabezado cortado a mitad de la longitud.
Qué significa
El analizador DER leyó lo que debería ser un encabezado ASN.1 de etiqueta y longitud y obtuvo una longitud mayor que los datos disponibles: el síntoma clásico de «estos bytes no son DER». Normalmente la entrada es texto base64, PEM o datos truncados que se analizan como DER binario, no una estructura sutilmente dañada.
Por qué ocurre
Texto Base64/PEM analizado como DER binario
frecuenteLos caracteres ASCII interpretados como bytes de etiqueta/longitud producen longitudes absurdas de inmediato. Pasar -inform der cuando el archivo es PEM (o enviar base64 por una tubería sin decodificarlo) es el desencadenante de manual.
DER truncado
frecuenteUna descarga interrumpida, el límite de una columna de la base de datos o un copiar y pegar que pierde los bytes finales dejan un encabezado que anuncia más contenido del que existe. La longitud de la SEQUENCE exterior ya no coincide con el tamaño del archivo.
Datos concatenados o desplazados
ocasionalLos bytes sobrantes antes de la estructura real —encabezados HTTP guardados en el archivo, el entramado de otro protocolo— desplazan al analizador hacia bytes que se leen como un encabezado no válido, y se notifica este error o su hermano «header too long» según cuáles sean esos bytes. Un prefijo de longitud corto también puede analizarse mal sin avisar: asn1parse imprime entonces una primera línea sin sentido en lugar de fallar.
Cómo solucionarlo
- 1.
Ajustar el formato de entrada al analizador
Decodifica primero el base64 o indica a la herramienta que es PEM. asn1parse espera entrada PEM por defecto; -inform der es solo para datos realmente binarios.
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.
Comprobar los tamaños antes de analizar
Para una firma DER ECDSA P-256, espera aproximadamente entre 70 y 72 bytes que empiecen por 0x30. Una «firma» de 96 bytes probablemente sea base64; 64 bytes es r‖s en formato raw, que no es DER en absoluto.
bash wc -c < sig.der head -c 8 sig.der | xxd # 30 44/45/46 ... → DER SEQUENCE - 3.
Si es una firma r‖s en formato raw, convertirla
JWS y WebCrypto producen firmas ECDSA raw de 64 bytes que ningún analizador DER aceptará. El conversor de abajo pasa de raw a DER (y al revés) y muestra los enteros r y s: pega los bytes y comprueba qué formato tienes realmente.