Certificados digitales con OpenSSL

El objetivo de esta entrada es configurar un servidor web localmente para que tengan conexiones seguras mediante OpenSSL, se requiere para este ejemplo que el servidor local haga las funciones de entidad certificadora o CA, probar que localmente se puede ser entidad CA y servidor web con datos diferentes entre CA y servidor web y probar el canal en claro con un sniffer para demostrar que los datos viajan cifrados.
Paso 1: Verificación de apache y openssl


Se verifica que OpenSSL este instalado correctamente y que el servicio de apache este corriendo.
Paso 2: Generar llave en SSL

Con la siguiente instrucción se genra la clave con encripcion des3 y con una longitud de 1024, se digita el passwrd que se utilizara y se verifica en la carpeta que se genero efectivamente la clave.

# openssl genrsa -des3 -out server.key 1024
Paso 3: Crear peticion de firma del certificado CSR

Se crea una nueva petición de firma del certificado creado a traves de la siguiente instrucción.

# openssl req -new -key server.key -out server.csr

reg: Request para el certificado
new: nueva peticion
key: Archivo del que se leera la llave
uot: Archivo de peticion generado
Acá se evidencia los parámetros establecidos como ciudad, nombre del certificado, entidad certificadora, etc.

Paso 4: Firmar la peticion elaborado

Se deben firmar las peticiones creadas y verifiacar que esta OK, como lo muestra la figura.

# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

x509: Aplicar formato estandar de llave publilca
req: Request para el certificado
days: Validez del certificado (1 año)
in: Input de la peticion de firma elaborada previamente
signkey: La llave que firmara el certificado
out: Certificado resultante
Se pueden ver los parametros de configuracion anteriormente realizados.

Paso 5: Crear una versión de llava que no requiera password

Se realiza la siguiente instrucion para que el servicio apache no pida password cuando inicia.

# openssl rsa -in server.key -out server.key.insecure
Paso 6: Renombrar archivos

Se remonbran los archivos con el nuevo archivo generado anteriormente, con eso evitaremos la autenticación al inicio del servicio apache.

# mv server.key.insecure server.key
Paso 7: verificación y aseguramiento

Se pueden asegurar los archivos creados.

  • server.crt: Certificado autofirmado
  • server.csr: Certificado signing request
  • server.key: Llave del servidor
Para que solo root los pueda modificar.

# chmod 000 server.csr
# chmod 000 server.crt
# chmod 000 server.key
# chmod 000 server.key.secure

Paso 8: Carpeta SSL en apache2

Se debe crear un directorio en llamado ssl en /etc/apache2 y copiar todos las claves creadas

# cp server.crt /etc/apache2/ssl/
# cp server.key /etc/apache2/ssl/
Paso 9: activar modulos SSL

Activar SSL y reiniciar el servicio Apache.


# a2enmod ssl


Después
 de ejecutada esta accion de debe realizar esto mismo con:


# a2ensite default-ssl

Paso 10: Carpeta de sitio seguro

En la ruta # cd /etc/apache2/sites-available/ se debe crear la carpeta /ssl

Paso 11: Copiar archivo default

A la carpeta creada anteriormente se le copia el archivo default.

# cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ssl/

Paso 12: Directorios http y https

Se debe crear en /var/www/ una carpeta con el nombre /html. Posterior a ello en /var se debe crear una carpeta llamada /www-ssl y dentro de ese directorio crear un directorio llamado /html.

Paso 13: Editar /default

Se debe editar el archivo default ubicado en la carpeta /ssl recientemente creada donde se encuentran los archivos de apache /etc/apache2 de manera que se escuche el puerto 443 para conexiones seguras. Se debe agregar las siguientes lines para poder leer los certificados.

Modificar
<Virtualhost *:80> a <Virtualhost *:443>

Agregar la instruccion despues de ServerAdmin
ServerName localhost

Modificar la ruta de Documenthost a:
/var/www-ssl/html 
Agregar al final del código

SSLEngine On
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
Se debe también modificar el el archivo /default de /etc/apache2/sites-available/ en la parte de Documenthost a

/var/www/html

Y por ultimo se agrega la instrucción despues de ServerAdmin

Reiniciar apache2 y se debe evidenciar que sube el servicio


ServerName localhost

Reiniciar apache2 y se debe evidenciar que sube el servicio

Paso 14: Modificacion ruta de SSL

Se debe modificar la ruta para que no tenga problema de direccionamiento de los certificados digitales.


Paso 14: NMAP localhost

Se corre NMAP para verificar que esta corriendo el puerto 443 en el localhost.



Paso 15: Verificar resultado

Se accede a http://localhost como se muestra en la imagen para verificar que el servicio apache esta arriba.

Posterior a ello se accede a https://localhost y se muestra la imagen siguiente, que indica que es una conexión insegura pero por ser una entidad certificadora no reconocida.

Parámetros de configuración del certificado anteriormente generado


Se acepta el nuevo certificado digital creado.

Por ultimo se puede verificar el servicio corriendo de forma segura.
Paso 16: Wireshark, http y https


Al autenticar usuarios por http se puede evidenciar que con un analizador de trafico es suceptible a ser interceptado en sus paquetes transmitidos, es dir los datos viajan en texto plano. 

Ahora bien, en la siguiente imagen se muestra la encripción de la informacion enviada a traves del mismo formulario de user y password.



PEM es una representación base64 de los certificados DER con información de cabecera y pie final, que es utilizado principalmente por plataformas UNIX y Linux.


Y eso fue todo, disculpas por la entrada tan larga.