ADC

Ejemplo 10: Cifrado RSA basado en directivas

El algoritmo RSA utiliza la función PKEY_ENCRYPT_PEM () para cifrar el contenido de encabezado o cuerpo predefinido de HTTP y definido por el usuario. La función solo acepta claves públicas RSA (no claves privadas) y los datos cifrados no pueden superar la longitud de la clave pública. Cuando los datos que se cifran son más cortos que la longitud de la clave, el algoritmo utiliza el método de relleno RSA_PKCS1.

En un caso de ejemplo, la función se puede utilizar con la función B64ENCODE () en una acción de reescritura para reemplazar un valor de encabezado HTTP por un valor cifrado con una clave pública RSA. A continuación, el destinatario descifra los datos que se están cifrando mediante la clave privada RSA.

Puede implementar la función mediante una directiva de reescritura. Para ello, debe completar las siguientes tareas:

  1. Agregue la clave pública RSA como expresión de directiva.
  2. Crea una acción de reescritura.
  3. Cree una directiva de reescritura.
  4. Enlazar la directiva de reescritura como global.
  5. Verificar el cifrado RSA

Cifrado RSA basado en directivas mediante la interfaz de comandos de NetScaler

Complete las siguientes tareas para configurar el cifrado RSA basado en directivas mediante la interfaz de comandos de NetScaler.

Para agregar la clave pública RSA como expresión de directiva mediante la interfaz de comandos de NetScaler:

add policy expression pubkey '"-----BEGIN RSA PUBLIC KEY-----MIGJAoGBAKl5vgQEj73Kxp+9yn1v5gPR1pnc4oLM2a0kaWwBOsB6rzCIy6znwnvwCY1xRvQhRlJSAyJbloL7wZFIJ2FOR8Cz+8ZQWXU2syG+udi4EnWqLgFYowF9zK+o79az597eNPAjsHZ/C2oL/+6qY5a/f1z8bQPrHC4GpFfAEJhh/+NnAgMBAAE=-----END RSA PUBLIC KEY-----"'
<!--NeedCopy-->

Para agregar una acción de reescritura para cifrar una solicitud de encabezado HTTP mediante la interfaz de comandos de NetScaler:

add rewrite action encrypt_act insert_http_header encrypted_data

HTTP.REQ.HEADER("data_to_encrypt").PKEY_ENCRYPT_PEM(pubkey).B64ENCODE

Para agregar una directiva de reescritura mediante la interfaz de comandos de NetScaler:

add rewrite policy encrypt_pol 'HTTP.REQ.HEADER("data_to_encrypt").EXISTS' encrypt_act
<!--NeedCopy-->

Para vincular la directiva de reescritura a nivel global mediante la interfaz de comandos de NetScaler:

bind rewrite global encrypt_pol 10 -type RES_DEFAULT

Para verificar el cifrado RSA mediante la interfaz de comandos de NetScaler:

>curl -v -H "data_to_encrypt: Now is the time that tries men's souls" http://10.217.24.7/`

