
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
| Criterio | FIEL (e.firma) | CSD |
|---|---|---|
| Propósito | Identificación ante SAT y dependencias | Sellado de CFDI antes del timbrado |
| Obtención | Presencial en oficinas SAT | En línea vía Certifica (requiere FIEL vigente) |
Nombre archivo .key | Clave privada_FIEL_<RFC>.key | CSD_<nombre>_<RFC>.key |
Nombre archivo .cer | <RFC>.cer | CSD_<nombre>_<RFC>_<num_certificado>.cer |
| Key Usage (descripción) | Digital Signature, Non-Repudiation, Data Encipherment, Key Agreement | Digital Signature, Non-Repudiation |
| Key Usage (hex) | d8 | c0 |
| Cantidad por RFC | Una | Mú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.

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...)
- Netscape Cert Type:
Certificado CSD
- Key Usage:
Digital Signature, Non-Repudiation (c0) - No contiene los campos
Netscape Cert TypeniEnhanced Key Usage. - En el campo Subject aparece el prefijo
Prueba_CFDIcuando es un certificado de pruebas.
Reglas visuales deterministas
| Observación en pestaña Details | FIEL | CSD |
|---|---|---|
| Hexadecimal en Key Usage | (d8) | (c0) |
Presencia de Enhanced Key Usage | Sí | No |
Presencia de Netscape Cert Type | Sí | No |
| Cantidad de flags en Key Usage | 4 | 2 |
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.
| Bit | Flag | FIEL | CSD |
|---|---|---|---|
| 7 | Digital Signature | 1 | 1 |
| 6 | Non-Repudiation | 1 | 1 |
| 5 | Key Encipherment | 0 | 0 |
| 4 | Data Encipherment | 1 | 0 |
| 3 | Key Agreement | 1 | 0 |
| 2 | Key Cert Sign | 0 | 0 |
| 1 | CRL Sign | 0 | 0 |
| 0 | Encipher Only | 0 | 0 |
| Resultado | 11011000 = 0xD8 | 11000000 = 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
0xD8significa FIEL. - Byte
0xC0significa 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.