Ejemplo n.º 1
0
def create_tra(service=SERVICE, ttl=2400):
    "Crear un Ticket de Requerimiento de Acceso (TRA)"
    tra = SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?>'
                           '<loginTicketRequest version="1.0">'
                           "</loginTicketRequest>")
    tra.add_child("header")
    # El source es opcional. Si falta, toma la firma (recomendado).
    # tra.header.addChild('source','subject=...')
    # tra.header.addChild('destination','cn=wsaahomo,o=afip,c=ar,serialNumber=CUIT 33693450239')
    tra.header.add_child("uniqueId", str(date("U")))
    tra.header.add_child("generationTime", str(date("c", date("U") - ttl)))
    tra.header.add_child("expirationTime", str(date("c", date("U") + ttl)))
    tra.add_child("service", service)
    return tra.as_xml()
Ejemplo n.º 2
0
def create_tra(service=SERVICE,ttl=2400):
    "Crear un Ticket de Requerimiento de Acceso (TRA)"
    tra = SimpleXMLElement(
        '<?xml version="1.0" encoding="UTF-8"?>'
        '<loginTicketRequest version="1.0">'
        '</loginTicketRequest>')
    tra.add_child('header')
    # El source es opcional. Si falta, toma la firma (recomendado).
    #tra.header.addChild('source','subject=...')
    #tra.header.addChild('destination','cn=wsaahomo,o=afip,c=ar,serialNumber=CUIT 33693450239')
    tra.header.add_child('uniqueId',str(date('U')))
    tra.header.add_child('generationTime',str(date('c',date('U')-ttl)))
    tra.header.add_child('expirationTime',str(date('c',date('U')+ttl)))
    tra.add_child('service',service)
    return tra.as_xml()
Ejemplo n.º 3
0
def create_tra(service=None, ttl=2400, cert=None):
    "Create a Access Request Ticket (TRA)"
    # Base TRA squeleton (Ticket de Requerimiento de Acceso)
    tra = SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?>'
                           '<loginTicketRequest version="1.0">'
                           '</loginTicketRequest>')
    tra.add_child('header')
    # get the source from the certificate subject, ie "CN=empresa, O=dna, C=py"
    if cert:
        crt = xmlsec.x509_parse_cert(cert)
        tra.header.add_child('source', crt.get_subject().as_text())
    tra.header.add_child('destination', 'C=py, O=dna, OU=sofia, CN=wsaatest')
    d = int(time.mktime(datetime.datetime.now().timetuple()))
    tra.header.add_child('uniqueId', str(d))
    date = lambda ts: datetime.datetime.fromtimestamp(ts).isoformat()
    tra.header.add_child('generationTime', str(date(d - ttl)))
    tra.header.add_child('expirationTime', str(date(d + ttl)))
    tra.add_child('service', service)
    return tra.as_xml()
Ejemplo n.º 4
0
def create_tra(service=None, ttl=2400, cert=None):
    "Create a Access Request Ticket (TRA)"
    # Base TRA squeleton (Ticket de Requerimiento de Acceso)
    tra = SimpleXMLElement(
        '<?xml version="1.0" encoding="UTF-8"?>'
        '<loginTicketRequest version="1.0">'
        '</loginTicketRequest>')
    tra.add_child('header')
    # get the source from the certificate subject, ie "CN=empresa, O=dna, C=py"
    if cert:
        crt = xmlsec.x509_parse_cert(cert)
        tra.header.add_child('source', crt.get_subject().as_text())
    tra.header.add_child('destination', 'C=py, O=dna, OU=sofia, CN=wsaatest')
    d = int(time.mktime(datetime.datetime.now().timetuple()))
    tra.header.add_child('uniqueId', str(d))
    date = lambda ts: datetime.datetime.fromtimestamp(ts).isoformat()
    tra.header.add_child('generationTime', str(date(d-ttl)))
    tra.header.add_child('expirationTime', str(date(d+ttl)))
    tra.add_child('service', service)
    return tra.as_xml()
Ejemplo n.º 5
0
# leer el certificado (PEM) del emisor y agregarlo 
cert_lines = open("certificado.crt").readlines()
cert_pem =  ''.join([line for line in cert_lines
                          if not line.startswith("---")])
setattr(caratula, "DGICFE:X509Certificate", cert_pem)

