amantecayolt, se traduce del nahuatl como ciencias de la tecnología ó tecnología http://www.espanolsinfronteras.com/Diccionarios/EspdeMx-DiccEspanolNahuatl-T.htm

viernes, 18 de abril de 2008

Certificado como lo usa Hacieda

-- tomado de http://www.lacorona.com.mx/fortiz/

Manejo del certificado y sello digital + Factura Electronica en México

Contenido/contents:
Introducion
Llave privada
Llave publica
Pagina anterior/Previous page

Introduccion
Para los que todavia no tengan el famoso anexo 20 del diario oficial del 1 de septiembre del 2004 lo pueden obtener aqui. El Anexo 20 empieza en la pagina 135 y termina en la pagina 160.
En la pagina informacion a detalle sobre Comprobantes fiscales Didigitales del SAT esta una presentacion en PowerPoint fechada en Febrero del 2005 fea_fe.ppt donde en la diapositiva 58 "Un par de Notas Sobre Llaves" mecionan que la llave privada esta en con el standard PKCS8 en formato DER.
Desafortunadamente los algoritmos PHP de OpenSSL requieren que este en formato PEM.
Llave privada
Ademas esta el 'problema' de la contraseña, se puede escribir la contraseña en el codigo PHP pero queda muy a la vista, o se le puede quitar la contraña al archivo. Yo obte por esto ultimo.
openssl pkcs8 -inform DER -in AAA010101AAA_0408021316S.key -out AAA010101AAA.key.pem
Este programa pide la contraseña para poder abrir la llave y la convierte al formato PEM ya sin la contraseña. Podemos ver el contenido del archivo porque ya esta en formato base64.
$ cat AAA010101AAA.key.pem
-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQDArCo5om1eOPsVVkgG57X0VZI+Y/kqSRRqtOVBGj8rKx38nYjH
VqAkKS4sYRsvLtXI+1courEksbrhYxkYJOc1rqm6uyWSIbrtwhSStoETa2/+3Zsv
tGYakQARhlPm6Pqyj6DjiNZrMW8JjtSehr4grd17Aub6L3wv28tkHvIizwIDAQAB
AoGBALxMReQXws0v4OsEbNYaw++rZYaGC+/whfyXF+pdLVkSBXdpulAeb9mHSXHj
4T5mhlaqlI7gjdkvvVUilVbMUgypGYr8D7tw+cIw4dY59T+iYJP4ohu0/9QxT61z
LaxCDWz1oQSWrqVrC2YeBMZlUMqoj60qhZuN/nMLuMlf69s5AkEA6gDl7P8sgMk5
ur0BIpDDsAiXS0GwbrbKg+b9Ha7OAG+8rMG4K8oTSNXsZESLrN2ZcLzr08Xp/GIv
8qZzWoT17QJBANLIq6mQKXjPYX9PYvFB4voQJ2uBzARbT+9IBEki9IeBoa+8KMlh
XatepWNnWN+EGFu25K+TYimWvW/alL81pCsCQQDGsbyKYKIJONQsHBC6qPGAp8rP
vBdz6wJKvfhvG98Pv9EVX+hiRlPZpMv0179CKWgAsmoMiCEGjNjp0Sxh0ESBAkEA
jrmCQxZyfnMtuV6vyFysrFYz2v/QfUK3JXbGMB+TJA4KxUvK8lETc+5qXpyj+PUg
6Tk2MAzD8xU2wH5pKe/QcQJAEYsi0vjsIzcIOaCRRPA+H0kOEgx4wPZmKNrLNGru
gBIUpRlCzi6zGAhq3KVosQeqp0TAg9aSREW+Jux6nYJigA==
-----END RSA PRIVATE KEY-----
Como mencione, este certificado ya esta sin contraseña, si se quiere en formato PEM pero con la contraseña se ejecuta este otro comando que la solicita y encripta la llave privada.
$ openssl rsa -in AAA010101AAA.key.pem -des3 -out conllave.key.pem
writing RSA key
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
Este archivo en formato PEM tambien tiene el contenido en formato base64 pero esta cifrado con el metodo 3DES por lo cual solo se puede usar para firmar si se proporciona la contraseña correcta.
$ cat conllave.key.pem
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,40B029D5AE25EDB0

n/giCSQ/F91Zn1sAfdx8qO6fNNHYIJijtTUWABCrP9t8B/WLXkdhpOE4f/8pq1mc
NesOY6/wIwWxOOilBXjcOFUuvJAIys6M6YXhVt5i3efU5NxdfLHGcUtMh2sQnVia
X1c094aMONYtVXOfTphWnSIwillGIIRaDkwZXV8T1dxt4X0uzXM7EFTYi6cYE9Ok
3931+ehoRUN8wPqblZpCVqaM14m71nI9VC7PYe72Dhu/62B/PHl5uX551KV0ABHv
rn1rycdsz0c+ynu1No2Hx0MacP//QzRjHkfhKbHCJEOHCSQIRQw8noU035cXmG3O
zMoxZFgPpZPSbBYK/F3xtcqos+Zfp9neE9d/K/LHUC2W2YRl9bMZV3xcV9jArqJ4
3pL4Q6qwF8XG2Qeu1kUBtkOXqmUNa+6y7FaPCPbjS3sBXKBc+Ysgei2KWSmRDNR6
urulvRNhtfTJzLM52KlvAjg6rj8O+YFaErz8fJ2TiDDBiUdcKMLbH1uADe+aZyEt
LvshfAtyl7lKpdWxCro6wfCvkt95YRvQa1JILV6eVnhu5CZWtc3hjCaJuiSTvkjK
fxXaZWLNC9L2Du+xR4ceBk4L1BSu6k6up1nlTqctj9znRJ5BdkOdxkNhCbU9MI65
TthIFHkRAjHZUsJx79EhsLPH1lh9VPMxgNdYTr9OuYC+ro9pKinHsGnbQIkCOEkt
OSKwelU94DrOcpzIvqIeV4dxxCHPHLaeLUN13w3mLX0vtbLKb8Ml0CkTjzFBYA4H
DmgS3duVXUnPO4GDxcn+ZrXPDdBCqMW1nFG0BVgsBwuwd4v5LvgCtw==
-----END RSA PRIVATE KEY-----
Llave publica
Ademas el certificado o llave publica tambien esta en formato DER por lo que tambien hay que convertirlo
openssl x509 -inform DER -outform PEM -in AAA010101AAAsd.cer -pubkey >AAA010101AAA.cer.pem
Ya convertido ya podemos ver el contenido del certificado de llave publica
24/feb/2006, Gracias a Hector Magaña de Accend por corregirme en el comando para generar el archivo incluyendo la llave publica.
$ cat AAA010101AAA.cer.pem
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDArCo5om1eOPsVVkgG57X0VZI+
Y/kqSRRqtOVBGj8rKx38nYjHVqAkKS4sYRsvLtXI+1courEksbrhYxkYJOc1rqm6
uyWSIbrtwhSStoETa2/+3ZsvtGYakQARhlPm6Pqyj6DjiNZrMW8JjtSehr4grd17
Aub6L3wv28tkHvIizwIDAQAB
-----END PUBLIC KEY-----
-----BEGIN CERTIFICATE-----
MIIDpDCCAoygAwIBAgIUMDAwMDEwMDAwMDAwMDAwMDAxMTQwDQYJKoZIhvcNAQEF
BQAwgcMxGTAXBgNVBAcTEENpdWRhZCBkZSBNZXhpY28xFTATBgNVBAgTDE1leGlj
bywgRC5GLjELMAkGA1UEBhMCTVgxGjAYBgNVBAMTEUFDIGRlIFBydWViYXMgU0FU
MTYwNAYDVQQLFC1BZG1pbmlzdHJhY2nzbiBkZSBTZWd1cmlkYWQgZGUgbGEgSW5m
b3JtYWNp824xLjAsBgNVBAoUJVNlcnZpY2lvIGRlIEFkbWluaXN0cmFjafNuIFRy
aWJ1dGFyaWEwHhcNMDQwODAyMTk0NzEzWhcNMDYwODAyMTk0NzEzWjCBuDElMCMG
A1UELRMcQUFBMDEwMTAxQUFBIC8gQUFBQTAxMDEwMUFBQTEeMBwGA1UEBRMVIC8g
QUFBQTAxMDEwMUhERlJYWDAwMRowGAYDVQQKExFFbXByZXNhIGRlIFBydWViYTEb
MBkGA1UECxMSU3VjdXJzYWwgZGUgUHJ1ZWJhMRowGAYDVQQDExFFbXByZXNhIGRl
IFBydWViYTEaMBgGA1UEKRMRRW1wcmVzYSBkZSBQcnVlYmEwgZ8wDQYJKoZIhvcN
AQEBBQADgY0AMIGJAoGBAMCsKjmibV44+xVWSAbntfRVkj5j+SpJFGq05UEaPysr
HfydiMdWoCQpLixhGy8u1cj7Vyi6sSSxuuFjGRgk5zWuqbq7JZIhuu3CFJK2gRNr
b/7dmy+0ZhqRABGGU+bo+rKPoOOI1msxbwmO1J6GviCt3XsC5vovfC/by2Qe8iLP
AgMBAAGjHTAbMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgPoMA0GCSqGSIb3DQEB
BQUAA4IBAQA3c1OpeaWhP1Qt5XBb3CKogVjo8oUfIJdayTYVG/jy/STtWUJpQ5V1
4esa4ZrhTtYT1ZJiXPwQTS1fEDNr4XrmyFoimXfj9/pemGu/61skcViVB2rw3H6S
5Mn8b2ICx6zAK+KVoFal/mJpXLOGvH4S7E529MneLh6rktDxJ+338fFgF2sEZItf
NaSeAsX4Nllsz4G4re0nnSShD3T9y6o2nMpOwphMgpy12HsQm7XxIvZe+SIUjhBk
Q7UVz9/6yuD/Hguh38vnU9j98VWahVjUT4BnI1RTPiYlaxlMsqQOkh1QIbOufki5
4wledKtwlkS5x71yo3HMVR9CMK2GJV39
-----END CERTIFICATE-----
Y por supuesto ya podemos usar varios comandos para sacar mas informacion de ese conjunto de datos.
$ openssl x509 -in AAA010101AAA.cer.pem -issuer -noout
issuer= /L=Ciudad de Mexico/ST=Mexico, D.F./C=MX/CN=AC de Pruebas SAT/OU=Administraci\xF3n de Seguridad de la Informaci\xF3n/O=Servicio de Administraci\xF3n Tributaria
$ openssl x509 -in AAA010101AAA.cer.pem -startdate -enddate -noout
notBefore=Aug 2 19:47:13 2004 GMT
notAfter=Aug 2 19:47:13 2006 GMT
$ openssl x509 -in AAA010101AAA.cer.pem -subject -noout
subject= /x500UniqueIdentifier=AAA010101AAA / AAAA010101AAA/serialNumber= / AAAA010101HDFRXX00/O=Empresa de Prueba/OU=Sucursal de Prueba/CN=Empresa de Prueba/name=Empresa de Prueba
$ openssl x509 -in AAA010101AAA.cer.pem -serial -noout
serial=3030303031303030303030303030303030313134
Ya para ver ejemplos de como usar estos certificados para generar el sello del certificado digital les recomiendo que vean esta pagina donde tambien aplico XSLT para generar la cadena original.

No hay comentarios: