...
Esta funcionalidad permite a los usuarios iniciar sesión en la plataforma y aplicación desarrolladas sobre la misma mediante certificados de cliente X509, con la ventaja de poder seguir utilizando Oauth2 como estándar de seguridad en las comunicaciones.
Table of Contents |
---|
Configuración de Nginx
Legacy (Rancher 1.6)
Como el nginx termina la conexión SSL, necesitamos necesitas configurar el forwarding del certificado a Keycloak primero.
Al nivel de server añadir, añade:
Code Block |
---|
#x509 ssl_verify_client optional_no_ca; #se puede poner a optional y checkear la cadena de confianza con el siguiente parámetro #CA.pem deberá contener todos los certificados concatenados de los issuers #de certificados que vaya a aceptar nuestro sistema #ssl_client_certificate /etc/nginx/ssl/CA.pem; ssl_verify_depth 2; |
A nivel de location añadir, añade:
Code Block |
---|
location /auth { proxy_set_header X509-Cert $ssl_client_escaped_cert; .... } |
...
Como requisito para configurar un entorno con kubernetes, necesita necesitas tener la versión 1.21+ de k8s para que el Ingress Controller soporte las anotaciones networking.k8s.io/v1
Creación del secret con las CAs
En primer lugar deberemos debes crear el secreto que contendrá los certificados concatenados de las CA necesarias para validar los certificados de cliente que se quieran autenticar.
Crearemos Crea un secret llamado platform-ca en el namespace de onesaitplatform, por ejemplo, y como clave del secret lo llamaremos , llámalo ca.crt , dejando como valor la cadena de certificados.
...
Configuración del Ingress Controller
En el Ingress Controller tendremos , tienes que poner las siguients siguientes anotaciones:
Code Block |
---|
nginx.ingress.kubernetes.io/auth-tls-pass-certificate-to-upstream: "true" nginx.ingress.kubernetes.io/auth-tls-secret: onesaitplatform/platform-ca nginx.ingress.kubernetes.io/auth-tls-verify-client: optional nginx.ingress.kubernetes.io/auth-tls-verify-depth: "2" |
Configuración del Config Map loadbalancer
Por último tendremos tienes que añadir la siguiente directiva al config map de nuestro balanceador, con el objetivo de propagar la cabecera HTTP que inyecta el Ingress Controller con el certificado:
...
Lo primero será modificar el flujo principal de autenticación, ‘Multitenant-browser-flow’:
...
Añadimos Añade una execution, ‘X509 Onesait Platform’:
...
La marcamos Márcala como alternativa en el flujo de autenticación, y la ponemos ponla en el tercer nivel:
...
Configuración de la execution
Ahora tenemos tienes que configurar la execution para el mapeo de certificado - usuario.
Hacemos Haz click en actions → config:
...
En este ejemplo vamos , vas a configurarlo para aceptar DNIe como fuente de certificado electrónico.
Tenemos Tienes que configurar los siguientes campos:
...
Import User after first log in: lo dejaremos déjalo marcado para que importe a los usuarios después de la primera autenticación.
User Identity Source: lo dejaremos déjalo a Match SubjectDN using RegEx, ya que extraeremos de ahí se extraerá el ID de usuario.
User ID: expresión regular para extraer el ID único de usuario, en . En el caso del DNIe se extrae del campo SERIALNUMBER del DN del certificado.
Email: expresión regular para extraer el correo, en . En el caso del DNIe, no aplica. Déjalo vacío, se deja vacío ya que no aparece este campo.
...
Import DN as extrafields: lo marcaremos márcalo si queremos quieres almacenar en el campo extra fields de los usuarios de plataforma el DN completo extraído del certificado.
Administrators whitelist: lista de ID de usuario usuarios, separados por comas, a los que se les va a dar rol administrador.
Default import Role: rol por defecto de importación de usuarios.
User mapping method: lo dejaremos déjalo a Username or Email.
El resto de opciones, no hace falta configurarlas.
...
Por último habrá que añadir los certificados de los issuers de los certificados electrónicos que vaya a aceptar nuestro el sistema, en . En el caso del DNIe, tenemos tienes que añadir el de la Policia Nacional.
Code Block |
---|
-----BEGIN CERTIFICATE----- MIIG6DCCBNCgAwIBAgIQQ5qWKLJmD+5Tmutm/PFVGDANBgkqhkiG9w0BAQsFADBf MQswCQYDVQQGEwJFUzEoMCYGA1UECgwfRElSRUNDSU9OIEdFTkVSQUwgREUgTEEg UE9MSUNJQTENMAsGA1UECwwERE5JRTEXMBUGA1UEAwwOQUMgUkFJWiBETklFIDIw HhcNMTQwNjEzMTIxNTM0WhcNMjkwNjEzMTIxNTM0WjBcMQswCQYDVQQGEwJFUzEo MCYGA1UECgwfRElSRUNDSU9OIEdFTkVSQUwgREUgTEEgUE9MSUNJQTENMAsGA1UE CwwERE5JRTEUMBIGA1UEAwwLQUMgRE5JRSAwMDQwggIiMA0GCSqGSIb3DQEBAQUA A4ICDwAwggIKAoICAQDGadrtPpUT6l2bo3med81g0J5E/CxNKXnbNsgh/pIQtLjg I0MM9G3xNuh1yJYMjy4ebbZyoJCZVqQsk9A5ko/CUibbONS4RqUkC5wVtm0jkVdY Lw9JPMHWLpoRKokU6QbgKErMES5Yh9XadB0Bp2RJLw7WWy/bs8axZ1j/c/y5QNK/ cgPQhpbjvjMoCNej+exp6tVQfNbo7HxKh8+JPzyZZO/vHownKqoa3atrHTIAnzlg BTMwMQiUDi72Iag0auB9j2oSrH+XEGs1d11nNpu4SWSX979g09OI3PkwTKopU0P0 GpVrgejtXQI+Nmz7rNEhAYoDfushYzfpwvc1zUIKnEoS7cYKkHXZzCnK/1tNW3nf mfczwktcioGpy9Al58CBZkbQihYQHKHfRBHOz/aZ27CwSdIvTy62EdPvbD/zCBIM aoNbWSKY5Uun56nJpxjO7MmNUHKNYW/BPBdXtRjw3QC31wHWfP+AgNV1p3NJlAuf RnCVATo+dgYM4Vj4RdOh1tC2VfmrWtPUjEkP56U12tcXVurmn88QxTGvv6qMCEO9 H8aRu4K4MZizQAkC/cPBt04NyDeS8vxqTKJDec9El4lO4Pksf2fNzCpARC6Ww/XL VV+CQoPQtNecOHjyUkvgiEm6pTsp8AGeEwN9PlgKUY01lEi8f5lzVXQEIrF4lQID AQABo4IBoTCCAZ0wHQYDVR0OBBYEFOvGL4ThFxerBvBAjOqvQk7xMc0aMB8GA1Ud IwQYMBaAFFPcbmKkzhMbd+CHoVqkD7KHEvCbME0GA1UdIARGMEQwQgYEVR0gADA6 MDgGCCsGAQUFBwIBFixodHRwOi8vcGtpLnBvbGljaWEuZXMvZG5pZS9wdWJsaWNh Y2lvbmVzL2RwYzASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjCB 5wYDVR0fBIHfMIHcMIHZoIHWoIHThidodHRwOi8vcGtpLnBvbGljaWEuZXMvZG5p ZS9jcmxzL0FSTC5jcmyGgadsZGFwOi8vbGRhcC5kbmllLmVzL0NOPUNSTCxDTj1B QyUyMFJBSVolMjBETklFJTIwMixPVT1ETklFLE89RElSRUNDSU9OJTIwR0VORVJB TCUyMERFJTIwTEElMjBQT0xJQ0lBLEM9RVM/YXV0aG9yaXR5UmV2b2NhdGlvbkxp c3Q/YmFzZT9vYmplY3RjbGFzcz1jUkxEaXN0cmlidXRpb25Qb2ludDANBgkqhkiG 9w0BAQsFAAOCAgEAUL0NUEeaAze4/dZeFLqUkFxR8+vGIEhkjYilrrEoFbFsPHT8 reXjtb5F6tqIOIh0n11WhQWGcc+Plwi5JXuHsAcwuEKVPK827HiL6EzlCuPVlxxR /PcSKCDiKWiuMDWmv6Z4AlpjON+SFWRL2brEf/O/0WvokuwBmVz4nmIrDTlrijYL ldc7ODHD4/HEBXhgW2HnhSwraR2i1yaM/mZMdFWWHeVAU6VZ1jWNsDHUEWxZ9F6Y A0mTiGG44MB6Nv28opLGTtsdW12Lc1SI8ydZZl/z9+V5vgCZ3D2JKW/UJI+WKJRc Ux/9z5iQARWGhr1vpRFu/EyMuUIumTVLVTgU0Y69lecNGjY3nvfOccxweOhx0UqR BQMgEQoO7ePhIAuql3Y1Fp/Eb5HzCGYqSCJjHPcm5lh54uKM+eYG3QnUEgHCJ1SH ECZkavldmy/urRCWL+jd3PIZFj2G+oceQBlZBzUPHq6ADnsIdfu/QmHGXbP9Qo+y tj03DrDiDORVp2vvRnbIZKsolxMX+mjO+OL8Zrqm+s92Iyuvspksgq1edHhHT8Bz KYaJTeol+17DEee7v8cCgr0+0Zj6wCXMOHe/UN/n1xSOsljIFkEz9BOC2Xcy304+ GM8cSBe81y5/IlB4dERoBBnydiIaE/okylJix+LhYd4ijYcQJh0OqwaqhFQ= -----END CERTIFICATE----- |
...
Para añadirlo, solicitarlo solicítalo a través de soporte de plataforma.
Code Block |
---|
keytool -importcert -keystore "KEYSTORE_FILE" -storepass "KEYSTORE_PASSWORD" -file "CERTIFICATE_FILE" -alias "CERTIFICATE_ALIAS" |
El keystore de keycloak esta está ubicado en /opt/jboss/keycloak/standalone/configuration/keystore.jks, la contraseña es la misma que el JKS de la JVM.
En el directorio que tenemos de /onesait-cloud-platform/tools/keycloak/server se encuentra el keystore.jks con las CAs más comunes pedidas por los clientes, siempre se pueden . Siempre puedes añadir más y regenerar la imagen del keycloak server.
...