PERMISO Y EXENCIÓN DE RESPONSABILIDAD En este sitio web aparecen programas que pueden ser descargados. Estos programas están sujetos a derechos de reproducción y su dueño reclama derecho exclusivo sobre estos programas. El propietario de los programas que usted se descarga en este sitio web puede aparecer indicado en los ficheros READ-ME o dentro del código fuente. Por esta nota se permite el uso, copia, modificación y distribución de estos programas y su código fuente para uso no comercial y sin pago alguno, siempre que el dueño de los derechos u otras personas que contribuyan no se usen con fines publicitarios sin un previo permiso por escrito. El dueño de los derechos y las personas que han contribuido no garantizan que estos programas sean apropiados para uso alguno. Estos programas se distribuyen "tal cual" sin garantía explícita o implícita, incluyendo sin limitación las garantías implícitas de comerciabilidad y adecuación a un uso especifico. En ningún caso, el autor y los que han contribuido a estos programas, serán responsables de ningún daño directo, indirecto, incidental, especial, punitivo o consecuente causados por los programas (incluyendo sin limitación la pérdida de uso, datos, ganancias o interrupción de negocios) sea cual fuera su causa y bajo cualquier teoría de responsabilidad. AcceptCancel
Este ejemplo tiene como objetivo cifrar un documento XML mediante el servicio de cifrado de TrustedX. Para la comprensión de este ejemplo, se recomienda haber entendido previamente el ejemplo de Validación de un certificado X.509.
Para poder probar este ejemplo se debe descargar el archivo sampleAxis9.zip y seguir las instrucciones que se encuentran en Configuración del entorno.
El mecanismo utilizado para el cifrado de datos, sirve para asegurar la confidencialidad entre un emisor y un receptor. Este mecanismo, usa el par de claves proporcionados por la infraestructura PKI, es decir la clave privada y la clave pública.
En primer lugar hay que inicializar la conexión con el servicio web, en este caso el de DigitalEncryption, el cual permite realizar tanto cifrado como descifrado de datos.
TWSDELocator locatorDe = new TWSDELocator();
locatorDe.setDigitalEncryptionEndpointAddress(host);
DigitalEncryptionType det = locatorDe.getDigitalEncryption();
DEBindingStub bindingDe = (DEBindingStub) det;
UtilTrustedX.ssl_conf();
La petición de cifrado de datos se realiza mediante un objeto de tipo EncryptRequest, dentro del que se indica que el perfil para esta petición es xmlenc.
EncryptRequest er = new EncryptRequest();
er.setProfile(new URI(PROF_XML_ENCRYPT));
UtilTrustedX.addUsernameToken(bindingDe, user, password);
Los datos a cifrar deben ser incluidos dentro de la petición, en este ejemplo se introducen los datos codificados en Base64 en un objeto de tipo Document dentro de uno de tipo InputDocuments.
InputDocuments idoc = new InputDocuments();
Document doc = new Document();
doc.setBase64XML(Util.readBinaryFile(path_in + filename));
idoc.setDocument(doc);
er.setInputDocuments(idoc);
Opcionalmente la petición contiene información acerca de los destinatarios para los que se debe cifrar el mensaje. Para ello se crea en un objeto de tipo OptionalInputs, que contiene la información opcional de la petición. En este ejemplo se introduce un destinatario, éste se crea con un objeto RecipientType y se selecciona su identidad mediante su nombre distinguido.
OptionalInputs opt = new OptionalInputs();
RecipientType rt = new RecipientType();
KeySelector ks = new KeySelector();
NameIdentifierType nit = new NameIdentifierType(distinguishedName);
nit.setFormat(new URI(URI_DN));
ks.setName(nit);
rt.setKeySelector(ks);
Una vez seleccionado el destinatario se introduce en un objeto Recipients, que es el que incluirá la petición mediante el método setRecipients(). Adicionalmente se indica el formato en el que se retornan los datos, en este caso Base64.
Recipients r = new Recipients();
r.setRecipient(new RecipientType[]{rt});
opt.setRecipients(r);
opt.setReturnBase64XML("");
er.setOptionalInputs(opt);
Una vez se han introducido todos los datos en la petición, en este caso, se invoca la operación encrypt() que envía la petición de firma al host y recoge la respuesta en un objeto EncryptResponse.
EncryptResponse ers = bindingDe.encrypt(er);
Una vez envidada la petición se puede comprobar si ésta se ha procesado correctamente consultando los parámetros de la respuesta. Para ello se usan las funciones de la clase auxiliar UtilTrustedX. Si todo va bien se recuperan los datos cifrados y se almacenan en un fichero, en el ejemplo de Descifrado de XML se verá como se descifra su contenido. Para obtener los datos cifrados de la respuesta se utiliza el método getBase64XMLEnvelope(), estos datos estan contenidos dentro de un objeto de tipo EnvelopedObject.
if(UtilTrustedXAxis.check(ers.getResult(), bindingDe)){
byte[] data = ers.getEnvelopedObject().getBase64XMLEnvelope().get_value();
String destFilename = path_out + filename.substring(0, filename.lastIndexOf("."))
+ "Encrypted.xml";
Util.writeBinaryFile(destFilename, data);
}
Después de ejecutar el ejemplo se obtiene una respuesta como la siguiente y un archivo con el contenido cifrado.
File saved successfully on: data/output/DemoEncrypted.xml
|