Androide

Asegure apache con cifremos en centos 7

1st Design of 2020 - Grab your balloons and follow along! - Q Corner Showtime LIVE! E39

1st Design of 2020 - Grab your balloons and follow along! - Q Corner Showtime LIVE! E39

Tabla de contenido:

Anonim

Let's Encrypt es una autoridad de certificación gratuita, automatizada y abierta desarrollada por Internet Security Research Group (ISRG). Los certificados emitidos por Let's Encrypt son válidos por 90 días a partir de la fecha de emisión y todos los principales navegadores confían en ellos hoy.

En este tutorial, cubriremos los pasos necesarios para instalar un certificado SSL Let's Encrypt gratuito en un servidor CentOS 7 que ejecuta Apache como servidor web. Utilizaremos la utilidad certbot para obtener y renovar certificados Let's Encrypt.

Prerrequisitos

Asegúrese de cumplir con los siguientes requisitos previos antes de continuar con este tutorial:

  • Tenga un nombre de dominio que apunte a la IP de su servidor público. Usaremos example.com Apache está instalado y ejecutándose en su servidor. Tenga un host virtual Apache para su dominio. Los puertos 80 y 443 están abiertos en su firewall.

Instale los siguientes paquetes necesarios para un servidor web cifrado SSL:

yum install mod_ssl openssl

Instalar Certbot

Certbot es una herramienta que simplifica el proceso para obtener certificados SSL de Let's Encrypt y habilitar HTTPS automáticamente en su servidor.

El paquete certbot puede instalarse desde EPEL. Si el repositorio EPEL no está instalado en su sistema, puede instalarlo con el siguiente comando:

sudo yum install epel-release

Una vez que el repositorio EPEL esté habilitado, instale el paquete certbot escribiendo:

sudo yum install certbot

Generar grupo fuerte Dh (Diffie-Hellman)

El intercambio de claves Diffie – Hellman (DH) es un método de intercambio seguro de claves criptográficas a través de un canal de comunicación no seguro. Genere un nuevo conjunto de parámetros DH de 2048 bits para fortalecer la seguridad:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 Puede cambiar el tamaño hasta 4096 bits, pero en ese caso, la generación puede tardar más de 30 minutos dependiendo de la entropía del sistema.

Obtención de un certificado SSL Let's Let's Encrypt

Para obtener un certificado SSL para nuestro dominio, vamos a utilizar el complemento Webroot que funciona creando un archivo temporal para validar el dominio solicitado en el ${webroot-path}/.well-known/acme-challenge . El servidor Let's Encrypt realiza solicitudes HTTP al archivo temporal para validar que el dominio solicitado se resuelva en el servidor donde se ejecuta certbot.

Para hacerlo más simple, vamos a asignar todas las solicitudes HTTP para .well-known/acme-challenge a un solo directorio, /var/lib/letsencrypt .

Ejecute los siguientes comandos para crear el directorio y hacerlo escribible para el servidor Apache:

sudo mkdir -p /var/lib/letsencrypt/.well-known sudo chgrp apache /var/lib/letsencrypt sudo chmod g+s /var/lib/letsencrypt

Para evitar duplicar el código, cree los siguientes dos fragmentos de configuración:

/etc/httpd/conf.d/letsencrypt.conf

Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/" AllowOverride None Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec Require method GET POST OPTIONS Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/" AllowOverride None Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec Require method GET POST OPTIONS /etc/httpd/conf.d/ssl-params.conf

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 SSLHonorCipherOrder On Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" Header always set X-Frame-Options DENY Header always set X-Content-Type-Options nosniff # Requires Apache >= 2.4 SSLCompression off SSLUseStapling on SSLStaplingCache "shmcb:logs/stapling-cache(150000)" # Requires Apache >= 2.4.11 SSLSessionTickets Off

El fragmento anterior está utilizando los chippers recomendados por Cipherli.st, habilita el grapado OCSP, la seguridad de transporte estricta HTTP (HSTS) y aplica pocos encabezados HTTP centrados en la seguridad.

Vuelva a cargar la configuración de Apache para que los cambios surtan efecto:

sudo systemctl reload

Ahora, podemos ejecutar la herramienta Certbot con el complemento webroot y obtener los archivos de certificado SSL escribiendo:

sudo certbot certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com

Si el certificado SSL se obtiene con éxito, certbot imprimirá el siguiente mensaje:

IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2018-12-07. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF:

CentOS 7 se entrega con Apache versión 2.4.6, que no incluye la directiva SSLOpenSSLConfCmd . Esta directiva solo está disponible en Apache 2.4.8 más adelante, y se usa para la configuración de parámetros de OpenSSL como el intercambio de claves Diffie – Hellman (DH).

Tendremos que crear un nuevo archivo combinado utilizando el certificado Let's Encrypt SSL y el archivo DH generado. Para hacer esto, escriba:

cat /etc/letsencrypt/live/example.com/cert.pem /etc/ssl/certs/dhparam.pem >/etc/letsencrypt/live/example.com/cert.dh.pem

Ahora que todo está configurado, edite la configuración de host virtual de su dominio de la siguiente manera:

/etc/httpd/conf.d/example.com.conf

ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ DocumentRoot /var/www/example.com/public_html ErrorLog /var/log/httpd/example.com-error.log CustomLog /var/log/httpd/example.com-access.log combined SSLEngine On SSLCertificateFile /etc/letsencrypt/live/example.com/cert.dh.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem # Other Apache Configuration ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ DocumentRoot /var/www/example.com/public_html ErrorLog /var/log/httpd/example.com-error.log CustomLog /var/log/httpd/example.com-access.log combined SSLEngine On SSLCertificateFile /etc/letsencrypt/live/example.com/cert.dh.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem # Other Apache Configuration ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ DocumentRoot /var/www/example.com/public_html ErrorLog /var/log/httpd/example.com-error.log CustomLog /var/log/httpd/example.com-access.log combined SSLEngine On SSLCertificateFile /etc/letsencrypt/live/example.com/cert.dh.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem # Other Apache Configuration ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ DocumentRoot /var/www/example.com/public_html ErrorLog /var/log/httpd/example.com-error.log CustomLog /var/log/httpd/example.com-access.log combined SSLEngine On SSLCertificateFile /etc/letsencrypt/live/example.com/cert.dh.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem # Other Apache Configuration

Con la configuración anterior, estamos forzando HTTPS y redirigiendo desde la versión www a la no www. Siéntase libre de ajustar la configuración según sus necesidades.

Reinicie el servicio Apache para que los cambios surtan efecto:

sudo systemctl restart

Ahora puede abrir su sitio web usando https:// y notará un ícono de candado verde.

Renovación automática del certificado SSL Let's Encrypt

Los certificados de Let's Encrypt son válidos por 90 días. Para renovar automáticamente los certificados antes de que caduquen, crearemos un cronjob que se ejecutará dos veces al día y renovaremos automáticamente cualquier certificado 30 días antes de su vencimiento.

Ejecute el comando crontab para crear un nuevo cronjob que renovará el certificado, creará un nuevo archivo combinado que incluye la clave DH y reiniciará apache:

sudo crontab -e

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload

Guarde y cierre el archivo.

Para probar el proceso de renovación, puede usar el comando certbot seguido del interruptor --dry-run :

sudo certbot renew --dry-run

Si no hay errores, significa que el proceso de renovación fue exitoso.

Conclusión

En este tutorial, usó el certificado de cliente Let's Encrypt para descargar certificados SSL para su dominio. También ha creado fragmentos de Apache para evitar duplicar el código y ha configurado Apache para usar los certificados. Al final del tutorial, ha configurado un cronjob para la renovación automática de certificados.

apache centos vamos a encriptar certbot ssl

Esta publicación es parte de la instalación de LAMP Stack en la serie CentOS 7.

Otras publicaciones en esta serie:

• Cómo instalar Apache en CentOS 7 • Instalar MySQL en CentOS 7 • Cómo configurar Hosts virtuales de Apache en CentOS 7 • Apache seguro con Let's Encrypt en CentOS 7