在Java中有XADES-EPES的XML Sign的例子吗?
问题描述:
我尝试使用xades4j但该文档有点泛化。 在这一刻我有一个基本的标志方法,但没有得到我需要的xml标签。在Java中有XADES-EPES的XML Sign的例子吗?
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);
答
@mposadar您显示的代码似乎只能使用Apache圣所,这是xades4j底层库。上面分享的链接和https://github.com/luisgoncalves/xades4j/wiki应该让你开始。 – lgoncalves