Cuando realizamos la instalación de OpenDJ con el asistente (setup) nos permite activar el protocolo LDAPS de forma sencilla con apenas un par de preguntas. En el caso de que queramos activarlo a posteriori hay que tener un poco más de conocimiento de OpenDJ, a continuación os explico los pasos para hacerlo.
Lo primero es disponer de un certificado SSL. Será el que utilicemos para las conexiones entrantes al puerto LDAPS (636 por defecto). Para testing podemos generar uno self-signed. Ejemplo:
# keytool -genkey -keyalg RSA -alias "OpenDJ LDAPS SSL" \ -keypass PASSWORD -keystore keystore.ks -storepass PASSWORD \ -dname "cn=OpenDJ, c=ES"
Esto nos genera un keystore que almacena el certificado (keystore.ks), lo ubicaremos en la ruta $OPENDJ_HOME/config/.
Una vez que tenemos el keystore hay que habilitar el conector LDAPS y configurar el certificado en OpenDJ. Lo primero verificamos que LDAPS efectivamente está deshabilitado:
# $OPENDJ_HOME/bin/status [..] --- Connection Handlers --- Address:Port : Protocol : State -------------:----------:--------- -- : LDIF : Disabled 0.0.0.0:161 : SNMP : Disabled 0.0.0.0:389 : LDAP : Enabled 0.0.0.0:636 : LDAPS : Disabled 0.0.0.0:1689 : JMX : Disabled 0.0.0.0:8080 : HTTP : Disabled
Para habilitarlo debemos primero configurar el File Based Key Manager Provider «JKS (Java KeyStore)» para que utilice nuestro keystore. Lo hacemos a través de dsconfig:
# $OPENDJ_HOME/bin/status >>>> OpenDJ configuration console main menu What do you want to configure? 1) Access Control Handler 21) Log Publisher 2) Access Log Filtering Criteria 22) Log Retention Policy 3) Account Status Notification Handler 23) Log Rotation Policy 4) Administration Connector 24) Matching Rule 5) Alert Handler 25) Monitor Provider 6) Attribute Syntax 26) Password Generator 7) Backend 27) Password Policy 8) Certificate Mapper 28) Password Storage Scheme 9) Connection Handler 29) Password Validator 10) Crypto Manager 30) Plugin 11) Debug Target 31) Plugin Root 12) Entry Cache 32) Replication Domain 13) Extended Operation Handler 33) Replication Server 14) External Changelog Domain 34) Root DN 15) Global Configuration 35) Root DSE Backend 16) Group Implementation 36) SASL Mechanism Handler 17) Identity Mapper 37) Synchronization Provider 18) Key Manager Provider 38) Trust Manager Provider 19) Local DB Index 39) Virtual Attribute 20) Local DB VLV Index 40) Work Queue q) quit
Accedemos al apartado 18 «Key Manager Provider» y listamos los «Manager Providers», seleccionando y editando «JKS»:
>>>> Key Manager Provider management menu What would you like to do? 1) List existing Key Manager Providers 2) Create a new Key Manager Provider 3) View and edit an existing Key Manager Provider 4) Delete an existing Key Manager Provider b) back q) quit Enter choice [b]: 1 Key Manager Provider : Type : enabled ---------------------:------------:-------- Administration : file-based : true JKS : file-based : true PKCS11 : pkcs11 : false PKCS12 : file-based : false >>>> Key Manager Provider management menu What would you like to do? 1) List existing Key Manager Providers 2) Create a new Key Manager Provider 3) View and edit an existing Key Manager Provider 4) Delete an existing Key Manager Provider b) back q) quit Enter choice [b]: 3 >>>> Select the Key Manager Provider from the following list: 1) Administration 2) JKS 3) PKCS11 4) PKCS12 c) cancel q) quit Enter choice [c]: 2 >>>> Configure the properties of the File Based Key Manager Provider Property Value(s) --------------------------------------------------- 1) enabled true 2) key-store-file config/keystore.ks 3) key-store-pin PASSWORD 4) key-store-pin-environment-variable - 5) key-store-pin-file - 6) key-store-pin-property - 7) key-store-type JKS ?) help f) finish - apply any changes to the File Based Key Manager Provider c) cancel q) quit
En este punto como veis debemos indicar:
- Ruta al fichero keystore que hemos creado con el certificado SSL.
- Password del keystore
- Enabled = True
Confirmamos y con esto el certificado ya está disponible a través del provider «JKS» y nuestro keystore.
Procedemos a activar el conector LDAPS accediendo al apartado 9) del menú de dsconfig:
9) Connection Handler
Editamos el conector de LDAPS:
>>>> Connection Handler management menu What would you like to do? 1) List existing Connection Handlers 2) Create a new Connection Handler 3) View and edit an existing Connection Handler 4) Delete an existing Connection Handler b) back q) quit Enter choice [b]: 3 >>>> Select the Connection Handler from the following list: 1) HTTP Connection Handler 2) JMX Connection Handler 3) LDAP Connection Handler 4) LDAPS Connection Handler 5) LDIF Connection Handler 6) SNMP Connection Handler c) cancel q) quit Enter choice [c]: 4 >>>> Configure the properties of the LDAP Connection Handler Property Value(s) ---------------------------------------------------------------------- 1) allow-ldap-v2 true 2) allow-start-tls false 3) allowed-client All clients with addresses that do not match an address on the deny list are allowed. If there is no deny list, then all clients are allowed. 4) denied-client If an allow list is specified, then only clients with addresses on the allow list are allowed. Otherwise, all clients are allowed. 5) enabled true 6) keep-stats true 7) key-manager-provider JKS 8) listen-address 0.0.0.0 9) listen-port 636 10) ssl-cert-nickname Let the server decide. 11) ssl-cipher-suite Uses the default set of SSL cipher suites provided by the server's JVM. 12) ssl-client-auth-policy optional 13) ssl-protocol Uses the default set of SSL protocols provided by the server's JVM. 14) trust-manager-provider JKS 15) use-ssl true ?) help f) finish - apply any changes to the LDAP Connection Handler c) cancel q) quit
Sólo hay que modificar la propiedad enabled a true y confirmar. Automáticamente si todo ha ido bien OpenDJ escuchará por el puerto 636 en LDAPS y por todas las IPs del servidor. Si queremos forzar una única IP podemos modificar el listener:
8) listen-address 0.0.0.0
Confirmamos con un netstat:
# netstat -natp | grep 636 tcp 0 0 :::636 :::* LISTEN 4397/java
Y si hacemos un ldapsearch con ssl podemos verificar la utilización del certificado:
# ./bin/ldapsearch --port 636 --useSSL --baseDN "o=pruebas" "(objectclass=*)" The server is using the following certificate: Subject DN: cn=OpenDJ, c=ES Issuer DN: cn=OpenDJ, c=ES Validity: Thu Feb 06 13:22:17 CET 2014 through Wed May 07 14:22:17 CEST 2014 Do you wish to trust this certificate and continue connecting to the server? ...
El status de OpenDJ también nos indicará que LDAPS está activo:
--- Connection Handlers --- Address:Port : Protocol : State -------------:----------:--------- -- : LDIF : Disabled 0.0.0.0:161 : SNMP : Disabled 0.0.0.0:389 : LDAP : Enabled 0.0.0.0:636 : LDAPS : Enabled 0.0.0.0:1689 : JMX : Disabled 0.0.0.0:8080 : HTTP : Disabled