Foro en Español

Reply

Ideas prácticas trabajando con ClearPass

En este post iremos recopilando algunas ideas y propuestas prácticas a la hora de trabajar con ClearPass con sugerencias y algunas configuraciones relativamente especiales que surgen en determinados momentos.

Cada idea será incluida como respuesta a este hilo.


Rafael del Cerro Flores
ACMP, ACCP, ACDX#324, ACCX#711

Cambiar fuente tipográfica en portales cautivos

En algunas ocasiones se ha solicitado cambiar la fuente tipográfica de los portales cautivos. Esto no tiene mayor complicación si se tratan de fuentes específicas no estandar (es decir, fuentes que hayan creado las empresas). Pongamos por ejemplo que queremos crear un portal cautivo con la fuente tipográfica usada en el Mundial de Rusia 2018 (no es la más legible, pero sirve como ejemplo).

2018-FIFA-World-Cup-Russia-Font.png

Si se tratan fuentes específicas no estandar necesitamos los ficheros fuentes "ttf" o "woff". En nuestro caso lo haremos solo con el fichero ttf.

Lo primero será subir la fuente al administrador de Contenidos de ClearPass:

Screen Shot 2018-06-27 at 13.06.44.pngEn este caso solo he usado el fichero ttf.

Ahora en el portal cautivo que queremos cambiar la fuente, vamos a editar el código de la Cabecera HTML y añadimos lo siguiente:

{literal}
<style>
@font-face {
font-family: "font-mundial";
src: url("/guest/public/fonts/fifa_world_cup_2018.ttf") format('truetype');
}
*,p{
font-family: "font-mundial";
}
</style>
{/literal}

En la primera parte vamos a llamar al fichero que hemos subido antes y definirlo como format "truetype" si se trata de "tff". Si tenemos los otros formatos, debemos definirlos de acuerdo al estandar html. Se define como @font-face con un nombre personalizado dentro de la etiqueta "font-family".

En la segunda parte, definimos a qué etiquetas HTML queremos que afecte este cambio de fuente. Como vemos, está puesto para todo (*) y en concreto además para los párrafos (p). Debemos poner el nombre que hayamos definido anteriormente en el campo "font-family".

Cuando cargamos la página del portal cautivo, veremos que se muestra con la tipología que se ha subido:

Screen Shot 2018-06-27 at 13.13.52.png

 


Rafael del Cerro Flores
ACMP, ACCP, ACDX#324, ACCX#711

Añadir certificados a la Trust List de forma sencilla

En algunos casos tenemos que añadir certificados a ClearPass en la Trust List para que éste pueda comunicarse con servicios externos, como por ejemplo cuando se hacen integraciones con pasarelas de correo de electrónico (Office365, Gmail...) o como cuando se pretende enviar información a un Endpoint Context Server.

Para que esta comunicación funcione es necesario cargar los certificados en ClearPass y a menudo ha sido complejo exportar el certificado (fichero .crt) del otro servidor, guardarlo en el ordenador y posteriormente importarlo en ClearPass.

Existe un pequeño truco que nos puede ayudar a que el sistema lo haga de forma automática.

Para ello supongamos que queremos integrar ClearPass con la pasarela de correo de Gmail. Cuando miramos la documentación de Google vemos que requiere usar el servidor smtp: smtp.gmail.com, así que necesitamos el certificado de gmail.com en ClearPass.

Primero vamos a Administration > External Servers > Endpoint Context Servers > Add y añadimos estos datos:

Screen Shot 2018-07-05 at 11.51.31.pngImportante seleccionar:

  • Tipo de servidor: HTTP Genérico
  • Nombre del servidor: poner el dominio del cual queremos obtener el certificado, en este caso: gmail.com

Aquí viene el truco: seleccionar la casilla "Validate Server, Enable to validate the server certificate". Cuando se activa, ClearPass comenzará a capturar el certificado en background y al cabo de unos segundos veremos que aparece una pestaña nueva con el certificado:

with certificate.pngSi vamos a la pestaña, vemos el certificado que va a instalar ClearPass:

Screen Shot 2018-07-05 at 11.54.21.png

Como punto final y muy importante, le damos a "Save" para que ClearPass guarde el certificado.

Ahora, si vamos al menú de Trust List veremos el certificado instalado y activado en el sistema:

Screen Shot 2018-07-05 at 11.56.43.png

A partir de ahora ya tenemos el certificado instalado y listo para usarlo, no hemos tenido que descargar el fichero a mano ni hacer cosas complicadas con openssl :)

Nota final: Por limpieza ya podemos borrar el "Endpoint Context Server" que hemos creado para descargar el certificado, el certificado seguirá instalado en el sistema para su uso.


Rafael del Cerro Flores
ACMP, ACCP, ACDX#324, ACCX#711

Consulta grupos anidados desde clearpass

Buenas;

 

 En varios proyectos me han llegado a solicitar consultas anidadas de los usuarios. Encontre un documento el cual siempre lo consulto y funciona a la perfeccion para poder realizar estos trabajos. 

 

Como consejo lo unico que se debe modificar que no viene en el documento es el parametro de time out sobre el active directory. La respuesta del active directory en algunos casos es elevada y se soluciona aumentando el tiempo de dicha parametro.

 

Espero que sea de ayuda.

 

Un saludo.

Angel De la Encarnacion

ACMP, ACCP, ACDX #544, ACSA

Obtener atributos de Endpoints en Portales Cautivos

Para un caso práctico que hemos tenido que solucionar en las últimas semanas ha hecho falta sacar en un portal cautivo los atributos que tenga asociados los Endpoints que están conectados. 

Por ejemplo si queremos obtener alguno de estos atributos que están en el sistema, ya sean los que vienen por defecto como los que se añaden de forma personalizada, podemos obtenerlos mediante Smarty.

Para ver los atributos que tiene asociado un Endpoint a modo de debug, podemos meter este código en el portal:

{dump var=$_endpoint export=html}

Esto nos dará un dump para que luego lo podamos personalizar:

Screen Shot 2018-10-04 at 06.01.57.png

En nuestro caso si por ejemplo queremos sacar los atributos Description, Fecha_compra y Location que tiene el Endpoint, debemos meter este código en el Portal Cautivo:

<p>Descripcion: {$_endpoint.Description}</p>
<p>Ubicacion: {$_endpoint.Location}</p>
<p>Fecha de Compra: {$_endpoint.Fecha_compra}</p>

El resultado en el portal será el siguiente:

Screen Shot 2018-10-04 at 06.04.04.png

Los portales cautivos saben que deben sacar esos datos del Endpoint porque en la URL viene dicha variable cuando el dispositivo es redireccionado a dicho portal:

https://10.150.0.42/guest/prueba.php?_browser=1&mac=b827eba4889e

Nota: Si se tratan de atributos personalizados (no los que vienen por defecto en ClearPass, deben tener guión bajo ("_") como separador, no vale el guión medio ("-").


Rafael del Cerro Flores
ACMP, ACCP, ACDX#324, ACCX#711
Highlighted

OnBoarding de certificados mediante la API de ClearPass

Aunque se ha comentado muchas veces la flexibilidad de la API de ClearPass, una opción disponible es a provisión de certificados mediante consultas y así podemos hacer OnBoarding de dispositivos de forma totalmete personalizada. En este ejemplo vamos a preparar un certificado por la API para una raspberry, consiguiendo que realice autenticación con certificado de forma posterior.

Para ello, lo que he hecho ha sido preparar un script en Python que ejecuta varias llamadas a la API, en este orden:

Crear un certificado

Para crear el certificado vamos a necesitar algunos campos mínimos que se han de incluir, en este caso son los siguientes:

 

ca_id=2

datos = {
"ca_id":ca_id,
"cert_type":"tls-client",
"country":"es",
"state":"Spain",
"locality":"Madrid",
"organization":"Aruba Spain",
"common_name":"rafael",
"email_address":"rafael.....@hpe.com",
"key_type":"rsa_1024",
"mac_address":"b8:27:eb:a4:88:9e",
"device_type":"Linux",
"user_name":"rafael",
"device_name":"raspberry"
}

datos=json.dumps(datos)

url = "https://<ClearPass>/api/certificate/new"
response = requests.post(url, headers=headers, verify=False, data = datos)
respuesta = json.loads(response.text)
csr_id = str(respuesta["id"])

 

Esta llamada devolverá un el ID del certificado creado (guardado en la variable "csr_id", nos hará falta para los siguientes pasos. 

 

Firmar el certificado

Para firmarlo, debemos hacer una llamada incluyendo en la URL el ID del certificado anterior e incluir las cabeceras de confirmación.

 

url2 = "https://<ClearPass>/api/certificate/"+csr_id+"/sign"
datos = {
	"ca_id":ca_id,"days":"365","confirm_sign":True
}
datos=json.dumps(datos)
response = requests.post(url2, headers=headers, verify=False, data = datos)
respuesta2 = json.loads(response.text)

Vamos a crear un fichero llamado demofile.pem que contendrá el certificado en formato *.pem que se ha firmado.

En este momento ya tenemos el certificado en ClearPass firmado y listo:

certificado.png

También podemos ver todo el detalle del mismo y del tipo de dispositivo:

certificado-device.png

 

 

Descarga del certificado firmado

Una vez que está firmado, se descargará el certificado en formato *.p12 con la clave que establezcamos.

 

url2 = "https://<ClearPass/api/certificate/"+csr_id+"/export"
datos = {
	"export_format":"p12",
	"include_chain":True,
	"export_password":"aruba",
	"export_password2":"aruba"
}
datos=json.dumps(datos)
response = requests.post(url2, headers=headers, verify=False, data = datos)

p12=response.content
f = open("/home/pi/certs/demofile.p12", "wb")
f.write(p12)
f.close()

El certificado lo guardaremos de momento en el fichero demofile.p12.

 

 

Descarga del certificado de servidor

Para efectuar una autenticación segura, el cliente tendrá el certificado de la CA que usará para validar al RADIUS en el proceso de validación. 

 

url3 = "https://<ClearPass/api/server-cert/1"
datos = {
}
datos=json.dumps(datos)
response = requests.get(url3, headers=headers, verify=False)
respuesta3 = json.loads(str(response.text))


cadena=respuesta3["cert_file"]
#cadena = cadena[0]["certificate_pem"]

f = open("/home/pi/certs/ca.pem", "w")
f.write(str(cadena))
f.close()

El certificado de la CA será guardado en el archivo ca.pem.

 

 

Extracción de certificados

En esta fase se extraerá el certificado privado y público para el cliente. Se han usado librerías de Python en este caso:

 

from OpenSSL import crypto
p12 = crypto.load_pkcs12(file("/home/pi/certs/demofile.p12", 'rb').read(), "aruba")
f = open("/home/pi/certs/key.pem", "wb")
f.write(crypto.dump_privatekey(crypto.FILETYPE_PEM, p12.get_privatekey()))
f.close()
f = open("/home/pi/certs/client.pem", "wb")
f.write(crypto.dump_certificate(crypto.FILETYPE_PEM, p12.get_certificate()))
f.close()

Se tomará como origen el fichero "demofile.p12" y se usará la KEY para abrirlo (esta KEY ha sido la usada en la descarga).

 

Se creará un fichero key.pem que contendrá la clave privada.

Se creará un fichero client.pem que contendrá el certificado público de cliente.

 

Configuración del suplicante

Finalmente solo queda configurar el suplicante para esta autenticación. Esto dependerá del dispositivo y del sistema operativo que se esté usando. en nuestro caso se usará una Raspberry corriendo Raspbian. El suplicante estará configurado para usar el fichero: /etc/wpa_supplicant.conf  que tiene este formato:

 

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=root

# disable scan for access points: we use wired connection
ap_scan=0

# Using EAP-TLS: clients authenticate themselves using a ca-certificate
network={
	key_mgmt=WPA-EAP
        eapol_flags=3
        pairwise=CCMP
        identity="rafael"
        group=CCMP
        eap=TLS
        ca_cert="/home/pi/certs/ca.pem"
        client_cert="/home/pi/certs/client.pem"
        private_key="/home/pi/certs/key.pem"
        private_key_passwd="aruba"
}

Se indican:

 

  • Identity: el usuario
  • ca_cert, será el certificado del servidor RADIUS que hemos descargado.
  • client_cert será el certificado público de cliente.
  • private_key será la clave privada del cliente.
  • private_key_passwd es la clave utilizada en dicho certificado privado.

Finalmente hará falta indicar a la interfaz cableada que use este suplicante wpa para validar el acceso, para ello se configura el fichero  /etc/network/interfaces indicando el uso del suplicante.

 

# interfaces(5) file used by ifup(8) and ifdown(8)

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto eth0
iface eth0 inet dhcp


wpa-driver wired
wpa-conf /etc/wpa_supplicant.conf

Para todo el script en Python se usarán estas cabeceras y variables:

import os
import datetime
import subprocess
import requests
import json
import io
import OpenSSL

#Token generado en ClearPass para el acceso por la API
token="Bearer xxxxxxxxx"

requests.packages.urllib3.disable_warnings()

# ID de la CA que usará para este certificado
ca_id=2

headers = {
        'Content-type': 'application/json',
        'Authorization':  token
}

Cuando el dispositivo se conecte a la red, podemos ver como lo hace usando EAP-TLS y el certificado provisionado:

acceso eap-tls.png

Por último y no menos importante, recordar que se pueden revocar los certificados y para ello se debe configurar adecuadamente el método para validar el certificado. 

Creamos un método nuevo y añadimos la URL terminando con el ID de la CA a validar, en nuestro caso: http://localhost/onboard/mdps_ocsp.php/2

Screen Shot 2018-10-23 at 17.13.13.png

Incluimos este método en el servicio y si revocamos el certificado se denegará el acceso:

Screen Shot 2018-10-23 at 17.14.20.png

Screen Shot 2018-10-23 at 17.14.54.png

 


Rafael del Cerro Flores
ACMP, ACCP, ACDX#324, ACCX#711
Search Airheads
cancel
Showing results for 
Search instead for 
Did you mean: