Página 2 de 2
Re: Lista de Contribuyentes con Obligación (LCO)
Publicado: Jue Feb 23, 2012 12:07 pm
por Stream
Perdon por el comentario jeje.. no lo vuelvo a hacer.. lo cierto es que, a todos nos gustaría tener un experto por un lado, preguntar y que nos aclaren las dudas jeje..
Con respecto a lo de verificar la firma, olvide especificar que era para el requerimiento de convertirse en pac, estoy de acuerdo que para buscar y validar un rfc en la lista es mas que suficiente bajar el archivo del sat =) con todos lo demas tambien estoy de acuerdo!
Saludos =)
Re: Lista de Contribuyentes con Obligación (LCO)
Publicado: Jue Feb 23, 2012 12:28 pm
por Dado
Bueno, no por nada esto es un "foro de discusion", gracias por compartir tus mensajes.
Re: Lista de Contribuyentes con Obligación (LCO)
Publicado: Jue Feb 23, 2012 4:07 pm
por Stream
La clase que viene en la pagina permite validar el XML LCO con respecto a la firma que trae instrustada en el mismo, por ejemplo si cambian algo del XML y luego corren su proceso de verificar la firma el resultado será un negativo (false) lo que confirma que la verificacion de la firma funciona.
Por cierto, si a alguien le sirve, este es el certificado que viene inscrustado en el XML de la LCO correspondiente al 23-Febrero-2012 en formato base64.
Tal ves le sea util a alguien para compararlo =)
MIIEUDCCAzigAwIBAgIUMDAwMDEwODg4ODg4MDAwMDAwMDIwDQYJKoZIhvcNAQEFBQAwggE2MTgwNgYDVQQDDC9BLkMuIGRlbCBTZXJ2aWNpbyBkZSBBZG1pbmlzdHJhY2nDs24gVHJpYnV0YXJpYTEvMC0GA1UECgwmU2VydmljaW8gZGUgQWRtaW5pc3RyYWNpw7NuIFRyaWJ1dGFyaWExHzAdBgkqhkiG9w0BCQEWEGFjb2RzQHNhdC5nb2IubXgxJjAkBgNVBAkMHUF2LiBIaWRhbGdvIDc3LCBDb2wuIEd1ZXJyZXJvMQ4wDAYDVQQRDAUwNjMwMDELMAkGA1UEBhMCTVgxGTAXBgNVBAgMEERpc3RyaXRvIEZlZGVyYWwxEzARBgNVBAcMCkN1YXVodGVtb2MxMzAxBgkqhkiG9w0BCQIMJFJlc3BvbnNhYmxlOiBGZXJuYW5kbyBNYXJ0w61uZXogQ29zczAeFw0xMDEyMjQyMTMyMTFaFw0xNDEyMjQyMTMyNTFaMIGwMS4wLAYDVQQKFCVTZXJ2aWNpbyBkZSBBZG1pbmlzdHJhY2nzbiBUcmlidXRhcmlhMSQwIgYDVQQLFBtTZWd1cmlkYWQgZGUgbGEgSW5mb3JtYWNp824xCzAJBgNVBAYTAk1YMRkwFwYDVQQIExBEaXN0cml0byBGZWRlcmFsMREwDwYDVQQHFAhDb3lvYWPhbjEdMBsGA1UEAxMUSXZhbiBNYXJ0aW5leiBJdmFub3YwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANhIoXx0aRj574OrhAganpqjA1BHpZyMnB/+Bx+Ycx6TCWZ1QDJ33hi1RLHYiDnBIfw8XoJhqsu+2yLLnkzTunmLL1hxO2FWtQibmWLf24Y6sti9sBVFT1xTVZh283tMFWu5AABqHYydzzI7PwTr27OQL1jSRjR7CYs3q8Qtt9ZxAgMBAAGjXTBbMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgbAMB0GA1UdDgQWBBThOzlgsQEuyWWPt/wfIgT2ce8oGDAfBgNVHSMEGDAWgBTpzfB7fMtMW4fsfs9HWUavPqPDNjANBgkqhkiG9w0BAQUFAAOCAQEAvus9PLRTlt/HhwnUTbMd1BEIhkHLyJz4397juy1ohHRtO3HmwZuCEk9JTmMuJUtVWen8i2JU4lpw6DzAUpaA9xz3q9RYkRctQBKRL3rFTBD61W6TOw2X+uWfuL49ZLDb404Iwkm9xxeOi3gDVc1MOOQrgNZNUOTkeuC9Oq8FpfY7ppIHoYJ9xawSiDBwoFrfA5kISoD0q5B65UXngbaKSPAUAe5DFwte930b5+TQDNydxpd/ZrtBwHHwlupfedkkQI3BuTXs/8lOB9gymPbVsRBTk2DxvbUwmsLKTKSHy/Ovmw49YRSEMEibOONojKuczo7g4Z/3Lxq4dZr3y4vLww==
Como tal, en la clase no viene nada para extraer el certificado que viene en la LCO, ya que tal clase implementa una api de windows, para poder obtener el byte[] o blob del certificado que viene dentro del propior archivo xml es necesario modificar el codigo de la clase y asi obtener el byte[] del certificado:
Dentro de la funcion Decode de la clase, hay que irse hasta el final del metodo y agregar las siguientes lineas:
Código: Seleccionar todo
SignerCertContext = (ApiCriptoPkcs7.CERT_CONTEXT)Marshal.PtrToStructure(pSignerCertContext, typeof(ApiCriptoPkcs7.CERT_CONTEXT));
bResult = ApiCriptoPkcs7.CryptMsgControl(
hMsg,
0,
ApiCriptoPkcs7.CMSG_CTRL_VERIFY_SIGNATURE,
SignerCertContext.pCertInfo
);
if (!bResult)
{
throw new Exception("CryptMsgControl error #" + Marshal.GetLastWin32Error().ToString(), new Win32Exception(Marshal.GetLastWin32Error()));
}
//Obtener el certificado
MemoryStream cerMemoryStream = new MemoryStream();
Byte[] bytes = new Byte[SignerCertContext.cbCertEncoded];
Marshal.Copy(SignerCertContext.pbCertEncoded, bytes, 0, SignerCertContext.cbCertEncoded);
cerMemoryStream.Write(bytes, 0, SignerCertContext.cbCertEncoded);
cerMemoryStream.Position = 0;
byte[] cerBlob = cerMemoryStream.GetBuffer();
En donde cerBlob es la variable con el array de datos del certificado.
Espero les sirva =)
Recordandoles que el codigo fué extraido de:
http://blogs.msdn.com/b/alejacma/archiv ... ode-c.aspx
http://blogs.msdn.com/b/alejacma/archiv ... ature.aspx
Y son de caracter open sourcey completamente gratis, libres de marcas propietarias.
Saludos
Re: Lista de Contribuyentes con Obligación (LCO)
Publicado: Jue Feb 23, 2012 4:29 pm
por Stream
Por cierto, pensando en la cuestion de los certificados raiz, posiblemente estos XML LCO podrían estar firmados por un certificado raiz, de ser así, faltaría agregar una validacion más para verificar que un archivo XML LCO es valido y proviene del SAT, el framework MONO para .NET trae unas clases criptograficas para validar certificados raiz, tal ves sería interesante investigar que certificado raiz utilizo el SAT para generar estos archivos XML LCO y asi poder validar validarlos contra ese certificado raiz..
Igual si alguien sabe, que certificado es o de que pagina del SAT se puede obtener estaría genial!
Saludos