Sat.Certificados.Certificate
(sat_certificados v4.0.1)
Copy Markdown
Certificado X.509 (.cer) del SAT en formato DER con parseo OTP para consultas (RFC, vigencia, etc.).
Summary
Functions
Versión de la Autoridad Certificadora del SAT (4 o 5) que emitió el cert.
Detecta el tipo de certificado por extensiones X.509 estándar
true si la fecha actual es posterior a valid_to/1.
Huella SHA-1 del DER, formato AA:BB:CC:... en mayúsculas (estilo Node).
Huella SHA-256 del DER (hex mayúsculas, sin separadores).
Crea un certificado a partir del contenido DER binario (.cer).
Lee un archivo .cer (DER o PEM).
Crea un certificado a partir de un string PEM.
true si es CSD. Equivalente a certificate_type/1 == :csd.
true si es FIEL (e.firma). Equivalente a certificate_type/1 == :fiel.
Verifica que este certificado fue firmado por el issuer dado.
Útil para validar la cadena de confianza contra AC4_SAT.cer / AC5_SAT.cer.
Issuer como mapa atributo => valor.
Nombre legal (CN o, en su defecto, givenName).
Número de certificado en formato SAT (ver Clir.Openssl.X509.no_certificado/1).
Llave pública RSA decodificada ({:RSAPublicKey, modulus, exponent}).
Llave pública del certificado en formato PEM -----BEGIN PUBLIC KEY-----.
RFC del titular, inferido del subject (OIDs típicos del SAT).
Encripta un mensaje con la llave pública del certificado (RSA PKCS#1 v1.5). Solo el dueño de la llave privada puede desencriptar. Retorna Base64.
Número de serie en hexadecimal (mayúsculas).
Subject como mapa atributo => valor.
Tipo de sujeto (titular)
Contenido del certificado en Base64 (sin cabeceras PEM ni saltos).
DER crudo del certificado.
Proyecta toda la metadata útil del certificado a un mapa con llaves snake_case (átomos por default).
PEM del certificado (incluye cabeceras).
true si el certificado está vigente: valid_from <= now <= valid_to.
A diferencia de expired?/1, también verifica que el inicio de vigencia
ya esté en el pasado.
Inicio de vigencia (UTC).
Fin de vigencia (UTC).
Verifica una firma Base64 contra data con la llave pública del cert.
Default SHA-256 (lo que exige el SAT).
Alias de issued_by?/2 por compatibilidad con e.firma.
Types
@type t() :: %Sat.Certificados.Certificate{ parsed: Clir.Openssl.X509.otp_cert(), raw_der: binary() }
Functions
Versión de la Autoridad Certificadora del SAT (4 o 5) que emitió el cert.
El SAT codifica el número de AC en el dígito 12 (índice 11) del
no_certificado (20 dígitos decimales).
Retorna nil si no se puede determinar.
@spec certificate_type(t()) :: :csd | :fiel | :unknown
Detecta el tipo de certificado por extensiones X.509 estándar:
:csd(Certificado de Sello Digital):keyUsagecondigitalSignatureynonRepudiationactivos, sindataEnciphermentnikeyAgreement.:fiel(e.firma / FIEL):extKeyUsageconemailProtectionyclientAuthactivos.
Si las extensiones no resuelven el tipo, hace fallback a la heurística del
OU del subject (Prueba_CFDI, FIEL, etc.). Retorna :unknown si no
se puede determinar.
true si la fecha actual es posterior a valid_to/1.
Huella SHA-1 del DER, formato AA:BB:CC:... en mayúsculas (estilo Node).
Huella SHA-256 del DER (hex mayúsculas, sin separadores).
Crea un certificado a partir del contenido DER binario (.cer).
Lee un archivo .cer (DER o PEM).
Crea un certificado a partir de un string PEM.
true si es CSD. Equivalente a certificate_type/1 == :csd.
true si es FIEL (e.firma). Equivalente a certificate_type/1 == :fiel.
Verifica que este certificado fue firmado por el issuer dado.
Útil para validar la cadena de confianza contra AC4_SAT.cer / AC5_SAT.cer.
Retorna true si la firma del cert es válida bajo la pública del emisor.
Issuer como mapa atributo => valor.
Nombre legal (CN o, en su defecto, givenName).
Número de certificado en formato SAT (ver Clir.Openssl.X509.no_certificado/1).
Llave pública RSA decodificada ({:RSAPublicKey, modulus, exponent}).
Llave pública del certificado en formato PEM -----BEGIN PUBLIC KEY-----.
RFC del titular, inferido del subject (OIDs típicos del SAT).
Encripta un mensaje con la llave pública del certificado (RSA PKCS#1 v1.5). Solo el dueño de la llave privada puede desencriptar. Retorna Base64.
Número de serie en hexadecimal (mayúsculas).
Subject como mapa atributo => valor.
@spec subject_type(t()) :: :moral | :fisica | :unknown
Tipo de sujeto (titular):
:moral— persona moral / empresa: el OID 2.5.4.45 contieneRFC / CURP.:fisica— persona física: RFC de 13 caracteres sin/.:unknown— no se pudo determinar.
Contenido del certificado en Base64 (sin cabeceras PEM ni saltos).
DER crudo del certificado.
Proyecta toda la metadata útil del certificado a un mapa con llaves snake_case (átomos por default).
Incluye: tipo (CSD/FIEL), persona física o moral, RFC, nombre legal, número de certificado SAT, número de serie hex, fechas de vigencia, estado de expiración, fingerprints (SHA-1 y SHA-256), versión de la AC, issuer, y subject completo (mapa con códigos LDAP estándar como llaves: "CN", "O", "OU", "RFC", etc.).
La llave privada NO se incluye (es PII y vive en PrivateKey).
Opciones:
:keys—:atom(default),:stringo:existing. Misma semántica queCFDI.to_map/2. Aplica al primer nivel y al mapa anidado bajo:subject.
PEM del certificado (incluye cabeceras).
true si el certificado está vigente: valid_from <= now <= valid_to.
A diferencia de expired?/1, también verifica que el inicio de vigencia
ya esté en el pasado.
@spec valid_from(t()) :: DateTime.t()
Inicio de vigencia (UTC).
@spec valid_to(t()) :: DateTime.t()
Fin de vigencia (UTC).
Verifica una firma Base64 contra data con la llave pública del cert.
Default SHA-256 (lo que exige el SAT).
Alias de issued_by?/2 por compatibilidad con e.firma.