* About to connect() to 10.217.24.7 port 80 (#0)

*  Trying 10.217.24.7...

*  connected

*  Connected to 10.217.24.7 (10.217.24.7) port 80 (#0)

> GET / HTTP/1.1
> User-Agent: curl/7.24.0 (amd64-portbld-freebsd8.4) libcurl/7.24.0 OpenSSL/0.9.8y zlib/1.2.3
> Host: 10.217.24.7
> Accept: \*/\*
> data_to_encrypt: Now is the time that tries men's souls
>
< HTTP/1.1 200 OK
< Date: Mon, 09 Oct 2017 05:22:37 GMT
< Server: Apache/2.2.24 (FreeBSD) mod_ssl/2.2.24 OpenSSL/0.9.8y DAV/2
< Last-Modified: Thu, 20 Feb 2014 20:29:06 GMT
< ETag: "6bd9f2-2c-4f2dc5b570880"
< Accept-Ranges: bytes
< Content-Length: 44
< Content-Type: text/html
< encrypted_data: UliegKBJqZd7JdaC49XMLEK1+eQN2rEfevypW91gKvBVlaKM9N9/C2BKuztS99SE0xQaisidzN5IgeIcpQMn+CiKYVlLzPG1RuhGaqHYzIt6C8A842da7xE4OlV5SHwScqkqZ5aVrXc3EwtUksna7jOLr40aLeXnnB/DB11pUAE=
<
* Connection #0 to host 10.217.24.7 left intact
<html><body><h1>It works!</h1></body></html>* Closing connection #0

<!--NeedCopy-->

La ejecución posterior de este comando curl con los mismos datos para cifrar muestra que los datos cifrados son diferentes en cada ejecución. Esto se debe a que el relleno inserta bytes aleatorios al principio de los datos que se van a cifrar, lo que hace que los datos cifrados sean diferentes cada vez.

>curl -v -H "data_to_encrypt: Now is the time that tries men's souls" http://10.217.24.7/`

< encrypted_data: DaOjtl1Pl4DlQKf58MMeL4cFwFvZwhjMqv5aUYM5Iyzk4UpwIYhpRvgTNu2lXEVc1H0tcR1EGC/ViQncLc4EbTurCWLbzjce3+fknnMmzF0lRT6ZZXWbMvsNFOxDA1SnuAgwxWXy/ooe9Wy6SYsL2oi1sr5wTG+RihDd9zP+P14=

>curl -v -H "data_to_encrypt: Now is the time that tries men's souls" http://10.217.24.7/

. . .

< encrypted_data: eej6YbGP68yHn48qFUvi+fkG+OiO8j3yYLScrRBU+TPQ8WeDVaWnDNAVLvL0ZYHHAU1W2YDRYb+8cdKHLpW36QbI6Q5FfBuWKZSI2hSyUvypTpCoAYcHXFv0ns+tRtg0EPNNj+lyGjKQWtFi6K8IXXISoDy42FblKIlaA7gEriY=
<!--NeedCopy-->

Cifrado RSA basado en directivas mediante la interfaz gráfica de usuario

La GUI le permite completar las siguientes tareas:

Para agregar la clave pública RSA como expresión de directiva mediante la interfaz gráfica de usuario:

  1. Inicie sesión en el dispositivo NetScaler y vaya aConfiguraciones>AppExpert > Expresiones avanzadas.
  2. En el panel de detalles, haga clic en Agregar para definir una clave pública RSA como expresión de directiva avanzada.
  3. En la página Crear expresión, defina los siguientes parámetros:
    1. Nombre de la expresión. Nombre de la expresión avanzada.
    2. Expression. Defina la clave pública RSA como una expresión avanzada mediante el Editor de expresiones.
    3. Comentarios. Breve descripción de la expresión.
  4. Haga clic en Crear.

Para agregar una acción de reescritura para cifrar una solicitud de encabezado HTTP mediante lainterfaz gráfica de usuario:

  1. Inicie sesión en el dispositivo NetScaler y vaya aConfiguraciones>AppExpert > Reescritura** > Acciones.**
  2. En el panel de detalles, haga clic en Agregar para agregar una acción de reescritura.
  3. En la pantalla Crear acción de reescritura, defina los siguientes parámetros:
    1. Nombre. Nombre de la acción de reescritura.
    2. Tipo. Seleccione el tipo de acción como INSERT_HTTP_HEADER.
    3. Use el tipo de acción para insertar un encabezado. Introduzca el nombre del encabezado HTTP que debe reescribirse.
    4. Expression. Nombre de la expresión de directiva avanzada asociada a la acción.
    5. Comentarios. Breve descripción de la acción de reescritura.
  4. Haga clic en Crear.

Para agregar una directiva avanzada de reescritura mediante la interfaz gráfica de usuario:

  1. Inicie sesión en el dispositivo NetScaler y vaya aConfiguraciones>AppExpert > Reescritura** > Directivas.**
  2. En la página Directivas de reescritura, haga clic en Agregar para agregar una directiva de reescritura.
  3. En la página Crear directiva de reescritura, defina los siguientes parámetros:
    1. Nombre. Nombre de la directiva de reescritura.
    2. Acción. Nombre de la acción de reescritura que se realizará si la solicitud o la respuesta coinciden con esta directiva de reescritura.
    3. Acción de registro. Nombre de la acción de registro de mensajes que se utilizará cuando una solicitud coincida con esta directiva.
    4. Acción de resultado indefinido. Acción a realizar si el resultado de la evaluación de la directiva no está definido.
    5. Expression. Nombre de la expresión de directiva avanzada que activa la acción.
    6. Comentarios. Breve descripción de la acción de reescritura.
  4. Haga clic en Crear.

Para vincular la directiva de reescritura a nivel global mediante la GUI:

  1. Inicie sesión en el dispositivo NetScaler y vaya aConfiguraciones>AppExpert > Reescritura** > Directivas.**
  2. En la pantalla Directivas de reescritura, seleccione la directiva de reescritura que desee vincular y haga clic en Administrador de directivas.
  3. En la página Rewrite Policy Manager, en la sección Enlazar puntos, defina los siguientes parámetros:
    1. Punto de enlace. Seleccione el punto de enlace como Global predeterminado.
    2. Protocolo. Seleccione el tipo de protocolo como HTTP.
    3. Tipo de conexión. Seleccione el tipo de conexión como Solicitud.
    4. Haga clic en Continuar para ver la sección Vinculación de directivas .
    5. En la sección Encuadernación de directivas, seleccione la directiva de reescritura y defina los parámetros de enlace.
  4. Haga clic en Bind.
Ejemplo 10: Cifrado RSA basado en directivas