2016-12-05 3 views
0

J'essaie d'utiliser xades4j mais la documentation est un peu généralisée. en ce moment, j'ai une méthode de base de signe, mais ne recevez pas les balises xml dont j'ai besoin.Y at-il un bon exemple là-bas pour XML Sign avec XADES-EPES en Java?

KeyStore ks = KeyStore.getInstance(KEYSTORE_TYPE); 

    ks.load(new FileInputStream(KEYSTORE_FILE), KEYSTORE_PASSWORD.toCharArray()); 

    PrivateKey privateKey = (PrivateKey) ks.getKey(PRIVATE_KEY_ALIAS, PRIVATE_KEY_PASSWORD.toCharArray()); 

    File signatureFile = new File("./invoice.xml"); 

    String baseURI = signatureFile.toURL().toString(); // BaseURI para las URL Relativas. 

    // Instanciamos un objeto XMLSignature desde el Document. El algoritmo de firma será DSA 
    // Signature - Required DSAwithSHA1 (DSS) 
    XMLSignature xmlSignature = new XMLSignature(document, baseURI, XMLSignature.ALGO_ID_SIGNATURE_DSA); 

    // Añadimos el nodo de la firma a la raiz antes de firmar. 
    // Observe que ambos elementos pueden ser mezclados en una forma con referencias separadas 
    document.getDocumentElement().appendChild(xmlSignature.getElement()); 

    // Creamos el objeto que mapea: Document/Reference 
    Transforms transforms = new Transforms(document); 
    transforms.addTransform(Transforms.TRANSFORM_BASE64_DECODE); // TRANSFORM_ENVELOPED_SIGNATURE 

    // Añadimos lo anterior Documento/Referencia 
    // ALGO_ID_DIGEST_SHA1 = "http://www.w3.org/2000/09/xmldsig#sha1"; 
    xmlSignature.addDocument("", transforms, Constants.ALGO_ID_DIGEST_SHA1); 

    // Añadimos el KeyInfo del certificado cuya clave privada usamos 
    X509Certificate cert = (X509Certificate) ks.getCertificate(PRIVATE_KEY_ALIAS); 
    xmlSignature.addKeyInfo(cert); 
    xmlSignature.addKeyInfo(cert.getPublicKey()); 

    // Realizamos la firma 
    xmlSignature.sign(privateKey); 

Répondre