GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo configurar múltiples SSL en una IP con Nginx

Con la escasez de espacio de direcciones disponible en IPv4, las direcciones IP son cada vez más difíciles de conseguir y, en algunos casos, cada vez más caras. Sin embargo, en la mayoría de los casos, esto no es un inconveniente. Los servidores son perfectamente capaces de alojar varios sitios web en una dirección IP, como lo han hecho durante años.

Pero hubo un tiempo en que el uso de un certificado SSL para asegurar el tráfico a su sitio requiere tener una dirección IPv4 separada para cada dominio protegido. Esto no se debe a que los SSL estuvieran vinculados a direcciones IP, o incluso a servidores, sino a que la solicitud de información del certificado SSL no especificaba qué dominio se estaba cargando y, por lo tanto, el servidor se vio obligado a responder con un solo certificado. Una discrepancia en el nombre provocó una advertencia de certificado inseguro y, por lo tanto, se requirió que el propietario del servidor tuviera direcciones IP únicas para todos los hosts SSL.

Afortunadamente, las limitaciones de IPv4 han puesto de relieve las nuevas tecnologías y la facilidad de uso, en particular, la indicación de nombre de servidor (SNI).

¿Por qué necesito un SSL?

Los certificados Secure Socket Layer (SSL) permiten la comunicación cifrada bidireccional entre un cliente y un servidor. Esto permite cualquier protección de datos de miradas indiscretas, incluida información confidencial como números de tarjetas de crédito o contraseñas. Los SSL están opcionalmente firmados por una autoridad de firma externa bien conocida, como GlobalSign. El uso más común de dichos certificados es proteger el tráfico web a través de HTTPS.

Al navegar por un sitio HTTPS, en lugar de mostrar un indicador positivo, los navegadores modernos muestran un negativo indicador de un sitio que no utilizando un SSL. Por lo tanto, los sitios web que no tienen un SSL tendrán una bandera roja de inmediato para cualquier visitante nuevo. Por lo tanto, los sitios que desean mantener su reputación se ven obligados a obtener un SSL.

Por suerte, es tan fácil conseguir e instalar un SSL, incluso gratis, que esto se reduce a un trámite básico. Cubriremos los detalles de esto a continuación.

¿Qué es SNI?

La indicación del nombre del servidor es una función del navegador y del servidor web en la que una solicitud HTTPS incluye un encabezado adicional, nombre_del_servidor. , a lo que el servidor puede responder con el certificado SSL adecuado. Esto permite que una sola dirección IP aloje cientos o miles de dominios, ¡cada uno con su propio SSL!

La tecnología SNI está disponible en todos los navegadores modernos y software de servidor web, por lo que, según W3, más del 98 % de los usuarios web podrán admitirla.

Comprobación previa al vuelo

Estaremos trabajando en un servidor VPS CentOS 7 que utiliza Nginx y PHP-FPM para alojar sitios web sin ningún panel de control (cPanel, Plesk, etc.). Esto se conoce comúnmente como una pila "LEMP", que sustituye Nginx por Apache en la pila "LAMP". Estas instrucciones serán similares a la mayoría de las otras versiones de Linux, aunque la instalación de Let's Encrypt para Ubuntu 18.04 será diferente. Incluiré instrucciones en paralelo para CentOS 7 y Ubuntu 18.04.

Para el resto de las instrucciones, supondremos que tiene Nginx instalado y configurado para alojar múltiples sitios web, incluida la configuración del firewall para abrir los puertos necesarios (80 y 443). Estamos conectados por SSH a un shell en nuestro servidor como root.

NotaSi tiene SSL para cada dominio, pero aún no están instalados, debe usar el Paso 3a para agregarlos manualmente. Si no tiene SSL y le gustaría usar el servicio gratuito Let's Encrypt para ordenarlos y configurarlos automáticamente, debe usar el Paso 3b .

Paso 1:habilitar SNI en Nginx

¡Nuestro primer paso ya está completo! Las versiones de repositorio modernas de Nginx se compilarán con compatibilidad con OpenSSL para la información SNI del servidor de forma predeterminada. Podemos confirmar esto en la línea de comando con:

