como crear certificados digitales con openssl
TRANSCRIPT
Manual creado por: Fabio H. Cerón, Alberto Balcázar R.
pág. 1
Como crear certificados digitales con OpenSSL1
Por medio de este tutorial se pretende configurar un servidor web localmente para que tenga 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. Este manual se realizó con Ubuntu
PASO 1: Verificación de Apache y OpenSSL.
Se verifica que OpenSSL esté instalado correctamente y que el servicio de apache este corriendo. $ openssl version $ /etc/init.d/apache2 status
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 generó
efectivamente la clave.
$ sudo openssl genrsa -des3 -out server.key 1024
1 Copiado de http://www.binaryti.com/2011/09/certificados-digitales-con-openssl.html
Manual creado por: Fabio H. Cerón, Alberto Balcázar R.
pág. 2
PASO 3: Crear petición de firma del certificado CSR
Se crea una nueva petición de firma del certificado creado a través de la siguiente
instrucción.
$ sudo openssl req -new -key server.key -out server.csr
reg: Request para el certificado
new: nueva petición
key: Archivo del que se leerá la llave
uot: Archivo de petición generado
Acá se evidencia los parámetros establecidos como ciudad, nombre del certificado,
entidad certificadora, etc.
Manual creado por: Fabio H. Cerón, Alberto Balcázar R.
pág. 3
PASO 4: Firmar la petición elaborado
Se deben firmar las peticiones creadas y verificar que esta OK, como lo muestra la figura.
$ sudo openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
x509: Aplicar formato estándar de llave pública
req: Request para el certificado
days: Validez del certificado (1 año)
in: Input de la petición de firma elaborada previamente
signkey: La llave que firmara el certificado
out: Certificado resultante
Se pueden ver los parámetros de configuración anteriormente realizados.
PASO 5: Crear una versión de llave que no requiera password
Se realiza la siguiente instrucción para que el servicio apache no pida password cuando
inicia.
$ sudo openssl rsa -in server.key -out server.key.insecure
PASO 6: Renombrar archivos
Se renombran los archivos con el nuevo archivo generado anteriormente, con eso
evitaremos la autenticación al inicio del servicio apache.
$ sudo mv server.key.insecure server.key
Manual creado por: Fabio H. Cerón, Alberto Balcázar R.
pág. 4
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.
$ sudo chmod 000 server.csr
$ sudo chmod 000 server.crt
$ sudo chmod 000 server.key
$ sudo chmod 000 server.key.secure
PASO 8: Carpeta SSL en apache2
Se debe crear un directorio en llamado ssl en /etc/apache2 y copiar todas las claves
creadas
$ sudo mkdir /etc/apacge2/ssl
$ sudo ls /etc/apache2/
$ sudo cp server.crt /etc/apache2/ssl/
$ sudo cp server.key /etc/apache2/ssl/
Manual creado por: Fabio H. Cerón, Alberto Balcázar R.
pág. 5
PASO 9: activar modulos SSL
Activar SSL y reiniciar el servicio Apache.
$ sudo a2enmod ssl
$ sudo /etc/init.d/apache2 restart
$ sudo a2enmod ssl
Después de ejecutada esta acción de debe realizar esto mismo con:
$ sudo a2ensite default-ssl
Manual creado por: Fabio H. Cerón, Alberto Balcázar R.
pág. 6
PASO 10: Carpeta de sitio seguro
En la ruta:
$ sudo mkdir /etc/apache2/sites-available/ se debe crear la carpeta /ssl
Luego verificamos
$ ls /etc/apache2/sites-available/
PASO 11: Copiar archivo default
A la carpeta creada anteriormente se le copia el archivo default.
$ sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ssl/
Manual creado por: Fabio H. Cerón, Alberto Balcázar R.
pág. 7
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.
$ sudo ls /var/www/
$ sudo mkdir /var/html
$ sudo ls /var/www/
$ sudo ls /var/
$ sudo mkdir/var/www-ssl
$ sudo ls /var/
$ sudo mkdir /var/www-ssl/html
$ sudo ls /var/www-ssl
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 líneas para poder leer los
certificados.
Modificar
<Virtualhost *:80> a <Virtualhost *:443>
Agregar la instrucción después de ServerAdmin
ServerName localhost
Modificar la ruta de DocumentRoot a
/var/www-ssl/html
Manual creado por: Fabio H. Cerón, Alberto Balcázar R.
pág. 8
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 archivo /default de /etc/apache2/sites-available/ en la
parte de DocumentRoot a
/var/www/html
Y por último se agrega la instrucción después de ServerAdmin
ServerName localhost
Manual creado por: Fabio H. Cerón, Alberto Balcázar R.
pág. 9
Reiniciar apache2 y se debe evidenciar que sube el servicio
$ sudo /etc/init.d/apache2 restar
Manual creado por: Fabio H. Cerón, Alberto Balcázar R.
pág. 10
PASO 14: Modificacion ruta de SSL
Se debe modificar la ruta para que no tenga problema de direccionamiento de los
certificados digitales.
NMAP localhost
Se corre NMAP para verificar que está corriendo el puerto 443 en el localhost.
Manual creado por: Fabio H. Cerón, Alberto Balcázar R.
pág. 11
PASO 15: Verificar resultado
Se accede a http://localhost como se muestra en la imagen para verificar que el servicio
apache está 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.
Manual creado por: Fabio H. Cerón, Alberto Balcázar R.
pág. 12
Parámetros de configuración del certificado anteriormente generado
Se acepta el nuevo certificado digital creado.
Por último se puede verificar el servicio corriendo de forma segura.