Как подписывать XML без разрывов линии и места в мишени?

Я работаю она с электронным составлением фактуры Мексики, и чтобы отменять счет, нужно посылать xml, подписанный с certificado.cer и llave.key, проблемой дело в том, что подписав этот XML, он производится с разрывами линии.

если я снимаю эти разрывы линии, подписав XML, печать становится недействительной.

и если он послал xml с разрывами линии, они отвечают мне с ошибкой, произведенной разрывами линии.

Это код, с которым я произвожу подпись

*я произвожу подпись с API javax.xml.crypto

XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM");

    Reference ref = fac.newReference("", fac.newDigestMethod(DigestMethod.SHA1, null),
            Collections.singletonList(fac.newTransform(Transform.ENVELOPED, (TransformParameterSpec) null)),
            null, null);

    SignedInfo si = fac.newSignedInfo(fac.newCanonicalizationMethod(CanonicalizationMethod.INCLUSIVE,
            (C14NMethodParameterSpec) null),
            fac.newSignatureMethod(SignatureMethod.RSA_SHA1, null),
            Collections.singletonList(ref));


    X509Certificate cert = KeyLoaderFactory.createInstance(KeyLoaderEnumeration.PUBLIC_KEY_LOADER, new FileInputStream("C:\\Users\\Arturo\\Desktop\\PEMS\\Certificado\\00001000000201052508s.cer")).getKey();

    KeyInfoFactory kif = fac.getKeyInfoFactory();
    List x509Content = new ArrayList();

    X509IssuerSerial issuer = kif.newX509IssuerSerial(cert.getIssuerDN().getName(), cert.getSerialNumber());
    x509Content.add(issuer);
    x509Content.add(cert);
    X509Data xd = kif.newX509Data(x509Content);
    KeyInfo ki = kif.newKeyInfo(Collections.singletonList(xd));

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setNamespaceAware(true);
    Document doc = dbf.newDocumentBuilder().parse(new FileInputStream("C:\\Users\\Arturo\\Documents\\NetBeansProjects\\AdminFraccionamientoWeb1\\web\\assets\\Pdfs\\Cancel_" + UUID + ".xml"));

    PrivateKey privateKey = KeyLoaderFactory.createInstance(KeyLoaderEnumeration.PRIVATE_KEY_LOADER, new FileInputStream("C:\\Users\\Arturo\\Desktop\\PEMS\\Certificado\\DST1010185B7_1205102226S.key"), "Soporte1").getKey();

    DOMSignContext dsc = new DOMSignContext(privateKey, doc.getDocumentElement());

    XMLSignature signature = fac.newXMLSignature(si, ki);

    signature.sign(dsc);
    String Ruta = "C:\\Users\\Arturo\\Documents\\NetBeansProjects\\AdminFraccionamientoWeb1\\web\\assets\\Pdfs\\Cancel_signed" + UUID + ".xml";

    OutputStream os = new FileOutputStream(Ruta);
    TransformerFactory tf = TransformerFactory.newInstance();
    Transformer trans = tf.newTransformer();
    trans.transform(new DOMSource(doc), new StreamResult(os));

