Pues al hacer mi reporte mensual ví que el sistema del SAT me denegó el servicio ya que mi FIEL (Firma electrónica avanzada) caducó hace 3 días. Ahora tengo que hacer un trámite engorroso en el SAT para que me den la renovación, siendo que si la FIEl está aún vigente, es muy fácil el trámite de reposición.
Por eso les dejo un pequeño programa que hice en Perl para verificar los datos de sus certificados del SAT (y de cualquier certificado que use x509):
#!/usr/bin/perl use strict; use File::Copy; use File::Path; sub SAT_Path { my $file = shift; return substr($file,0,6) . '/' . substr($file,6,6) . '/' . substr($file,12,2) . '/' . substr($file,14,2) . '/' . substr($file,16,2) . '/'; } sub Cert_Info { my $cert_file = shift; my $cert_info = qx(openssl x509 -inform DER -in $cert_file -serial -subject -startdate -enddate -noout); $cert_info =~ s/\\xD1/Ñ/g; $cert_info =~ s/\\xF1/ñ/g; $cert_info =~ s/\\xC1/Á/g; $cert_info =~ s/\\xC9/É/g; $cert_info =~ s/\\xCD/Í/g; $cert_info =~ s/\\xD3/Ó/g; $cert_info =~ s/\\xDA/Ú/g; $cert_info =~ s/\\xE1/á/g; $cert_info =~ s/\\xE9/é/g; $cert_info =~ s/\\xED/í/g; $cert_info =~ s/\\xF3/ó/g; $cert_info =~ s/\\xFA/ú/g; my ($serial_cn) = $cert_info =~ /subject\=.*\/CN=(.*?)(\/OU\=|\/O\=|\/name\=|\/serialNumber\=|\/x500UniqueIdentifier\=|\n)/; my ($rfc) = $cert_info =~ /subject\=.*\/x500UniqueIdentifier=(.*?)(\/CN\=|\/OU\=|\/O\=|\/name\=|\/serialNumber\=|\n)/; my ($curp) = $cert_info =~ /subject\=.*\/serialNumber=(.*?)(\/CN\=|\/OU\=|\/O\=|\/name\=|\/x500UniqueIdentifier\=|\n)/; my ($sucursal) = $cert_info =~ /subject.*\/OU=(.*?)(\/CN\=|\/O\=|\/name\=|\/serialNumber\=|\/x500UniqueIdentifier\=|\n)/; $curp =~ s/\s//g; $curp =~ s/^\///; my $rfc_rep = ''; $rfc =~ s/\s//g; if ($rfc =~ /\//) { ($rfc, $rfc_rep) = split(/\//, $rfc); } my ($serial_hex) = $cert_info =~ /serial\=(.*)/; my ($notBefore) = $cert_info =~ /notBefore=(.*)/; my ($notAfter) = $cert_info =~ /notAfter=(.*)/; my $public_key = qx(openssl x509 -inform DER -in $cert_file -noout -pubkey); my $certificate = qx(openssl x509 -inform DER -in $cert_file); my $serial = ''; my @pairs = $serial_hex =~ /(\d\d)/g; foreach my $hex (@pairs) { $serial = $serial . chr(hex($hex)); } print "-" x 65; print "\n"; print "RFC => $rfc\n"; print "Serial => $serial\n"; print "Nombre => $serial_cn\n"; print "RFC Rep. => $rfc_rep\n"; print "CURP => $curp\n"; print "sucursal => $sucursal\n"; print "Begin date => $notBefore\n"; print "End date => $notAfter\n"; print "-" x 65; print "\n"; print "$public_key\n$certificate\n"; print "SAT file: => ftp://ftp2.sat.gob.mx/Certificados/FEA/" . SAT_Path($serial) . "$serial.cer\n"; } chomp; my @Fields = split(/\|/,$_); if ($ARGV[0] =~ /\.cer/) { if ( -e "$ARGV[0]" ) { Cert_Info("$ARGV[0]"); } } |
Para usarlo sol le dan:
./cert_info.pl 00001000000103469712.cer |
y les dará la siguiente información:
----------------------------------------------------------------- RFC => CAJU641218Q96 Serial => 00001000000103469712 Nombre => CAMANEI SA DE CV RFC Rep. => CAJU641218Q96 CURP => CAJU641218HDFMLR54 sucursal => Begin date => Dec 3 17:48:18 2010 GMT End date => Mar 2 17:48:18 2013 GMT ----------------------------------------------------------------- -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqIIggmHT4qclfBRsIO7fzgDUd iYcSF46wqFu1cetJU+O/2G/E5o2LBj9dVyBwPxes5QvqcLxZUakXZH14EDAGlHm0 we5fr034OM/Mqj18o2dpSX3HKZyHnTgyaIxWVP9zSPrm2L4lwSdFS29kkQxx+VzE ewj0b1mJAtghZZLM5QIDAQAC -----END PUBLIC KEY----- -----BEGIN CERTIFICATE----- MIIENzCAAx+gAwIBAgIUMDAwDDEwMDAwMDAxMDIyOTY0ODIwDQYJKoZIhvcNAQEF BQAwggE2MTgwNgYDVQQDDC9BLkMuIGRlbCBTZXJ2aWNpbyBkZSBBZG1pbmlzdHJh Y2nDs24gVHJpYnV0YXJpYTEvMC0GA1UECgwmU2VydmljaW8gZGUgQWRtaW5pc3Ry YWNpw7NuIFRyaWJ1dGFyaWExHzAdBgkqhkiG9w0BCQEWEGFjb2RzQHNhdC5nb2Iu bXgxJjAkBgNVBAkMHUF2LiBIaWRhbGdvIDc3LCBDb2wuIEd1ZXJyZXJvMQ4wDAYD VQQRDAUwNjMwMDELMAkGA1UEBhMCTVgxGTAXBgNVBAgMEERpc3RyaXRvIEZlZGVy YWwxEzARBgNVBAcMCkN1YXVodGVtb2MxMzAxBgkqhkiG9w0BCQIMJFJlc3BvbnNh YmxlOiBGZXJuYW5kbyBNYXJ0w61uZXogQ29zczAeFw0xMDEyMDMxNzQ4MThaFw0x MzAzMDIxNzQ4MThaMIGlMRkwFwYDVQQDExBJTkNVVk9YIFNBIERFIENWMRkwFwYD VQQpExBJTkNVVk9YIFNBIERFIENWMRkwFwYDVQQKExBJTkNVVk9YIFNBIERFIENW MQswCQYDVQQGEwJNWDElMCMGA1UELRMcSU5DMTAxMTA5UTM2IC8gUk9BRjY0MTIx N0s5NDEeMBwGA1UEBRMVIC8gUk9BRjY0MTIxN0hERk1MUjA4MIGfMA0GCSqGSIb3 DQEBAQUAA4GNADCBiQKBgQCqIIgggHT4qclfBRsIO7fzgDUdiYcSF46wqFu1cetJ U+O/2G/E5o2LBj9dVyBwPxes5QvqcLxZUakXZH14EDAGlHm0we5fr034OM/Mqj18 o2dpSX3HKZyHnTgyaIxWVP9zSPrm2L4lwSdFS29kkQxx+VzEewj0b1mJAtghZuLM 5QIDAQABo08wTTAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwID2DARBglghkgBhvhC AQEEBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwQGCCsGAQUFBwMCMA0GCSqGSIb3 DQEBBQUAA4IBAQBLcKX2vawNdSjOZoA9lX5+KdBMCuKV74y4gQNnC+xNrN0Srjlr 1T7kwqdQJvQmz29RV9zc0dX7riM1S0xCrSzSrang9B6Actipz8QBFyCYvw1FDEZi YOf89Z4pA7YlhuNOI7+nDgfJa3DXrW5lB2totGPZ82dfSSaSB5NHJGeUTqESel0G 7GpGowO+tEz8KAky54lAuod8kPlkEpo5rh2K3zFeFLHoG6MYIcFAhirt3b13ABuq 2ZWzcTaht87bCam1H4zMAOZF5xTHCfBNN7NSV+yAeb0Ssp48N6nstsZBIvIKF7JV jW8PcylnhWsdW/3IQ7ENXE1S7fjKstDfkCdB -----END CERTIFICATE----- |