# preparar la plantilla para la info de firma con los namespaces padres (CFE)
plantilla = SimpleXMLElement(xmlsec.SIGN_ENV_TMPL)
plantilla["xmlns:DGICFE"] = plantilla["xmlns:ns0"] = "http://cfe.dgi.gub.uy"
plantilla["xmlns:xsi"] = "http://www.w3.org/2001/XMLSchema-instance"
#plantilla["xsi:schemaLocation"] = "http://cfe.dgi.gub.uy EnvioCFE_v1.11.xsd"

# firmar el CFE, reemplazar valores en la plantilla y agregar la firma al CFE
# NOTA: para verificar la firma usar la plantilla RSA para KeyInfo (comentado)
vars = xmlsec.rsa_sign(cfe.as_xml(), '', "private.key", "password",
                       sign_template=plantilla.as_xml(), c14n_exc=False,
                       cert="".join(cert_lines),
                       key_info_template=xmlsec.KEY_INFO_X509_TMPL,
                       #key_info_template=xmlsec.KEY_INFO_RSA_TMPL,
                      )
firma_xml = (xmlsec.SIGNATURE_TMPL % vars)
cfe("ns0:CFE").import_node(SimpleXMLElement(firma_xml))

# guardo el xml firmado para depuración
open("test.xml", "w").write(cfe.as_xml())
print cfe.as_xml()

# serializar CDATA según el ejemplo
cdata = xml.dom.minidom.CDATASection()
cdata.data = cfe.as_xml()
Ejemplo n.º 6
0
# leer el certificado (PEM) del emisor y agregarlo
cert_lines = open("certificado.crt").readlines()
cert_fmt = [line for line in cert_lines if not line.startswith("---")]
cert_pem =  ''.join(cert_fmt)
setattr(caratula, "DGICFE:X509Certificate", cert_pem)


cfeXML = cfe("ns0:CFE")

# preparar la plantilla para la info de firma con los namespaces padres (CFE)

plantilla = SimpleXMLElement(xmlsec.SIGN_ENV_TMPL)
plantilla["xmlns:DGICFE"] = plantilla["xmlns:ns0"] = "http://cfe.dgi.gub.uy"

vars = xmlsec.rsa_sign(cfeXML.write_c14n(), '', "private.key", 'la passphrase',
                   sign_template=plantilla.as_xml(), c14n_exc=False,
                   cert=''.join(cert_lines),
                   key_info_template=xmlsec.KEY_INFO_X509_TMPL,
                   #key_info_template=xmlsec.KEY_INFO_RSA_TMPL,
                  )

firma_xml = (xmlsec.SIGNATURE_TMPL % vars)
cfeXML.import_node(SimpleXMLElement(firma_xml))

# guardo el xml firmado para depuración
open("cfe_firmado.xml", "w").write(cfe.as_xml())

# serializar CDATA según el ejemplo
cdata = xml.dom.minidom.CDATASection()
cdata.data = cfeXML.as_xml()
Ejemplo n.º 7
0
# leer el certificado (PEM) del emisor y agregarlo
cert_lines = open("certificado.crt").readlines()
cert_pem = ''.join([line for line in cert_lines if not line.startswith("---")])
setattr(caratula, "DGICFE:X509Certificate", cert_pem)

# preparar la plantilla para la info de firma con los namespaces padres (CFE)
plantilla = SimpleXMLElement(xmlsec.SIGN_ENV_TMPL)
plantilla["xmlns:DGICFE"] = plantilla["xmlns:ns0"] = "http://cfe.dgi.gub.uy"
plantilla["xmlns:xsi"] = "http://www.w3.org/2001/XMLSchema-instance"
#plantilla["xsi:schemaLocation"] = "http://cfe.dgi.gub.uy EnvioCFE_v1.11.xsd"

# firmar el CFE, reemplazar valores en la plantilla y agregar la firma al CFE
# NOTA: para verificar la firma usar la plantilla RSA para KeyInfo (comentado)
vars = xmlsec.rsa_sign(
    cfe.as_xml(),
    '',
    "private.key",
    "password",
    sign_template=plantilla.as_xml(),
    c14n_exc=False,
    cert="".join(cert_lines),
    key_info_template=xmlsec.KEY_INFO_X509_TMPL,
    #key_info_template=xmlsec.KEY_INFO_RSA_TMPL,
)
firma_xml = (xmlsec.SIGNATURE_TMPL % vars)
cfe("ns0:CFE").import_node(SimpleXMLElement(firma_xml))

# guardo el xml firmado para depuración
open("test.xml", "w").write(cfe.as_xml())
print cfe.as_xml()