здесь - XML, который производит мне этот код

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>  
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>    
<Reference URI="">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/> </Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>DiLnrOczxtHVnhG4EA9zj0JM8O0=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>PrHxWCpnZlFi92ETs0JMnVML/FoUxQkktRT5UpU9W90DhKZFX31nFjwEtt3GBluz+xEdt+j4lmnd
JHdZbEynVwqsm5ZF2Y/Z34fn/f050pUXyjitlog8QWoKB+oCbaNW1L3+9VHyuKQ4t/1XbNt6RCgM
RkDEm4hDc6V55G/szIQ=
</SignatureValue>
<KeyInfo>
<X509Data>
<X509IssuerSerial>   
<X509IssuerName>OID.1.2.840.113549.1.9.2=Responsable: Cecilia Guillermina García   Guerra, OID.2.5.4.45=SAT970701NN3, L=Cuauhtémoc, ST=Distrito Federal, C=MX,   OID.2.5.4.17=06300, STREET="Av. Hidalgo 77, Col. Guerrero",   EMAILADDRESS=asisnet@sat.gob.mx, OU=Administración de Seguridad de la   Información, O=Servicio de Administración Tributaria, CN=A.C. del Servicio de   Administración Tributaria
</X509IssuerName>   
<X509SerialNumber>275106190557734483187066766774039086286478061624
</X509SerialNumber>
</X509IssuerSerial>  
<X509Certificate>
MIIErTCCA5WgAwIBAgIUMDAwMDEwMDAwMDAyMDEwNTI1MDgwDQYJKoZIhvcNAQEFBQAwggGVMTgw
NgYDVQQDDC9BLkMuIGRlbCBTZXJ2aWNpbyBkZSBBZG1pbmlzdHJhY2nDs24gVHJpYnV0YXJpYTEv
MC0GA1UECgwmU2VydmljaW8gZGUgQWRtaW5pc3RyYWNpw7NuIFRyaWJ1dGFyaWExODA2BgNVBAsM
L0FkbWluaXN0cmFjacOzbiBkZSBTZWd1cmlkYWQgZGUgbGEgSW5mb3JtYWNpw7NuMSEwHwYJKoZI
hvcNAQkBFhJhc2lzbmV0QHNhdC5nb2IubXgxJjAkBgNVBAkMHUF2LiBIaWRhbGdvIDc3LCBDb2wu
IEd1ZXJyZXJvMQ4wDAYREVMRDAUwNjMwMDELMAkGA1UEBhMCTVgxGTAXBgNVBAgMEERpc3RyaXRv
IEZlZGVyYWwxFDASBgNVBAcMC0N1YXVodMOpbW9jMRUwEwYDVQQtEwxTYYQ5NzA3MDFOTjMxPjA8
BgkqhkiG9w0BCQIML1Jlc3BvbnNhYmxlOiBDZWNpbGlhIEd1aWxsZXJtaW5hIEdhcmPDrWEgR3Vl
cnJhMB4XDTEyMDUxMTAzMzYyNloXDTE2MDUxMTAzMzYyNlowge4xMDAuBgNVBAMTJ0RFU0FSUk9M
TE9TIFkgU09MVUNJT05FUyBFTiBUSSBTQSBEIUJGVjEwMC4GA1UEKRMnREVTQVJST0xMT1MgWSBT
T0xVQ0lPTkVTIEVGFERLIFNBIERFIENWMTAwLgYDVQQKEydERVNBUlJPTExPUyBZIFNPTFVDSU9O
RVMgRU4gVEkgU0EgREUgQ1YxJTAjBgNVBC0THERTVDEwMTAxODVCNyAvIFJJSk82OTA1MDhUQzEx
HjAcBgNVBAUTFSAvIFJJWEo2OTA1MDhIWlNTWFIwNjEPMA0GA1UECxMGVW5pZGFkMIGfMA0GCSqG
SIb3DQEBAQUAA4GNADCBiQKBgQDQZhQqxDy8Z05TPsl+jWl02mufOmhO2gyfQ2fNyCdbdjDDX3Ro
yp/23TYv6GiITJrsnUrEgDN6WrFIyS906GvyUvzQ8yTDwJPcS3PPLeybKr45PQIs06pyX70bNCEa
hJE3Afx+0YxfgQcw4QuSJ3Gr0mQT1A7/N0Ol33iQgtTLeQIDAQABox0wGzAMBgNVHRMBAf8EAjAA
MAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQUFAAOCAQEAbkjSi+DlMH69RK7fFXDLvZYUX+4gvutp
X2ex4LU/qFZVw7lvIYWITeUqF2DmuRzNXKNQqgSSRwuOnU0/ipxjR9JL0JIlLgy71nMtwMyQUO8q
Ei/EihXg1XHtOvPSsnFigRunD8ziyDpz+2ozUZS969zjRbsve9J5J2ke3CirrIjOLQaYbWBngrdl
8pXJPaaElkB5ZwzRKAP94P14WPOioTSmkBbhChEJ6xZKFcDRySRfWAsXmss9CvBM3nMqPhFdw2kj
6Rr/NsST5PZtp5Olk1xBhrPj5MVTZmzLpDvTz6+wFwrn5ucrIkUL+Uk4ZGD0HnTZYEeCh+VPeyXe
Er5fAw==
</X509Certificate>
</X509Data>
</KeyInfo>
</Signature>

Поскольку возможно наблюдаться, у xml, что я произвожусь, есть (нежелательные) разрывы линии.

Он был бы благодарен за любую помощь, спасибо.

9
задан 10.05.2016, 22:55
2 ответа

Несколько часов спустя исследуя я нашел решение моей проблемы я надеюсь, что он подает его с чего-то до кого-то.

Просто мы должны распределять ему стоимость true в параметр ignoreLineBreaks так как из-за default Ваша стоимость false то, что он позволяет, что во время подписывания документа XML он добавил разрывы линии.

Здесь код, чтобы избегать того, чтобы добавились разрывы линии:

Field f = XMLUtils.class.getDeclaredField("ignoreLineBreaks");
f.setAccessible(true);
f.set(null, Boolean.TRUE);

И после мы можем подтверждать, что была распределена стоимость правильно со следующей линией:

System.err.println(XMLUtils.ignoreLineBreaks());
6
ответ дан 24.11.2019, 14:27
  • 1
    Возможно хочет добавить следующее свойство в JVM: -Dcom.sun.org.apache.xml.internal.security.ignoreLineBreaks=true. Или quiz и # 225; s System.setProperty("org.apache.xml.security.ignoreLineBreaks", "true");. –  Paul Vargas 12.05.2016, 17:36
  • 2
    Любой двух, вместо того, чтобы использовать Reflection API для конфигурировать эта стоимость. –  Paul Vargas 12.05.2016, 17:46
  • 3
    К несчастью ни один из двух выборов, что ты предлагаешь мне, не функционировал. –  Juaxn Arturo Sanchez 13.05.2016, 00:42
  • 4
    Извинение я с темой cancelació n Счета, ты мог бы помогать мне с классами, которые ты используешь для подписи, из-за которой, создав mí меня бросает ошибка, которой он не vá lida подпись, или в Вашем недостатке предоставлять мне страницу validador подписи с XML. –  Oscar Eduardo 02.11.2017, 20:56

Обработай информацию используя свойство OutputKeys.INDENT:

 Transformer trans = tf.newTransformer();
 trans.setOutputProperty(OutputKeys.INDENT, "yes");

INDENT: определи, если трансформатор может добавлять место в добавочной мишени, когда будет выражено дерево результатов; стоимость должна быть"yes"o"no".

3
ответ дан 24.11.2019, 14:27
  • 1
    #191; Java 1.4? Мы в в и # 241; или 2016 с Java 7, обесцененные, Java 8 во всем Вашем esplandor и Java 9 очень близко. –   10.05.2016, 23:06
  • 2
    Спасибо за Elenasys ответил, но уже я протестировал propiedead IDENT и оно не функционирует, так как он продолжает производить XML с разрывами линии. –  Juaxn Arturo Sanchez 11.05.2016, 18:44