Habilitar el conector LDAPS en OpenDJ (post-instalación)

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