- Introducción
- Crear archivo de clave privada (Private Key)
- Crear archivo de certificado/clave privada
- Indicar a Apache donde está la ubicación del archivo que contiene la clave privada
- Introducción (Volver al índice General)
Hoy día, la seguridad y la privacidad son temas a tener muy en cuenta. Cada día estamos más expuestos al espionaje, al robo de datos y a la suplantación de identidad, y debido a todo esto es conveniente cifrar nuestras comunicaciones.Para conseguir que Apache cifre sus conexiones con OpenSSL necesitamos un certificado. Los certificados firmados por entidades certificadoras de prestigio son costosos. Una alternativa es optar por generar un certificado gratuito de CAcert o la alternativa que hoy en día está siendo utilizada por muchas empresas de hospedaje web, Let’s Encrypt.
Por otro lado, nos queda la opción del certificado autofirmado. Podemos recurrir a estos cuando nos es imposible pagar por un certificado firmado por una entidad certificadora de prestigio, por que los usuarios confían en nosotros o por nuestra autosuficiencia a la hora de crearlos.
La desventaja es que la primera vez que que los navegadores acceden al sitio, presentará una advertencia de seguridad a la cual debemos de indicar que el sitio sí es de confianza y guardarla para que no nos pregunte en el futuro.
Proceso de creación del certificado y configuración de Apache
A continuación, se mostrará como crear un certificado autofirmado para que Apache cifre sus conexiones con OpenSSL, es decir, que utilice el protocolo HTTPS en lugar de HTTP.En caso de que nuestro servidor preste servicios a varios dominios, es aconsejable que los archivos generados tengan un nombre descriptivo que haga referencia al dominio al que certifican. Por ejemplo para el dominio midominio.com, podríamos utilizar como nombre de archivo midominio.
- Crear archivo de clave privada (Private Key) (Volver al índice General)
- Generación de llave (Volver al índice General)
Es aconsejable pero no obligatorio utilizar archivos con datos aleatorios (-rand file1:file2….) donde file1, file2… son archivos de nuestro sistema de contenido no sensible. El valor 2048 es la longitud de la llave aunque podemos elegir valor mayores para hacer más fuerte nuestra llave y el valor -des3 hace que se utilice el algoritmo Triple DES.# openssl genrsa -des3 -rand file1:file2:file3:file4 -out /usr/share/ssl-cert/midominio.key 2048
Cambiamos los permisos para que midominio.key sólo sea legible por el root
# sudo chmod 400 /usr/share/ssl-cert/midominio.key
- Removiendo llave del pass-phrase (Volver al índice General)
Esta operación es interesante pues así, no tendremos que introducir la palabra de paso del certificado cada vez que arranque el servidor Apache.# openssl rsa -in /usr/share/ssl-cert/midominio.key -out /usr/share/ssl-cert/private/midominio.pem
Cambiamos los permisos para que midominio.pem sea legible por todos
# sudo chmod 444 /usr/share/ssl-cert/private/midominio.pem
- Generación de llave (Volver al índice General)
- Crear archivo de certificado/clave privada (Volver al índice General)
- Generando el CSR (Certificate Signing Request) (Volver al índice General)
# openssl req -new -key /usr/share/ssl-cert/midominio.key -out /usr/share/ssl-cert/midominio.csr Enter pass phrase for /usr/share/ssl-cert/midominio.key: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:ES State or Province Name (full name) [Some-State]:Madrid Locality Name (eg, city) []:Cercedilla Organization Name (eg, company) [Internet Widgits Pty Ltd]:Cerdedilla Space Organizational Unit Name (eg, section) []:Aeroespacial Common Name (e.g. server FQDN or YOUR name) []:www.midominio.com Email Address []:miemail@midominio.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
- Certificado SSL Wildcard (multi-subdominio) (Volver al índice General)
Los certificados Wildcard (comodín) se crean para que sean válidos para cualquier subdominio del dominio certificado. Es decir, serviría para cualquier subdominio de midominio.com, como por ejemplo:- www.midominio.com
- ftp.midominio.com
- ventas.midominio.com
Para crear un Certificado SSL Wildcard seguiremos los pasos anteriores, pero en Common Name (CN) pondremos un asterisco (*) delante del dominio.
... Common Name (e.g. server FQDN or YOUR name) []:*.midominio.com ...
Tras generar el CSR, ya sea un certificado simple o un certificado Wildcard, cambiamos los permisos para que midominio.csr sólo sea legible por el root
# sudo chmod 400 /usr/share/ssl-cert/midominio.csr
- Generando certificado temporal (Volver al índice General)
# openssl x509 -req -days 60 -in /usr/share/ssl-cert/midominio.csr -signkey /usr/share/ssl-cert/midominio.key -out /usr/share/ssl-cert/certs/midominio.crt
Cambiamos los permisos para que midominio.crt sea legible por todos
# sudo chmod 444 /usr/share/ssl-cert/certs/midominio.crt
- Generando el CSR (Certificate Signing Request) (Volver al índice General)
- Indicar a Apache donde está la ubicación del archivo que contiene la clave privada (Volver al índice General)
Configuramos el sitio web en Apache para que haga uso del cifrado SSL. En Debian los archivos de configuración de los sitios web se alojan en el directorio /etc/apache2/sites-available/. Consulte la documentación de su distribución para hacerlo de la forma correcta.Editamos el sitio web con SSL: En nuestro caso editaremos el sitio web con SSL por defecto de nuestra distribución Debian.
# nano /etc/apache2/sites-available/default-ssl
Sustituimos las líneas existentes que comiencen por SSLCertificateKeyFile y SSLCertificateFIle por las siguientes:
SSLCertificateKeyFile /usr/share/ssl-cert/private/midominio.pem SSLCertificateFile /usr/share/ssl-cert/certs/midominio.crt
Por último reiniciamos Apache para que surtan efecto los cambios realizados.
# service apache2 restart
o también
# /etc/init.d/apache2 restart
Si utilizamos Systemd en lugar de SysVinit reiniciamos el servicio Apache con el siguiente comando:
# systemctl restart apache
Espero que este artículo os haya sido de utilidad. Si pensáis que podéis colaborar para mejorar este artículo, que hay algo erróneo en él o simplemente deseáis comentarlo, por favor, dejad vuestra opinión más abajo.
Deja una respuesta