Fiscalapi.Credentials
4.0.95
dotnet add package Fiscalapi.Credentials --version 4.0.95
NuGet\Install-Package Fiscalapi.Credentials -Version 4.0.95
<PackageReference Include="Fiscalapi.Credentials" Version="4.0.95" />
paket add Fiscalapi.Credentials --version 4.0.95
#r "nuget: Fiscalapi.Credentials, 4.0.95"
// Install Fiscalapi.Credentials as a Cake Addin #addin nuget:?package=Fiscalapi.Credentials&version=4.0.95 // Install Fiscalapi.Credentials as a Cake Tool #tool nuget:?package=Fiscalapi.Credentials&version=4.0.95
Fiscalapi Credentials
Biblioteca para trabajar con archivos CSD y FIEL del SAT de manera sencilla en .NET. Credentials
simplifica la firma (sellado), la verificación de firmas, el cálculo de hashes (por ejemplo, para servicios de descarga masiva de XML y metadatos), así como la obtención de información relevante de los certificados y llaves públicas del SAT.
La firma digital es un proceso criptográfico que garantiza la autenticidad, integridad y no repudio de un documento o mensaje. En México, el SAT requiere que los contribuyentes utilicen un Certificado de Sello Digital (CSD) para firmar (sellar) las facturas, mientras que una Firma Electrónica Avanzada (FIEL) se utiliza para firmar documentos de cualquier otro tipo (contratos, acuerdos, cotizaciones, correos, etc) de manera legalmente válida.
Tabla de Contenido
- Acerca de la Librería
- Instalación
- Uso Básico
- Acerca de los Archivos CSD y FIEL
- Compatibilidad
- Roadmap
- Contribuciones
- 🤝 Contribuir
- 🐛 Reportar Problemas
- 📄 Licencia
- 🔗 Enlaces Útiles
🚀 Características
- Firmar (sellar) documentos: Utilizar CSD o FIEL para generar firmas digitales que cumplen con los lineamientos del SAT.
- Verificar firmas: Validar que la firma fue generada correctamente con la llave privada asociada.
- Calcular hashes: Útil para servicios de descarga masiva de XML del SAT, comparaciones de integridad, etc.
- Obtener datos del certificado: Número de serie, fecha de vigencia, RFC, razón social, entre otros.
- Generar archivos PFX (PKCS#12) a partir de los archivos proporcionados por el SAT sin necesidad de
openssl
.
Clases Principales
Certificate
- Maneja todo lo relacionado al
.cer
(X.509 DER). - Obtiene número de certificado, versión, periodo de vigencia, etc.
- Convierte de X.509 DER a X.509 PEM.
- Maneja todo lo relacionado al
PrivateKey
- Maneja todo lo relacionado al
.key
(PKCS#8 DER). - Convierte la clave de PKCS#8 DER a PKCS#8 PEM.
- Requiere la contraseña de la llave privada para operar.
- Maneja todo lo relacionado al
Credential
- Une
Certificate
yPrivateKey
. - Permite firmar, validar firmas, crear archivos PFX, etc.
- Identifica si es CSD o FIEL y verifica su vigencia.
- Une
📦Instalación
Instala el paquete Credentials desde NuGet:
Install-Package Credentials -Version 4.0.95
Ejemplos de uso
Uso del Certificado
// Cargar el archivo .cer
var cerPath = @"C:\Users\Usuario\Desktop\cer.cer";
var cerBytes = File.ReadAllBytes(cerPath);
var cerBase64 = Convert.ToBase64String(cerBytes);
// Crear instancia de Certificate
var certificate = new Certificate(cerBase64);
// (Por ejemplo, cerBase64 puede guardarse en BD y luego recuperarse)
// Mostrar información básica del certificado
Console.WriteLine($"PlainBase64: {certificate.PlainBase64}");
Console.WriteLine($"RFC: {certificate.Rfc}");
Console.WriteLine($"Razón Social: {certificate.Organization}");
Console.WriteLine($"Serial Number: {certificate.SerialNumber}");
Console.WriteLine($"Certificate Number: {certificate.CertificateNumber}");
Console.WriteLine($"Válido desde: {certificate.ValidFrom}");
Console.WriteLine($"Válido hasta: {certificate.ValidTo}");
Console.WriteLine($"¿Es FIEL?: {certificate.IsFiel()}");
Console.WriteLine($"¿Está vigente?: {certificate.IsValid()}"); // ValidTo > DateTime.Now
// Convertir X.509 DER base64 a X.509 PEM
var pemCertificate = certificate.GetPemRepresentation();
File.WriteAllText("MyPemCertificate.pem", pemCertificate);
Uso de la Clave Privada
// Cargar el archivo .key
var keyPath = @"C:\Users\Usuario\Desktop\key.key";
var keyBytes = File.ReadAllBytes(keyPath);
var keyBase64 = Convert.ToBase64String(keyBytes);
// Crear instancia de PrivateKey con la contraseña
var privateKey = new PrivateKey(keyBase64, "TuPasswordDeLaLlave");
// Convertir PKCS#8 DER a PKCS#8 PEM
var PemPrivateKey = privateKey.GetPemRepresentation();
File.WriteAllText("MyPemPrivateKey.pem", PemPrivateKey);
Uso del Objeto Credential
// Crear instancia de Credential a partir de certificate y privateKey
var cred = new Credential(certificate, privateKey);
var dataToSign = "Hola Mundo"; // Reemplazar con cadena original u otro contenido
// Firmar datos
var signedBytes = cred.SignData(dataToSign);
// Verificar firma
var originalDataBytes = Encoding.UTF8.GetBytes(dataToSign);
var isValidSignature = cred.VerifyData(originalDataBytes, signedBytes);
Console.WriteLine($"¿Firma Válida?: {isValidSignature}");
// Crear archivo PFX (PKCS#12)
var pfxBytes = cred.CreatePFX();
File.WriteAllBytes("MyPFX.pfx", pfxBytes);
// Calcular y verificar hash (por ejemplo, para descarga masiva XML)
var dataToHash = "XML canonical representation";
var hashBase64 = cred.CreateHash(dataToHash);
var isHashValid = cred.VerifyHash(dataToHash, hashBase64);
Console.WriteLine($"¿Hash Válido?: {isHashValid}");
// Información adicional
Console.WriteLine($"Tipo de Credencial: {cred.CredentialType}"); // Enum: Fiel || Csd
Console.WriteLine($"¿Es FIEL válida?: {cred.IsValidFiel()}");
Acerca de los Archivos de Certificado y Llave Privada
Los certificados provistos por el SAT suelen estar en formato X.509 DER (.cer
), mientras que las llaves privadas están en PKCS#8 DER (.key
). Estos formatos no se pueden usar directamente en la mayoría de las bibliotecas de C#, pero Credentials
resuelve este problema convirtiéndolos internamente a PEM (.pem
) sin requerir openssl
.
Esta conversión consiste básicamente en:
- Codificar en Base64 el contenido DER.
- Separar en líneas de 64 caracteres.
- Agregar las cabeceras y pies específicos para certificados y llaves privadas.
Por lo tanto, no necesitas realizar la conversión manual ni depender de utilerías externas para utilizar tus archivos CSD o FIEL.
Compatibilidad
- Compatible con .NET 6, .NET 8 y .NET 9 WinForms, WPF, Console, ASP.NET, Blazor, MVC, WebApi.
- Mantenemos la compatibilidad con al menos la versión LTS más reciente de .NET.
- Se sigue el Versionado Semántico 2.0.0, por lo que puedes confiar en que las versiones nuevas no romperán tu aplicación de forma inesperada.
Roadmap
- Conversión de X.509 DER a X.509 PEM (SAT .cer).
- Conversión de PKCS#8 DER a PKCS#8 PEM (SAT .key).
- Creación de archivo .PFX (PKCS#12) a partir de los archivos X.509 PEM y PKCS#8 PEM.
- Firma de datos con
SHA256withRSA
. - Verificación de datos firmados.
- Cálculo y verificación de hash para servicios SAT de descarga masiva de XML.
- Persistencia de CSD y FIEL utilizando Entity Framework Core y bases de datos relacionales.
🤝 Contribuir
- Haz un fork del repositorio.
- Crea una rama para tu feature:
git checkout -b feature/AmazingFeature
. - Realiza commits de tus cambios:
git commit -m 'Add some AmazingFeature'
. - Sube tu rama:
git push origin feature/AmazingFeature
. - Abre un Pull Request en GitHub.
🐛 Reportar Problemas
- Asegúrate de usar la última versión del SDK.
- Verifica si el problema ya fue reportado.
- Proporciona un ejemplo mínimo reproducible.
- Incluye los mensajes de error completos.
📄 Licencia
Este proyecto está licenciado bajo la Licencia MPL. Consulta el archivo LICENSE para más detalles.
🔗 Enlaces Útiles
Desarrollado con ❤️ por Fiscalapi
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. |
-
net6.0
- No dependencies.
-
net8.0
- No dependencies.
-
net9.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
4.0.95 | 71 | 1/20/2025 |