nginx -V

Esto generará un montón de texto, pero estamos interesados ​​solo en esta línea:

...
TLS SNI support enabled
...

Si no tiene una línea como esta, tendrá que volver a compilar Nginx manualmente para incluir este soporte. Esta sería una instancia muy rara, como en una versión desactualizada de Nginx, una ya compilada manualmente desde la fuente con una biblioteca OpenSSL diferente. La versión de Nginx instalada por el repositorio CentOS 7 EPEL (1.12.2) y la incluida con Ubuntu 18.04 (1.14.0) admitirán SNI.

Paso 2:Configuración de hosts virtuales Nginx

Dado que ya configuró más de un dominio en Nginx, es probable que tenga bloques de configuración del servidor configurados para cada sitio en un archivo separado. En caso de que no lo haga, primero asegurémonos de que nuestros dominios estén configurados para tráfico que no sea SSL. Si es así, puede omitir este paso. Trabajaremos en dominio.com y ejemplo.com.

vim /etc/nginx/sites-available/domain.com

NotaSi no tiene carpetas habilitadas para sitios o sitios disponibles y desea usarlas, puede crear /etc/nginx/sites-disponible y /etc/nginx/sites-enabled con el mkdir dominio. Luego, dentro de /etc/nginx/nginx.conf , agregue esta línea en cualquier lugar dentro del http{} principal block (recomendamos ponerlo justo después de la línea include que habla de conf.d):

