Autenticación de cliente para la administración de WordPress

por | abril 21, 2016

Existen multitud de plugins para proteger el área de administración en WordPress. Desde los que añaden doble autenticación hasta los que «ocultan» el contexto de administración para hacer más difícil su acceso.

Si tenemos control sobre el frontal web Apache podemos implementar autenticación con certificado de cliente de manera que sólo aquellos usuarios con el certificado correspondiente puedan acceder al área de administración.

Las instrucciones para montar nuestra propia CA y generar un certificado de cliente están bastante claras en el blog de jamielinux

Necesitaremos el certificado la CA raíz, intermedia, nuestro certificado de cliente y su correspondiente clave privada. En la directiva SSLCACertificateFile de nuestro Apache incluímos toda la cadena de certificados de CA.

SSLCACertificateFile    /etc/apache2/certs/ca-chain.pem

Tendremos que proteger el contexto /wp-admin y el fichero wp-login.php al que se redirige cuando entramos directamente por /wp-admin. Podemos requerir varios campos del certificado que se presenta, como puede ser Country, Organization, Common Name y el Email, por ejemplo:

# Client Cert for /wp-admin/
<Location /wp-admin/>
    SSLVerifyClient require
    SSLVerifyDepth  3
    SSLRequire %{SSL_CLIENT_I_DN_C} eq "ES" and \
               %{SSL_CLIENT_I_DN_O} eq "My Org" and \
               %{SSL_CLIENT_S_DN_CN} eq "mail@example.com" and \
               %{SSL_CLIENT_S_DN_Email} eq "mail@example.com"
</Location>

# Client Cert for /wp-login.php
<Location /wp-login.php>
    SSLVerifyClient require
    SSLVerifyDepth  3
    SSLRequire %{SSL_CLIENT_I_DN_C} eq "ES" and \
               %{SSL_CLIENT_I_DN_O} eq "My Org" and \
               %{SSL_CLIENT_S_DN_CN} eq "mail@example.com" and \
               %{SSL_CLIENT_S_DN_Email} eq "mail@example.com"
</Location>

Ahora tenemos que importar nuestro certificado de cliente en el navegador en formato PKCS12 que incluya la clave pública y privada. La configuración varía en función del navegador. En Firefox por ejemplo lo tenemos en Preferencias -> Privacidad y Seguridad -> Certificados -> Mis certificados, una vez ahí lo importamos.

La próxima vez que entremos en nuestro área de administración el navegador nos dará a elegir el certificado de cliente con el que queremos autenticarnos.