Cómo usar PGP en Camel Routes

Apache Camel es un poderoso marco de enrutamiento empresarial que se puede usar para enviar información de cualquier manera, con casi cualquier protocolo que desee usar. Y...

Apache Camello es un poderoso marco de enrutamiento empresarial que se puede usar para enviar información de cualquier manera, con casi cualquier protocolo que desee usar. Y no es ningún secreto lo importante que es el cifrado, por lo que usar los dos juntos tiene sentido.

PGP, en concreto, significa "Pretty Good_Privacy" y se ha convertido en uno de los algoritmos de cifrado más populares en los últimos años. A menudo se usa para firmar, cifrar y descifrar cualquier tipo de datos, incluidos texto, correos electrónicos o incluso una partición de disco completa.

El Código

Y ahora vamos con el código:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// Public Key FileName
final String keyFileName = "/path/to/public.gpg";

// Private Key FileName
final String keyFileNameSec = "/path/to/private.gpg";

// Keyring Userid Used to Encrypt
final String keyUserid = "userid_for_key";

// Private key password
final String keyPassword = "sooper_sekret_pass";

CamelContext context = new DefaultCamelContext();

context.addRoutes(new RouteBuilder() {
    public void configure() {
        from("stream:in")
          .multicast().to("direct:original", "direct:encrypt");

        // Save the original input
        from("direct:original")
          .to("file:C:\\Users\\srobin\\Desktop\\crypto?fileName=original.txt");
      
        // Encrypts and saves the input
        from("direct:encrypt")
          .marshal().pgp(keyFileName, keyUserid)
          .multicast()
          .to("direct:unencrypt", "file:C:\\Users\\srobin\\Desktop\\crypto?fileName=encrypted.txt");
      
        // Decrypts and saves the output
        from("direct:unencrypt")
          .unmarshal().pgp(keyFileNameSec, keyUserid, keyPassword)
          .to("file:C:\\Users\\srobin\\Desktop\\crypto?fileName=unencrypted.txt");
    }
});

Este ejemplo simple es principalmente una prueba de concepto para mostrar cómo puede cifrar y descifrar datos utilizando PGP y Camel, pero explica cómo lo usaría en un sistema real.

Esencialmente, lo que hace el código anterior es tomar datos de la entrada stream y dirigirlos a dos rutas diferentes. La primera es la ruta direct:original, que simplemente guarda la entrada en un archivo para que pueda verla más tarde.

La segunda ruta a la que se envía es direct:encrypt, que luego ordena los datos utilizando el algoritmo PGP y la clave que proporcionamos. A partir de ahí, el resultado se guarda en un archivo para que pueda inspeccionar los datos cifrados y se envía a otra ruta que realmente los descifrará (para que pueda ver todo el proceso).

La ruta final, direct:unencrypt, solo toma los datos cifrados con nuestra clave pública y los descifra con nuestra clave secreta, y finalmente los guarda en un archivo.

Dado que los datos se guardan en cada punto de la ruta, puede verificar que los datos estén encriptados y desencriptados.

Si está utilizando Maven, no olvide agregar lo siguiente a su POM:

1
2
3
4
5
<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-crypto</artifactId>
  <version>2.9.0</version>
</dependency>

Recursos