include /etc/nginx/sites-enabled/*;

De lo contrario, puede realizar sus configuraciones en /etc/nginx/conf.d/*.conf .

Como mínimo, inserte las siguientes opciones, reemplace la raíz del documento con la ruta real a los archivos de su sitio y agregue cualquier otra variable que necesite para sus sitios:

server {
listen 80;
server_name domain.com;
root /var/www/domain.com;
...
}

Se debe configurar un archivo similar para ejemplo.com y cualquier otro dominio que desee alojar. Una vez creados estos archivos, podemos habilitarlos con un enlace simbólico:

ln -s /etc/nginx/sites-available/domain.com /etc/nginx/sites-enabled/

ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Ahora, reiniciamos Nginx…

systemctl reload nginx

Esto vuelve a cargar los archivos de configuración sin reiniciar la aplicación. Podemos confirmar que los dos que acabamos de hacer se cargan usando:

nginx -T

Debería ver su nombre_del_servidor línea para dominio.com y ejemplo.com.

NotaLa escucha La línea incluida en el bloque del servidor anterior permitirá que el sitio escuche en cualquier IP que está en el servidor. Si desea especificar una IP en su lugar, puede utilizar IP:port formato en su lugar, así:

server {
listen 123.45.67.89:80;
...
}

Paso 3a:agregue los SSL existentes a los hosts virtuales de Nginx

Ahora que tenemos configuraciones en ejecución válidas, podemos agregar los SSL que tenemos para estos dominios como nuevos bloques de servidor en Nginx. Primero, guarde su certificado SSL y la clave (privada) en una carpeta global en el servidor, con nombres que indiquen el dominio relevante. Digamos que elige la carpeta global de /etc/ssl/ . Nuestros nombres, en este caso, serán /etc/ssl/domain.com.crt (que contiene el propio certificado y cualquier cadena de certificados de la autoridad firmante) y /etc/ssl/domain.com.key , que contiene la clave privada. Edite los archivos de configuración que creamos:

vim /etc/nginx/sites-available/domain.com

Agregue un nuevo bloque de servidor debajo del final del existente (fuera de la última llave) con la siguiente información:

server {
listen 443;
server_name domain.com;
root /var/www/domain.com;
ssl_certificate /etc/ssl/domain.com.crt;
ssl_certificate_key /etc/ssl/domain.com.key;
...
}

Tenga en cuenta el cambio del puerto de escucha a 443 (para HTTPS) y la adición del ssl_certificate y ssl_certificate_key líneas. En lugar de reescribir todo el bloque, puede copiar el bloque del servidor original y luego agregar estas líneas adicionales, mientras cambia el puerto de escucha. Guarde este archivo y vuelva a cargar la configuración de Nginx.

systemctl reload nginx

Confirmamos nuevamente que el cambio está en su lugar usando:

nginx -T

Para algunas configuraciones verás dos líneas de nombre_servidor para dominio.com y ejemplo.com, una con el puerto 80 y otra con el puerto 443. Si lo hace, puede saltar al paso 4; de lo contrario, continúe con el paso siguiente.

Paso 3b:instalar y configurar Let's Encrypt

A continuación, configuremos el proveedor de SSL gratuito Let's Encrypt para que firme automáticamente los certificados de todos los dominios que acabamos de configurar en Nginx. En Ubuntu 18.04 , agregue el PPA e instale los scripts de certificado con apt itud:

add-apt-repository ppa:certbot/certbot

apt-get update

apt-get install certbot python-certbot-nginx

En CentOS 7 , instalamos el repositorio EPEL e instalamos el asistente de certificados desde allí.

yum install epel-release

yum install certbot python2-certbot-nginx

En ambos sistemas, ahora podemos leer la configuración de Nginx y pedirle al Certbot que nos asigne algunos certificados.

certbot --nginx

Esto le hará algunas preguntas sobre qué dominios le gustaría usar (puede dejar la opción en blanco para seleccionar todos los dominios) y si desea que Nginx redirija el tráfico a su nuevo SSL (¡lo haríamos!). Después de que termine su proceso de firma, Nginx debería volver a cargar automáticamente su configuración, pero en caso de que no lo haga, vuelva a cargarlo manualmente:

systemctl reload nginx

Ahora puede verificar la configuración en ejecución con:

nginx -T

Ahora debería ver dos líneas de nombre_servidor para dominio.com y ejemplo.com, una con el puerto 80 y otra con el puerto 443.

Los certificados de Let's Encrypt solo son válidos durante 90 días desde su emisión, por lo que queremos asegurarnos de que se renueven automáticamente. Edite el archivo cron para el usuario raíz ejecutando:

crontab -e

El cron debería verse así:

45 2 * * 3,6 certbot renew && systemctl reload nginx

Una vez que guarde este archivo, todos los miércoles y sábados a las 2:45 a. m., el certbot El comando verificará las renovaciones necesarias, descargará e instalará automáticamente los certificados, seguido de una recarga de la configuración de Nginx.

Paso 4:Verificar la instalación y la validez

Ahora deberíamos verificar la validez de nuestros SSL y asegurarnos de que los navegadores vean el certificado correctamente. Visite sslcheck.liquidweb.com y escriba sus nombres de dominio para verificar el SSL del sitio en su servidor. Debería ver cuatro marcas de verificación verdes que indican protección SSL.

Esperamos que haya disfrutado de nuestro tutorial sobre cómo instalar SSL en varios sitios dentro de un servidor. Los clientes de Liquid Web tienen acceso a nuestro equipo de soporte 24/7. Podemos ayudar con SSL firmado o solicitar un nuevo servidor para una fácil transferencia a Liquid Web.


Linux
  1. Cómo configurar varios sitios web con el servidor web Apache

  2. Cómo configurar origen Cloudflare SSL con Nginx

  3. Cómo proteger Nginx con SSL y Let's Encrypt en FreeBSD

  4. Cómo configurar múltiples certificados SSL en un CentOS VPS con Apache usando una dirección IP

  5. Cómo instalar Let's Encrypt SSL en Ubuntu 18.04 con Nginx

Cómo configurar Nginx con soporte HTTP/2 en Ubuntu 18.04

Cómo proteger el servidor LEMP con Let's Encrypt Free SSL en Ubuntu 18.04 VPS

Cómo configurar la sincronización de tiempo con NTP en Ubuntu 18.04

Cómo configurar un servidor Seafile con Nginx en Ubuntu 18.04

Cómo configurar un servidor FTP con ProFTPD en Ubuntu 18.04

Cómo configurar un servidor de correo con Modoboa en Ubuntu 20.04