jueves, 8 de noviembre de 2018

Como generar mi propio certificado digital auto firmado

Problema: Necesito instalar un certificado digital en mi servidor web, para darle seguridad a la comunicación de los usuarios de mi sitio web. Y así evitar enviar en texto plano el usuario y contraseña por internet.

Solución: Implemetar certificados digitales auto firmados.
Los certificados digitales deben ser generados por una entidad CA (Certificate Authority), la cual garantiza que los certificados son válidos. De lo contrario podría ser un certificado apócrifo. Para evitar esto último, habrá que invertir algunos dolares y solicitar un certificado a un CA oficial.
En mi caso, mi servidor web no brinda servicio para todo público, por lo que el grupo de usuarios que lo utiliza el limitado. Entonces tengo la opción de firmar mis propios certificados.

Nota: Por ejemplo si en el navegador Firefox vas a Preferencias > Privacidad y seguridad > Certificados > Ver certificados y ahí en la solapa Autoridades, verás una lista larga de entidades CA.

Por lo tanto ahora explicaré como montar mi propio servidor de sertificados CA y como firmarlos.

1. Instalar openssl para crear mi CA.
sudo apt-get install openssl

2. Editar la configuración básica de openssl. Buscar y reemplazar.
sudo nano /usr/lib/ssl/openssl.cnf

Buscar:

[ CA_default ]

dir  = ./demoCA 

Poner:
[ CA_default ]                                                                                 
                                                                                               
dir             = /root/ca

3. Crear el directorio /root/ca
sudo mkdir /root/ca

4. Crear la estructura para luego generar los certificados:

cd /root/ca
sudo mkdir newcerts certs crl private requests
sudo touch index.txt
sudo echo '1234' > serial

5. Generar la llave privada principal "cakey.pem" y solicita definir una contraseña para luego firmar certificados:
sudo openssl genrsa -aes256 -out private/cakey.pem 4096

6. Generar el certificado principal "cacert.pem", aquí solicitará la contraseña de la llave privada principal y datos básicos:
openssl req -new -x509 -key /root/ca/private/cakey.pem -out cacert.pem -days 3650 -set_serial 0

7. Ahora se genera una llave privada, con una contraseña, para generar un certificado.
cd /root/ca/requests/
sudo openssl genrsa -aes256 -out mi_server_key.pem 2048

8. Luego se genera una solicitud de certificado, y se debe cargar los datos solicitados para el certificado que se requiera.
sudo openssl req -new -key mi_server_key.pem -out mi_server.csr

9. Como paso final se firma el requerimiento anterior con el CA generado.
sudo openssl ca -in mi_server.csr -out mi_server.pem

10. Podemos descartar el archivo con extensión scr.
sudo rm mi_server.scr

11.  Con estos pasos ahora ya tenemos un certificado digital para instalar en nuestro servidor.


Fuente 1
Fuente 2

sábado, 27 de octubre de 2018

Instalar servidor LDAP y phpldapadmin

Problema: Necesito instalar un servidor ldap para la gestión unificada de usuarios. Tengo varios servicios como NAS y aplicaciones web (GLPI, Redmine, etc...) que para cada uno de estos hay que crear las credenciales de acceso y creo que con un LDAP lo podré resolver.

Solución: En un servidor con ubuntu 18.04 LTS instalo un servidor LDAP junto a un administrador web del servidor, para facilitar la gestión y configuración.

0. Como siempre, antes de comenzar a instalar cosas en nuestro servidor, es bueno actualizar lo que está, así que actualizo paquetes a la última versión.
sudo apt-get update && sudo apt-get upgrade

1. Instalo servidor openldap y herramientas.
sudo apt-get install slapd ldap-utils

2. En en proceso de instalación se deberán configurar la contraseña del administrdor 'admin'. Anotala en un papelito!

3. Al terminar el proceso de instalación (el prompt de linux listo para recibir un nuevo comando), verificamos que el servicio está corriendo. Y veremos que 'Active: active (running)'.
sudo systemctl status slapd.service
 
4.  Realizamos la configuración básica del servidor LDAP, con el siguiente comando.
sudo dpkg-reconfigure slapd

5. Ahora respondemos de la siguiente manera a las preguntas o parámetros que van surgiendo.

Omit OpenLDAP server configuration? --> NO
DNS Domain name --> ldap.sudoriento.com
Organization name --> sudoriento
Administrator password --> [clave creada en el punto 2]
Database backend to use --> MDB
Do you want the database to be removed when slapd is purged? --> NO
Move old database? --> YES

6. Editamos el archivo de configuración principal del servicio. Y modificamos las líneas 'BASE' y 'URI'.
sudo nano /etc/ldap/ldap.conf

BASE    dc=ldap,dc=sudoriento,dc=biz
URI     ldap://localhost/

7. Chequeamos que los cambios se aplicaron
ldapsearch -x

Si en la salida del comando muestra result: 0 Success, está todo bien. De lo contrario habrá que verificar desde el inicio del procedimiento.

8. Instalamos phpLDAPadmin.
IMPORTANTE: es necesario disponer de un servidor web (ej: apache2) instalado en el mismo servidor ldap para poder utilizar esta aplicación web.
sudo apt-get install phpldapadmin

9. Editamos la configuración de la aplicación web phpldapadmin para acceder al servidor ldap instalado anteriormente.
sudo nano -c /etc/phpldapadmin/config.php

Vamos a las líneas 293, 296, 300, 326, 335 y 453 (con 'nano' es: Ctrl+w, Ctrl+t colocamos el número de línea y luego ENTER).

Las siguientes líneas deben quedar de esta manera:

$servers->setValue('server','host','127.0.0.1');
$servers->setValue('server','port',389);
//$servers->setValue('server','base',array('dc=example,dc=com'));

$servers->setValue('login','bind_id','cn=admin,dc=ldap,dc=sudoriento,dc=biz');
$servers->setValue('server','tls',false);
$servers->setValue('login','anon_bind',false);

10. Ahora con un navegador web podrás ingresar a phpldapadmin:
http://[IP de servidor LDAP]/phpldapadmin

11. Hacer click en conectar (barra lateral izquierda).

12. En la ventana de autenticación el usuario será Login : cn=admin,dc=ldap,dc=sudoriento,dc=biz y la Contraseña:  [clave creada en el punto 2].

Fuente

Ya logré montar un servidor ldap con su herramienta de administración... ¿Y ahora que hago con esto? No lo se... pero en cuanto lo aprenda lo postéo.