FiscalAPI
FIEL vs CSD: Cómo Identificar Cada Certificado del SAT

FIEL vs CSD: Cómo Identificar Cada Certificado del SAT

26 de abril de 2026

Confundir un certificado FIEL con un CSD es uno de esos errores que parecen inofensivos hasta que tu integración revienta en producción. Ambos son archivos .cer emitidos por el SAT, ambos siguen el estándar X.509, ambos vienen acompañados de un .key y una contraseña. Pero sirven para cosas distintas, y si intentas timbrar un CFDI con la FIEL o autenticarte ante el SAT con un CSD, el sistema simplemente te va a rechazar. Lo bueno es que distinguirlos es trivial cuando sabes dónde mirar.

Tabla comparativa: FIEL vs CSD

CriterioFIEL (e.firma)CSD
PropósitoIdentificación ante SAT y dependenciasSellado de CFDI antes del timbrado
ObtenciónPresencial en oficinas SATEn línea vía Certifica (requiere FIEL vigente)
Nombre archivo .keyClave privada_FIEL_<RFC>.keyCSD_<nombre>_<RFC>.key
Nombre archivo .cer<RFC>.cerCSD_<nombre>_<RFC>_<num_certificado>.cer
Key Usage (descripción)Digital Signature, Non-Repudiation, Data Encipherment, Key AgreementDigital Signature, Non-Repudiation
Key Usage (hex)d8c0
Cantidad por RFCUnaMúltiples (uno por sucursal, por ejemplo)

Si nunca has integrado emisión de CFDI, conviene leer primero la diferencia conceptual entre e.firma y CSD antes de entrar al detalle criptográfico.

Identificación visual en Windows

La forma más rápida de saber qué tipo de certificado tienes en la mano es abrir el archivo .cer con doble clic. Windows lanza el visor nativo de certificados. En la pestaña Details (o Detalles), selecciona el campo Key Usage. El panel inferior muestra el valor que distingue cada tipo.

Comparación visual entre certificado FIEL y CSD en el visor de certificados de Windows mostrando la diferencia en el campo Key Usage
Comparación lado a lado del visor de certificados de Windows: izquierda FIEL, derecha CSD. El campo Key Usage es la diferencia clave.

Certificado FIEL

  • Key Usage: Digital Signature, Non-Repudiation, Data Encipherment, Key Agreement (d8)
  • Aparecen dos campos adicionales que el CSD nunca tiene:
    • Netscape Cert Type: SSL Client Authentication, SMI...
    • Enhanced Key Usage: Secure Email (1.3.6.1.5.5.7.3...)

Certificado CSD

  • Key Usage: Digital Signature, Non-Repudiation (c0)
  • No contiene los campos Netscape Cert Type ni Enhanced Key Usage.
  • En el campo Subject aparece el prefijo Prueba_CFDI cuando es un certificado de pruebas.

Reglas visuales deterministas

Observación en pestaña DetailsFIELCSD
Hexadecimal en Key Usage(d8)(c0)
Presencia de Enhanced Key UsageNo
Presencia de Netscape Cert TypeNo
Cantidad de flags en Key Usage42

El nombre del archivo no es criterio confiable. Cualquier persona puede renombrar un .cer a Clave privada_FIEL_XAXX010101000.cer sin que cambie nada del contenido. El único criterio determinista vive dentro del certificado, en la extensión Key Usage.

Composición de bits del Key Usage

El byte de Key Usage del certificado X.509 codifica como flags individuales los usos permitidos para la clave. El SAT activa flags distintos según el tipo de certificado, y de ahí salen los valores 0xD8 y 0xC0.

BitFlagFIELCSD
7Digital Signature11
6Non-Repudiation11
5Key Encipherment00
4Data Encipherment10
3Key Agreement10
2Key Cert Sign00
1CRL Sign00
0Encipher Only00
Resultado11011000 = 0xD811000000 = 0xC0

La FIEL incluye Data Encipherment y Key Agreement porque está pensada para autenticación e intercambio de claves con el SAT. El CSD no los necesita: su único trabajo es firmar CFDIs, así que solo lleva los flags de firma y no repudio. Esta diferencia es por diseño y está documentada en el certificado mismo.

Diferenciación programática

El OID de la extensión Key Usage en X.509 es 2.5.29.15. La regla es de una sola línea:

  • Byte 0xD8 significa FIEL.
  • Byte 0xC0 significa CSD.

En la práctica conviene leer los flags en lugar del byte crudo, porque en .NET la enumeración X509KeyUsageFlags ya te da acceso individual:

using System.Security.Cryptography.X509Certificates;

public enum CertificateType { FIEL, CSD, Unknown }

public static CertificateType IdentifyCertificate(X509Certificate2 cert)
{
    var ext = cert.Extensions["2.5.29.15"] as X509KeyUsageExtension;
    if (ext is null) return CertificateType.Unknown;

    var usage = ext.KeyUsages;
    bool hasDataEncipherment = usage.HasFlag(X509KeyUsageFlags.DataEncipherment);
    bool hasKeyAgreement     = usage.HasFlag(X509KeyUsageFlags.KeyAgreement);

    return (hasDataEncipherment && hasKeyAgreement)
        ? CertificateType.FIEL
        : CertificateType.CSD;
}

La presencia simultánea de DataEncipherment y KeyAgreement es suficiente. No hace falta validar también DigitalSignature ni NonRepudiation porque ambos certificados los traen activos.

Si tu stack es Node, Python o Go, la lógica es la misma: lee la extensión 2.5.29.15, verifica los flags dataEncipherment y keyAgreement. Cualquier librería que parsee X.509 te expone ese campo.

Notas operativas

  • El nombre del archivo es un atajo útil cuando la persona que generó los archivos no los renombró, pero no úsalo en código de producción.
  • Ambos certificados son emitidos por el SAT bajo la misma cadena de confianza y comparten formato X.509, por lo que cualquier librería de criptografía estándar los lee sin configuración extra.
  • Si necesitas emitir CFDIs a escala desde tu backend, en Fiscalapi nos encargamos de la cadena completa de sellado y timbrado para que no tengas que tocar el CSD directamente. Revisa la documentación oficial, los SDKs por lenguaje y los ejemplos en GitHub.

Cuando un cliente nos contacta diciendo que su CSD no le funciona para timbrar, en más de la mitad de los casos lo que tiene cargado es la FIEL. Con la regla del Key Usage el diagnóstico se resuelve en segundos.