

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# AL2 Tutoriales
<a name="al2-tutorials"></a>

 Los siguientes tutoriales le muestran cómo realizar tareas comunes con instancias de Amazon EC2 en ejecución. AL2 Para obtener tutoriales en video, consulte [Vídeos y laboratorios instructivos de AWS](https://www.aws.training/). 

Para AL2023 obtener instrucciones, consulte [los tutoriales](https://docs.aws.amazon.com/linux/al2023/ug/tutorials-al2023.html) de la *Guía del usuario de Amazon Linux 2023*.

**Topics**
+ [Tutorial: Instale un servidor LAMP en AL2](ec2-lamp-amazon-linux-2.md)
+ [Tutorial: Configurar SSL/TLS en AL2](SSL-on-amazon-linux-2.md)
+ [Tutorial: aloje un WordPress blog en AL2](hosting-wordpress.md)

# Tutorial: Instale un servidor LAMP en AL2
<a name="ec2-lamp-amazon-linux-2"></a>

Los siguientes procedimientos le ayudan a instalar un servidor web Apache compatible con PHP y [MariaDB](https://mariadb.org/about/) (una bifurcación de MySQL desarrollada por la comunidad) AL2 en su instancia (a veces denominada servidor web LAMP o pila LAMP). Puede utilizar este servidor para alojar un sitio web estático o implementar una aplicación PHP dinámica que lea y escriba información en una base de datos.

**importante**  
Si está intentando configurar un servidor web LAMP en una distribución diferente, como Ubuntu o Red Hat Enterprise Linux, este tutorial no funcionará. Para ello AL2023, consulte [Instalar un servidor LAMP en](https://docs.aws.amazon.com//linux/al2023/ug/ec2-lamp-amazon-linux-2023.html). AL2023 Para Ubuntu, consulte la siguiente documentación de la comunidad de Ubuntu: [ApacheMySQLPHP](https://help.ubuntu.com/community/ApacheMySQLPHP). Para otras distribuciones, consulte su documentación específica.

**Opción: completar este tutorial con la automatización**  
Para completar este tutorial utilizando la AWS Systems Manager automatización en lugar de las siguientes tareas, ejecute el [AWS documento Docs-Install - ALAMPServer](https://console.aws.amazon.com/systems-manager/automation/execute/AWSDocs-InstallALAMPServer-AL2) Automation. AL2

**Topics**
+ [Paso 1: Preparar el servidor LAMP](#prepare-lamp-server)
+ [Paso 2: Probar el servidor LAMP](#test-lamp-server)
+ [Paso 3: Proteger el servidor de base de datos](#secure-mariadb-lamp-server)
+ [Paso 4: Instalación (opcional) phpMyAdmin](#install-phpmyadmin-lamp-server)
+ [Solución de problemas](#lamp-troubleshooting)
+ [Temas relacionados](#lamp-more-info)

## Paso 1: Preparar el servidor LAMP
<a name="prepare-lamp-server"></a>

**Requisitos previos**
+ En este tutorial se supone que ya ha lanzado una nueva instancia con AL2 un nombre de DNS público al que se pueda acceder desde Internet. Para obtener más información, consulte [Lanzar una instancia](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html) en la *Guía del usuario de Amazon EC2*. También debe haber configurado el grupo de seguridad para que permita las conexiones SSH (puerto 22), HTTP (puerto 80) y HTTPS (puerto 443). Para obtener más información sobre estos requisitos previos, consulte [las reglas de los grupos de seguridad](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules.html) en la Guía del *usuario de Amazon EC2*.
+ El siguiente procedimiento instala la última versión de PHP disponible AL2 actualmente. `php8.2` Si tiene previsto usar otras aplicaciones de PHP diferentes a las que se indican en este tutorial, debe comprobar su compatibilidad con `php8.2`.<a name="install_apache-2"></a>

**Para preparar el servidor LAMP**

1. [Conéctese a la instancia](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html).

1. Para asegurarse de que todos los paquetes de software están actualizados, realice una actualización rápida del software en la instancia. Este proceso puede durar unos minutos, pero es importante realizarlo para asegurarse de que tiene las actualizaciones de seguridad y las correcciones de errores más recientes.

   La opción `-y` instala las actualizaciones sin necesidad de confirmación. Si le gustaría examinar las actualizaciones antes de la instalación, puede omitir esta opción.

   ```
   [ec2-user ~]$ sudo yum update -y
   ```

1. Instale los repositorios de Amazon Linux Extras `mariadb10.5` para obtener la versión más recientes del paquete MariaDB.

   ```
   [ec2-user ~]$ sudo amazon-linux-extras install mariadb10.5
   ```

   Si recibe el error que indica `sudo: amazon-linux-extras: command not found`, entonces la instancia no se lanzó con una AMI; de Amazon Linux 2 (quizás está utilizando la Amazon Linux AMI en su lugar). Puede ver la versión de Amazon Linux usando el comando siguiente:

   ```
   cat /etc/system-release
   ```

1. Instale los repositorios de `php8.2` Amazon Linux Extras para obtener la última versión del PHP paquete. AL2

   ```
   [ec2-user ~]$ sudo amazon-linux-extras install php8.2
   ```

1. Ahora que la instancia está actualizada, puede instalar el servidor web Apache, MariaDB y los paquetes de software PHP. Utilice el comando yum install para instalar varios paquetes de software y todas las dependencias relacionadas al mismo tiempo.

   ```
   [ec2-user ~]$ sudo yum install -y httpd
   ```

   Puede ver las versiones actuales de estos paquetes mediante el comando siguiente:

   ```
   yum info package_name
   ```

1. Inicie el servidor web Apache.

   ```
   [ec2-user ~]$ sudo systemctl start httpd
   ```

1.  Utilice el comando **systemctl** para configurar el servidor web Apache de forma que se inicie cada vez que arranque el sistema. 

   ```
   [ec2-user ~]$ sudo systemctl enable httpd
   ```

   Puede verificar que **httpd** está activo ejecutando el siguiente comando:

   ```
   [ec2-user ~]$ sudo systemctl is-enabled httpd
   ```

1. Si aún no lo ha hecho, añada una regla de seguridad para permitir las conexiones HTTP entrantes (puerto 80) con la instancia. De forma predeterminada, se configuró un grupo de ***N*seguridad launch-wizard** para la instancia durante la inicialización. Este grupo contiene una sola regla para permitir las conexiones SSH. 

   1. Abra la consola de Amazon EC2 en [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

   1. Elija **Instances (Instancias)** y seleccione la instancia.

   1. En la pestaña **Security (Seguridad)**, consulte las reglas de entrada. Debería ver la siguiente regla:

      ```
      Port range   Protocol     Source
      22           tcp          0.0.0.0/0
      ```
**aviso**  
El uso `0.0.0.0/0` permite que todas las IPv4 direcciones accedan a la instancia mediante SSH. Esto es aceptable para un periodo de tiempo corto en un entorno de prueba, pero no es seguro en entornos de producción. En entornos de producción, solo se autoriza el acceso a la instancia a una dirección IP o a un rango de direcciones IP específicas.

   1. Elija el vínculo para el grupo de seguridad. Con los procedimientos que se describen en [Añadir reglas a un grupo de seguridad](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule), añada una nueva regla de seguridad entrante con los siguientes valores:
      + **Tipo**: HTTP
      + **Protocolo**: TCP
      + **Rango de puertos**: 80
      + **Origen**: personalizado

1. Pruebe el servidor web. En un navegador web, escriba la dirección DNS pública (o la dirección IP pública) de la instancia. Si no hay ningún contenido en `/var/www/html`, debería aparecer la página de prueba de Apache. Puede obtener el DNS público de la instancia con la consola de Amazon EC2 (compruebe la columna **Public DNS (DNS pública)**; si está oculta, elija el icono con forma de engranaje, **Show/Hide Columns (Mostrar/ocultar columnas)** y elija **Public DNS (DNS pública)**).

   Compruebe que el grupo de seguridad de la instancia contenga una regla para permitir el tráfico HTTP en el puerto 80. Para obtener más información, consulte [Agregar reglas al grupo de seguridad](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule).
**importante**  
Si no utiliza Amazon Linux, es posible que también tenga que configurar el firewall en su instancia para permitir estas conexiones. Para obtener más información acerca de cómo configurar el firewall, consulte la documentación de su distribución específica.  
![\[La prueba del servidor muestra la página de prueba de Apache.\]](http://docs.aws.amazon.com/es_es/linux/al2/ug/images/apache_test_page_al2_2.4.png)

Apache **httpd** sirve archivos que se guardan en un directorio denominado raíz de documentos de Apache. La raíz de documentos de Apache de Amazon Linux es `/var/www/html`, que es propiedad del directorio raíz de manera predeterminada.

Para permitir que la cuenta `ec2-user` manipule archivos de este directorio, debe modificar la propiedad y los permisos del directorio. Existen muchas formas de realizar esta tarea. En este tutorial se añade el usuario `ec2-user` al grupo `apache`, se otorga al grupo `apache` la propiedad del directorio `/var/www` y se asignan permisos de escritura al grupo.<a name="setting-file-permissions-2"></a>

**Para establecer permisos de archivo**

1. Añada el usuario (en este caso, el usuario `ec2-user`) al grupo `apache`.

   ```
   [ec2-user ~]$ sudo usermod -a -G apache ec2-user
   ```

1. Cierre sesión, luego vuelva a iniciarla para elegir el nuevo grupo y, a continuación, verifique si pertenece a este.

   1. Cierre sesión (utilice el comando **exit** o cierre la ventana del terminal):

      ```
      [ec2-user ~]$ exit
      ```

   1. Para verificar si pertenece al grupo `apache`, vuelva a conectarse a la instancia y, entonces, ejecute el siguiente comando:

      ```
      [ec2-user ~]$ groups
      ec2-user adm wheel apache systemd-journal
      ```

1. Cambie la propiedad de grupo de `/var/www` y su contenido al grupo `apache`.

   ```
   [ec2-user ~]$ sudo chown -R ec2-user:apache /var/www
   ```

1. Para agregar permisos de escritura de grupo y establecer el ID de grupo en futuros subdirectorios, cambie los permisos del directorio `/var/www` y sus subdirectorios.

   ```
   [ec2-user ~]$ sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;
   ```

1. Para agregar permisos de escritura de grupo, cambie recursivamente los permisos de archivo de `/var/www` y sus subdirectorios:

   ```
   [ec2-user ~]$ find /var/www -type f -exec sudo chmod 0664 {} \;
   ```

Ahora el usuario `ec2-user` (y cualquier futuro miembro del grupo `apache`) puede añadir, eliminar y editar archivos en la raíz de documentos de Apache, por lo que podrá añadir contenido, como un sitio web estático o una aplicación PHP.

**Para proteger el servidor web (opcional)**  
Un servidor web que ejecuta el protocolo HTTP no proporciona seguridad de transporte de los datos que envía o recibe. Cuando se conecta a un servidor HTTP mediante un navegador web, lo URLs que visita, el contenido de las páginas web que recibe y el contenido (incluidas las contraseñas) de cualquier formulario HTML que envíe son visibles para los intrusos en cualquier punto de la red. La práctica recomendada para proteger el servidor web es instalar soporte para HTTPS (HTTP seguro), que protege los datos con cifrado SSL/TLS.

Para obtener información sobre la habilitación de HTTPS en su servidor, consulte [Tutorial: Configurar SSL/TLS en AL2](SSL-on-amazon-linux-2.md).

## Paso 2: Probar el servidor LAMP
<a name="test-lamp-server"></a>

Si el servidor está instalado y en funcionamiento, y tiene establecidos correctamente los permisos de archivos, la cuenta `ec2-user` debería poder crear un archivo PHP en el directorio `/var/www/html`, que está disponible en Internet.

**Para probar el servidor LAMP**

1. Cree un archivo PHP en la raíz de documentos de Apache.

   ```
   [ec2-user ~]$ echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
   ```

   Si recibe el error "Permiso denegado" al intentar ejecutar este comando, intente cerrar sesión e iniciarla de nuevo para actualizar los permisos de grupo correctos que ha configurado en [Para establecer permisos de archivo](#setting-file-permissions-2).

1. En un navegador web, escriba la URL del archivo que acaba de crear. Esta URL es la dirección DNS pública de la instancia seguida de una barra diagonal y el nombre del archivo. Por ejemplo:

   ```
   http://my.public.dns.amazonaws.com/phpinfo.php
   ```

   Debería ver la página de información PHP.:  
![\[La prueba del servidor LAMP muestra la página de información de PHP.\]](http://docs.aws.amazon.com/es_es/linux/al2/ug/images/phpinfo7.2.10.png)

   Si no ve esta página, compruebe que el archivo `/var/www/html/phpinfo.php` se ha creado correctamente en el paso anterior. También puede verificar que todos los paquetes necesarios se han instalado con el comando siguiente:

   ```
   [ec2-user ~]$ sudo yum list installed httpd mariadb-server php-mysqlnd
   ```

   Si alguno de los paquetes requeridos no aparece en la salida, instálelo con el comando **sudo yum install *package***. Además, verifique que los extras `php7.2` y `lamp-mariadb10.2-php7.2` estén habilitados en la salida del comando **amazon-linux-extras**.

1. Elimine el archivo `phpinfo.php`. Aunque esta información puede resultar útil, no se debe difundir por Internet por motivos de seguridad.

   ```
   [ec2-user ~]$ rm /var/www/html/phpinfo.php
   ```

Ahora ya tiene un servidor web LAMP totalmente funcional. Si añade contenido a la raíz del documento de Apache en `/var/www/html`, debería poder ver ese contenido en la dirección DNS pública de su instancia. 

## Paso 3: Proteger el servidor de base de datos
<a name="secure-mariadb-lamp-server"></a>

La instalación predeterminada del servidor MariaDB posee varias características que son perfectas para las pruebas y el desarrollo, pero que se deben deshabilitar o eliminar para los servidores de producción. El comando **mysql\$1secure\$1installation** le guía a través del proceso de configuración de una contraseña raíz y de eliminación de las características que no son seguras de la instalación. Aunque no tenga pensado utilizar el servidor MariaDB, recomendamos realizar este procedimiento.<a name="securing-maria-db"></a>

**Para proteger el servidor MariaDB**

1. Inicie el servidor MariaDB.

   ```
   [ec2-user ~]$ sudo systemctl start mariadb
   ```

1. Ejecute **mysql\$1secure\$1installation**.

   ```
   [ec2-user ~]$ sudo mysql_secure_installation
   ```

   1. Cuando se le solicite, escriba una contraseña para la cuenta raíz.

      1. Escriba la contraseña raíz actual. De manera predeterminada, la cuenta raíz no tiene configurada ninguna contraseña. Pulse Intro.

      1. Escriba **Y** para configurar una contraseña y escriba una contraseña segura dos veces. Para obtener más información sobre cómo crear una contraseña segura, consulte. [https://identitysafe.norton.com/password-generator/](https://identitysafe.norton.com/password-generator/) Procure guardar esta contraseña en un lugar seguro.

         La configuración de una contraseña raíz para MariaDB es solo la medida más básica para proteger la base de datos. Cuando se crea o se instala una aplicación basada en base de datos, normalmente se crea un usuario del servicio de la base de datos para esa aplicación y se evita usar la cuenta raíz para cualquier cosa que no sea la administración de la base de datos. 

   1. Escriba **Y** para eliminar las cuentas de usuarios anónimos.

   1. Escriba **Y** para deshabilitar el inicio de sesión raíz remoto.

   1. Escriba **Y** para eliminar la base de datos de prueba.

   1. Escriba **Y** para volver a cargar las tablas de privilegios y guardar los cambios.

1. (Opcional) Si no tiene pensado utilizar el servidor MariaDB de inmediato, deténgalo. Puede reiniciarlo cuando lo necesite.

   ```
   [ec2-user ~]$ sudo systemctl stop mariadb
   ```

1. (Opcional) Si desea que el servidor MariaDB se inicie cada vez que arranque el sistema, escriba el siguiente comando.

   ```
   [ec2-user ~]$ sudo systemctl enable mariadb
   ```

## Paso 4: Instalación (opcional) phpMyAdmin
<a name="install-phpmyadmin-lamp-server"></a>

[phpMyAdmin](https://www.phpmyadmin.net/)es una herramienta de administración de bases de datos basada en la web que puede utilizar para ver y editar las bases de datos MySQL de su instancia EC2. Siga estos pasos para instalar y configurar `phpMyAdmin` en la instancia de Amazon Linux.

**importante**  
No recomendamos utilizarla `phpMyAdmin` para acceder a un servidor LAMP a menos que esté habilitado SSL/TLS en Apache; de lo contrario, la contraseña de administrador de la base de datos y otros datos se transmitirán de forma insegura a través de Internet. Para ver las recomendaciones de seguridad de los desarrolladores, consulte [Proteger la phpMyAdmin instalación](https://docs.phpmyadmin.net/en/latest/setup.html#securing-your-phpmyadmin-installation). Para obtener información general sobre asegurar un servidor web en una instancia de EC2, consulte [Tutorial: Configurar SSL/TLS en AL2](SSL-on-amazon-linux-2.md).

**Para instalar phpMyAdmin**

1. Instale las dependencias requeridas.

   ```
   [ec2-user ~]$ sudo yum install php-mbstring php-xml -y
   ```

1. Reinicie Apache.

   ```
   [ec2-user ~]$ sudo systemctl restart httpd
   ```

1. Reinicie `php-fpm`.

   ```
   [ec2-user ~]$ sudo systemctl restart php-fpm
   ```

1. Navegue a la raíz de documentos de Apache: `/var/www/html`.

   ```
   [ec2-user ~]$ cd /var/www/html
   ```

1. Seleccione un paquete fuente para la phpMyAdmin versión más reciente en [https://www.phpmyadmin.net/downloads](https://www.phpmyadmin.net/downloads). Para descargar el archivo directamente a la instancia, copie el link y péguelo en un comando **wget** como el de este ejemplo:

   ```
   [ec2-user html]$ wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
   ```

1. Cree la carpeta `phpMyAdmin` y extraiga aquí el paquete con el comando siguiente:

   ```
   [ec2-user html]$ mkdir phpMyAdmin && tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C phpMyAdmin --strip-components 1
   ```

1. Elimine el *phpMyAdmin-latest-all-languages.tar.gz* archivo tar.

   ```
   [ec2-user html]$ rm phpMyAdmin-latest-all-languages.tar.gz
   ```

1.  (Opcional) Si el servidor MySQL no está en ejecución, inícielo ahora.

   ```
   [ec2-user ~]$ sudo systemctl start mariadb
   ```

1. En un navegador web, escriba la URL de la phpMyAdmin instalación. Esta URL es la dirección DNS pública (o la dirección IP pública) de la instancia, seguida de una barra inclinada y el nombre del directorio de instalación. Por ejemplo:

   ```
   http://my.public.dns.amazonaws.com/phpMyAdmin
   ```

   Debería ver la página de phpMyAdmin inicio de sesión:  
![\[El resultado de escribir la URL de la phpMyAdmin instalación es la pantalla de inicio de phpMyAdmin sesión.\]](http://docs.aws.amazon.com/es_es/linux/al2/ug/images/phpmyadmin_login.png)

1. Inicie sesión en la phpMyAdmin instalación con el nombre `root` de usuario y la contraseña root de MySQL que creó anteriormente.

   Antes de poner en servicio la instalación, debe configurarla. Le sugerimos que comience con la creación manual del archivo de configuración de la siguiente manera:

   1. Para comenzar con un archivo de configuración mínimo, utilice su editor de texto favorito para crear un archivo nuevo y luego, copie el contenido de `config.sample.inc.php` en él.

   1. Guarde el archivo como `config.inc.php` en el phpMyAdmin directorio que lo contiene`index.php`.

   1. Consulte las instrucciones posteriores a la creación del archivo en la sección [Uso del script de configuración](https://docs.phpmyadmin.net/en/latest/setup.html#using-the-setup-script) de las instrucciones de phpMyAdmin instalación para cualquier configuración adicional.

    Para obtener información sobre su uso phpMyAdmin, consulte la [Guía del phpMyAdmin usuario](http://docs.phpmyadmin.net/en/latest/user.html).

## Solución de problemas
<a name="lamp-troubleshooting"></a>

En esta sección, se ofrecen sugerencias para resolver los problemas comunes que puede encontrarse al configurar un servidor LAMP nuevo. 

### No puedo conectarme a mi servidor mediante un navegador web.
<a name="is_apache_on"></a>

Realice las siguientes verificaciones para ver si el servidor web Apache funciona y se puede obtener acceso a él.
+ **¿El servidor web funciona?**

  Puede verificar que **httpd** está activo ejecutando el siguiente comando:

  ```
  [ec2-user ~]$ sudo systemctl is-enabled httpd
  ```

  Si el proceso **httpd** no se está ejecutando, repita los pasos que se describen en [Para preparar el servidor LAMP](#install_apache-2).
+ **¿El firewall está configurado correctamente?**

  Compruebe que el grupo de seguridad de la instancia contenga una regla para permitir el tráfico HTTP en el puerto 80. Para obtener más información, consulte [Agregar reglas al grupo de seguridad](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule).

### No puedo conectarme a mi servidor mediante HTTPS.
<a name="is-https-enabled"></a>

Realice las siguientes verificaciones para verificar si su servidor web Apache está configurado para admitir HTTPS.
+ **¿El servidor web está configurado correctamente?**

  Después de instalar Apache, el servidor se configura para el tráfico HTTP. Para admitir HTTPS, habilite TLS en el servidor e instale un certificado SSL. Para obtener información, consulte [Tutorial: Configurar SSL/TLS en AL2](SSL-on-amazon-linux-2.md).
+ **¿El firewall está configurado correctamente?**

  Verifique que el grupo de seguridad de la instancia contiene una regla para permitir el tráfico HTTPS en el puerto 443. Para obtener más información, consulte [Agregar reglas a un grupo de seguridad](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule).

## Temas relacionados
<a name="lamp-more-info"></a>

Para obtener más información sobre la transferencia de archivos a la instancia o la instalación de un WordPress blog en el servidor web, consulte la siguiente documentación:
+ [Transfiera archivos a su instancia de Linux mediante WinSCP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html#Transfer_WinSCP).
+ [Transfiera archivos a instancias de Linux mediante un SCP cliente](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-linux-inst-ssh.html#linux-file-transfer-scp).
+ [Tutorial: aloje un WordPress blog en AL2](hosting-wordpress.md)

Para obtener más información acerca de los comandos y el software que se utilizan en este tutorial, visite las siguientes páginas web:
+ Servidor web Apache: [http://httpd.apache.org/](http://httpd.apache.org/)
+ Servidor de bases de datos MariaDB: [https://mariadb.org/](https://mariadb.org/)
+ Lenguaje de programación PHP: [http://php.net/](http://php.net/)
+ El `chmod` comando: [https://en.wikipedia. org/wiki/Chmod](https://en.wikipedia.org/wiki/Chmod)
+ El `chown` comando: [https://en.wikipedia. org/wiki/Chown](https://en.wikipedia.org/wiki/Chown)

Para obtener más información acerca del registro de un nombre de dominio para el servidor web o la transferencia de un nombre de dominio existente a este host, consulte el tema [Creación y migración de dominios y subdominios a Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/creating-migrating.html) en la *Guía para desarrolladores de Amazon Route 53*.

# Tutorial: Configurar SSL/TLS en AL2
<a name="SSL-on-amazon-linux-2"></a>

 Layer/Transport Secure Sockets Layer Security (SSL/TLS) creates an encrypted channel between a web server and web client that protects data in transit from being eavesdropped on. This tutorial explains how to add support manually for SSL/TLSen una instancia EC2 con AL2 un servidor web Apache). En este tutorial, se presupone que no está utilizando un balanceador de carga. Si utiliza Elastic Load Balancing, puede elegir configurar la descarga SSL en el balanceador de carga, mediante un certificado de [AWS Certificate Manager](https://aws.amazon.com/certificate-manager/) en su lugar.

Por motivos históricos, el cifrado web se suele denominar simplemente SSL. Aunque los navegadores web siguen admitiendo SSL, el protocolo que lo sustituye, TLS, es menos vulnerable a los ataques. AL2 deshabilita el soporte del lado del servidos para todas las versiones de SSL de forma predeterminada. [Organismos de estándares de seguridad](https://www.ssl.com/article/deprecating-early-tls/) consideran que TLS 1.0 no es seguro. TLS 1.0 y TLS 1.1 han quedado formalmente [obsoletos](https://datatracker.ietf.org/doc/rfc8996/) en marzo de 2021. Este tutorial contiene asesoramiento basado exclusivamente en la habilitación de TLS 1.2. TLS 1.3 se finalizó en 2018 y estará disponible AL2 siempre que se admita y habilite la biblioteca TLS subyacente (OpenSSL en este tutorial). [Los clientes deben ser compatibles con TLS 1.2 o una versión posterior antes del 28 de junio de 2023](https://aws.amazon.com/blogs/security/tls-1-2-required-for-aws-endpoints/). Para obtener más información sobre el estándar de cifrado actualizado, consulte [RFC 7568](https://tools.ietf.org/html/rfc7568) y [RFC 8446](https://tools.ietf.org/html/rfc8446).

Este tutorial se refiere a un cifrado web moderno tan simple como TLS.

**importante**  
Estos procedimientos están diseñados para usarse con AL2. También se supone que comienza con una instancia Amazon EC2 nueva. Si está intentando configurar una instancia EC2 que ejecute una distribución diferente o una instancia que ejecute una versión anterior de, es posible que algunos de AL2 los procedimientos de este tutorial no funcionen. Para Ubuntu, consulte la siguiente documentación de la comunidad: [OpenSSL on Ubuntu](https://help.ubuntu.com/community/OpenSSL) (OpenSSL en Ubuntu). Para Red Hat Enterprise Linux, consulte lo siguiente: [Configuración del servidor web HTTP Apache](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/deploying_different_types_of_servers/setting-apache-http-server_deploying-different-types-of-servers). Para otras distribuciones, consulte su documentación específica.

**nota**  
Como alternativa, puede usar AWS Certificate Manager (ACM) para los enclaves de AWS Nitro, que es una aplicación de enclave que le permite usar SSL/TLS certificados públicos y privados con sus aplicaciones web y servidores que se ejecutan en instancias de Amazon EC2 con Nitro Enclaves. AWS Nitro Enclaves es una capacidad de Amazon EC2 que permite la creación de entornos informáticos aislados para proteger y procesar de forma segura datos altamente confidenciales, SSL/TLS como certificados y claves privadas.  
ACM para Nitro Enclaves funciona con **nginx** ejecutándose en su instancia de Amazon EC2 Linux para crear claves privadas, distribuir certificados y claves privadas y para administrar las renovaciones de certificados.  
Para utilizar ACM para Nitro Enclaves, debe utilizar una instancia Linux habilitada para enclave.  
Para obtener más información, consulte [¿Qué es AWS](https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html) Nitro Enclaves? y [AWS Certificate Manager para ver Nitro Enclaves](https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave-refapp.html) en la Guía del usuario de *AWS Nitro* Enclaves.

**Topics**
+ [Requisitos previos](#ssl_prereq)
+ [Paso 1: Habilitar TLS en el servidor](#ssl_enable)
+ [Paso 2: Obtener un certificado firmado por una CA](#ssl_certificate)
+ [Paso 3: Probar y reforzar la configuración de seguridad](#ssl_test)
+ [Solución de problemas](#troubleshooting)

## Requisitos previos
<a name="ssl_prereq"></a>

Siga estos pasos antes de comenzar este tutorial:
+ Lance una AL2 instancia respaldada por Amazon EBS. Para obtener más información, consulte [Lanzar una instancia](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html) en la *Guía del usuario de Amazon EC2*.
+ Configure los grupos de seguridad para que la instancia acepte conexiones en los siguientes puertos TCP: 
  + SSH (puerto 22)
  + HTTP (puerto 80)
  + HTTPS (puerto 443)

  Para obtener más información, consulte [Reglas del grupo de seguridad](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules.html) en la *Guía del usuario de Amazon EC2*.
+ Instale el servidor web Apache. Para step-by-step obtener instrucciones, consulte el [tutorial: Instalación de un servidor web LAMP en AL2](ec2-lamp-amazon-linux-2.md). Solo es necesario el paquete httpd y sus dependencias; por lo que puede omitir las instrucciones relacionadas con PHP y MariaDB.
+ Para identificar y autenticar sitios web, la infraestructura de clave pública (PKI) de TLS se basa en el sistema de nombres de dominio (DNS). Si tiene pensado utilizar la instancia de EC2 para alojar un sitio web público, tiene que registrar un nombre de dominio para el servidor web o transferir un nombre de dominio existente al host de Amazon EC2. Para hacer esto, hay disponibles numerosos servicios de registro de dominios y alojamiento de DNS de terceros o bien puede utilizar [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html). 

## Paso 1: Habilitar TLS en el servidor
<a name="ssl_enable"></a>

**Opción: completar este tutorial con la automatización**  
Para completar este tutorial utilizando la AWS Systems Manager automatización en lugar de las siguientes tareas, ejecute el [documento de automatización](https://console.aws.amazon.com/systems-manager/documents/AWSDocs-Configure-SSL-TLS-AL2/).

Este procedimiento le guiará por el proceso de configurar el TLS AL2 con un certificado digital autofirmado. 

**nota**  
Se puede utilizar un certificado autofirmado para las pruebas, pero no para la producción. Si expone a Internet su certificado autofirmado, los visitantes del sitio recibirán advertencias de seguridad. 

**Para habilitar TLS en un servidor**

1. [Conéctese a su instancia](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html) y confirme que Apache se está ejecutando.

   ```
   [ec2-user ~]$ sudo systemctl is-enabled httpd
   ```

   Si el valor devuelto no es "enabled", inicie Apache y configúrelo para que se inicie cada vez que arranque el sistema.

   ```
   [ec2-user ~]$ sudo systemctl start httpd && sudo systemctl enable httpd
   ```

1. Para asegurarse de que todos los paquetes de software están actualizados, realice una actualización rápida del software en la instancia. Este proceso puede durar unos minutos, pero es importante realizarlo para asegurarse de que tiene las actualizaciones de seguridad y las correcciones de errores más recientes.
**nota**  
La opción `-y` instala las actualizaciones sin necesidad de confirmación. Si le gustaría examinar las actualizaciones antes de la instalación, puede omitir esta opción.

   ```
   [ec2-user ~]$ sudo yum update -y
   ```

1. Ahora que la instancia está actualizada y admite TLS instalando el módulo de Apache `mod_ssl`.

   ```
   [ec2-user ~]$ sudo yum install -y mod_ssl
   ```

   La instancia tiene ahora los archivos siguientes que utiliza para configurar el servidor seguro y crear un certificado para pruebas:
   +  `/etc/httpd/conf.d/ssl.conf` 

     El archivo de configuración para mod\$1ssl. Contiene *directivas* que le indican a Apache donde encontrar claves de cifrado y certificados, las versiones de protocolo TLS que se permiten y los cifrados que se aceptan. 
   + `/etc/pki/tls/certs/make-dummy-cert`

     Un script para generar un certificado X.509 autofirmado y una clave privada para su host de servidor. Este certificado es útil para probar si Apache está configurado correctamente para utilizar TLS. Dado que no ofrece ninguna prueba de identidad, no se debería utilizar en producción. Si se utiliza en la producción, dispara advertencias en los navegadores web.

1. Ejecute el script para generar un certificado ficticio autofirmado y una clave para pruebas.

   ```
   [ec2-user ~]$ cd /etc/pki/tls/certs
   sudo ./make-dummy-cert localhost.crt
   ```

   Esto genera un nuevo archivo `localhost.crt` en el directorio `/etc/pki/tls/certs/`. El nombre de archivo especificado coincide con el valor predeterminado que se ha asignado en la directiva **SSLCertificateFile** en `/etc/httpd/conf.d/ssl.conf`. 

   Este archivo contiene un certificado autofirmado y la clave privada del certificado. Apache requiere que el certificado y la clave estén en formato PEM que consta de caracteres ASCII codificados en Base64 contenidos entre las líneas "BEGIN" y "END", como en el siguiente ejemplo abreviado.

   ```
   -----BEGIN PRIVATE KEY-----
   MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQD2KKx/8Zk94m1q
   3gQMZF9ZN66Ls19+3tHAgQ5Fpo9KJDhzLjOOCI8u1PTcGmAah5kEitCEc0wzmNeo
   BCl0wYR6G0rGaKtK9Dn7CuIjvubtUysVyQoMVPQ97ldeakHWeRMiEJFXg6kZZ0vr
   GvwnKoMh3DlK44D9dX7IDua2PlYx5+eroA+1Lqf32ZSaAO0bBIMIYTHigwbHMZoT
   ...
   56tE7THvH7vOEf4/iUOsIrEzaMaJ0mqkmY1A70qQGQKBgBF3H1qNRNHuyMcPODFs
   27hDzPDinrquSEvoZIggkDMlh2irTiipJ/GhkvTpoQlv0fK/VXw8vSgeaBuhwJvS
   LXU9HvYq0U6O4FgD3nAyB9hI0BE13r1HjUvbjT7moH+RhnNz6eqqdscCS09VtRAo
   4QQvAqOa8UheYeoXLdWcHaLP
   -----END PRIVATE KEY-----                    
   
   -----BEGIN CERTIFICATE-----
   MIIEazCCA1OgAwIBAgICWxQwDQYJKoZIhvcNAQELBQAwgbExCzAJBgNVBAYTAi0t
   MRIwEAYDVQQIDAlTb21lU3RhdGUxETAPBgNVBAcMCFNvbWVDaXR5MRkwFwYDVQQK
   DBBTb21lT3JnYW5pemF0aW9uMR8wHQYDVQQLDBZTb21lT3JnYW5pemF0aW9uYWxV
   bml0MRkwFwYDVQQDDBBpcC0xNzItMzEtMjAtMjM2MSQwIgYJKoZIhvcNAQkBFhVy
   ...
   z5rRUE/XzxRLBZOoWZpNWTXJkQ3uFYH6s/sBwtHpKKZMzOvDedREjNKAvk4ws6F0
   CuIjvubtUysVyQoMVPQ97ldeakHWeRMiEJFXg6kZZ0vrGvwnKoMh3DlK44D9dlU3
   WanXWehT6FiSZvB4sTEXXJN2jdw8g+sHGnZ8zCOsclknYhHrCVD2vnBlZJKSZvak
   3ZazhBxtQSukFMOnWPP2a0DMMFGYUHOd0BQE8sBJxg==
   -----END CERTIFICATE-----
   ```

   Los nombres y las extensiones de los archivos se utilizan simplemente por comodidad y no afectan al funcionamiento. Por ejemplo, puede llamar a un certificado `cert.crt`, `cert.pem`, o cualquier otro nombre de archivo, siempre que la directiva relacionada en el archivo `ssl.conf` utilice el mismo nombre.
**nota**  
Cuando sustituya los archivos TLS predeterminados por sus propios archivos personalizados, asegúrese de que estén en formato PEM. 

1. Abra el archivo `/etc/httpd/conf.d/ssl.conf` con el editor de texto que prefiera (como **vim** o **nano**) como usuario raíz y convierta en comentario la siguiente línea, porque el certificado ficticio autofirmado también contiene la clave. Si no convierte en comentario esta línea antes de completar el siguiente paso, se producirá un error al iniciar el servicio de Apache

   ```
   SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
   ```

1. Reinicie Apache.

   ```
   [ec2-user ~]$ sudo systemctl restart httpd
   ```
**nota**  
Asegúrese de que el puerto 443 de TCP sea accesible en la instancia de EC2, tal y como se ha explicado anteriormente.

1. Ahora el servidor web de Apache debería admitir HTTPS (HTTP seguro) en el puerto 443. Pruébelo escribiendo la dirección IP o el nombre completo de dominio de la instancia de EC2 en la barra URL del navegador con el prefijo **https://**.

   Dado que se va a conectar a un sitio con un certificado de host autofirmado que no es de confianza, es posible que el navegador envíe una serie de advertencias de seguridad. Omita las advertencias y vaya al sitio. 

   Si se abre la página de prueba de Apache predeterminada, eso significa que ha configurado correctamente TLS en el servidor. Ahora todos los datos que pasan entre el navegador y el servidor se cifran.
**nota**  
Para evitar que los visitantes del sitio reciban pantallas de advertencia, tiene que obtener un certificado de confianza firmado por una CA que no solo cifre, sino que también le autentique públicamente como propietario del sitio. 

## Paso 2: Obtener un certificado firmado por una CA
<a name="ssl_certificate"></a>

Puede utilizar el siguiente proceso para obtener un certificado firmado por una CA:
+ Genere una solicitud de firma de certificado (CSR) de una clave privada
+ Envie el CSR a una autoridad de certificación (CA)
+ Obtenga un certificado de host firmado
+ Configure Apache para utilizar el certificado

Un certificado de host TLS X.509 autofirmado es idéntico, desde el punto de vista criptográfico, a un certificado firmado por una CA. La diferencia es social, no matemática. Una CA promete, como mínimo, validar la propiedad de un dominio antes de emitir un certificado para el solicitante. Cada navegador web contiene una lista de las personas en las que el proveedor del navegador CAs confía para ello. Un certificado X.509 consta principalmente de una clave pública, que se corresponde con la clave del servidor privado, y una firma de la CA que está vinculada criptográficamente a la clave pública. Cuando un navegador se conecta a un servidor web a través de HTTPS, el servidor presenta un certificado para que el navegador lo compare con su lista de usuarios de confianza CAs. Si el signatario está en la lista o se puede obtener acceso a él a través de una *cadena de confianza *compuesta por otros signatarios de confianza, el navegador negocia un canal de datos cifrados rápido con el servidor y carga la página. 

Generalmente, los certificados cuestan dinero por el trabajo que supone la validación de las solicitudes, por lo que vale la pena comparar precios. Algunos CAs ofrecen certificados de nivel básico de forma gratuita. El más notable de ellos CAs es el proyecto [Let's Encrypt](https://letsencrypt.org/), que también apoya la automatización del proceso de creación y renovación de certificados. Para obtener más información acerca del uso del certificado Let's Encrypt, consulte [Obtenga Certbot](https://eff-certbot.readthedocs.io/en/stable/install.html).

Si planea ofrecer servicios de calidad comercial, [AWS Certificate Manager](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) es una buena opción.

La clave es hacer que el certificado del host esté subyacente. Desde 2019, grupos del [gobierno](http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-57pt1r4.pdf) y el [sector](https://cabforum.org/wp-content/uploads/CA-Browser-Forum-BR-1.6.5.pdf) recomiendan utilizar un tamaño mínimo de clave (módulo) de 2048 bits para claves RSA destinadas a proteger documentos hasta 2030. El tamaño de módulo predeterminado generado por OpenSSL es de 2048 bits, lo que es adecuado para su uso AL2 en un certificado firmado por una CA. En el siguiente procedimiento, se proporcionó un paso opcional para aquellos que deseasen una clave personalizada, por ejemplo, una con un módulo mayor o que utilice un algoritmo de cifrado diferente.

**importante**  
Estas instrucciones para adquirir un certificado de host firmado por una CA no funcionan a menos que posea un dominio DNS alojado y registrado.

**Para obtener un certificado firmado por una CA**

1.  [Conéctese](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html) a su instancia y navegue hasta/etc/pki/tls/private/. Este es el directorio donde almacena la clave privada del servidor para TLS. Si prefiere utilizar una clave de host existente para generar el CSR, vaya al paso 3.

1. (Opcional) Genere una nueva clave privada. Estas son algunas ejemplos de configuraciones clave. Cualquiera de las claves resultantes funciona con el servidor web, pero son diferentes en el grado y el tipo de seguridad que implementan.
   + **Ejemplo 1:** cree una clave de host RSA predeterminada. El archivo resultante, **custom.key**, es una clave privada RSA de 2048 bits.

     ```
     [ec2-user ~]$ sudo openssl genrsa -out custom.key
     ```
   + **Ejemplo 2:** cree una clave RSA más segura con un módulo mayor. El archivo resultante, **custom.key**, es una clave privada RSA de 4096 bits.

     ```
     [ec2-user ~]$ sudo openssl genrsa -out custom.key 4096
     ```
   + **Ejemplo 3:** cree una clave RSA cifrada de 4096 bits con protección con contraseña. El archivo resultante, **custom.key**, es una clave privada RSA de 4096 bits cifrada con AES-128.
**importante**  
El cifrado de la clave ofrece mayor seguridad, pero dado que una clave cifrada necesita una contraseña, los servicios que dependen de él no se pueden iniciar automáticamente. Cada vez que utilice esta clave, tiene que proporcionar la contraseña (en el ejemplo anterior "abcde12345") en una conexión SSH.

     ```
     [ec2-user ~]$ sudo openssl genrsa -aes128 -passout pass:abcde12345 -out custom.key 4096
     ```
   + **Ejemplo 4:** cree una clave con un cifrado que no sea RSA. La criptogarfía RSA puede ser relativamente lenta debido al tamaño de sus claves públicas, que se basan en el producto de dos números primos grandes. Sin embargo, es posible crear claves para TLS que utilicen cifrados que no sean RSA. Las claves que están basadas en el cálculo matemático de curvas elípticas son más pequeñas y más rápidas desde el punto de vista informático a la hora de proporcionar un nivel de seguridad equivalente.

     ```
     [ec2-user ~]$ sudo openssl ecparam -name prime256v1 -out custom.key -genkey
     ```

     El resultado es una clave privada de curva elíptica de 256 bits que utiliza prime256v1, una "curva con nombre" que admite OpenSSL. Su seguridad criptográfica es ligeramente mayor que la de una clave RSA de 2048 bits, [de acuerdo con NIST](http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-57pt1r4.pdf).
**nota**  
No todas CAs ofrecen el mismo nivel de compatibilidad con las elliptic-curve-based claves que con las claves RSA.

   Asegúrese de que la nueva clave privada tenga una propiedad y unos permisos muy restrictivos (owner=root, group=root, solo para el propietario). read/write Los comandos serán como se muestra en el siguiente ejemplo.

   ```
   [ec2-user ~]$ sudo chown root:root custom.key
   [ec2-user ~]$ sudo chmod 600 custom.key
   [ec2-user ~]$ ls -al custom.key
   ```

   Los comandos anteriores devuelven el siguiente resultado.

   ```
   -rw------- root root custom.key
   ```

    Una vez que haya creado y configurado una clave satisfactoria, puede crear una CSR. 

1. Para crear una CSR, utilice su clave preferida. El siguiente ejemplo utiliza **custom.key**.

   ```
   [ec2-user ~]$ sudo openssl req -new -key custom.key -out csr.pem
   ```

   OpenSSL abre un cuadro de diálogo y le pide la información que se muestra en la siguiente tabla. Todos los campos, excepto **Common Name (Nombre común)**, son opcionales para un certificado de host de dominio validado básico.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/linux/al2/ug/SSL-on-amazon-linux-2.html)

   Por último, OpenSSL le solicita una contraseña de comprobación opcional. Esta contraseña solo se aplica a la CSR y a las transacciones entre usted y la CA, así que siga las recomendaciones de la CA a este respecto y el otro campo opcional, es decir, el nombre de empresa opcional. La contraseña de comprobación de CSR no afecta al funcionamiento del servidor.

   El archivo resultante, **csr.pem** contiene la clave pública, la firma digital de la clave pública y los metadatos que ha especificado.

1. Envíe la CSR a una CA. Este proceso suele consistir en abrir el archivo CSR en un editor de texto y copiar el contenido en un formulario web. En este momento, es posible que se le pida que proporcione uno o más nombres alternativos de sujeto (SANs) para incluirlos en el certificado. Si el nombre común es **www.example.com**, **example.com** sería un buen SAN y viceversa. Un visitante de su sitio que introdujese cualquiera de estos nombres no recibiría ningún error de conexión. Si su formulario web de CA lo permite, incluya el nombre común en la lista de SANs. Algunos lo CAs incluyen automáticamente.

   Una vez aprobada su solicitud, recibe un nuevo certificado de host firmado por la CA. Es posible que también tenga que descargar un archivo de *certificado intermedio* que contiene los certificados adicionales necesarios para completar la cadena de confianza de la CA. 
**nota**  
La CA puede enviarle archivos en diversos formatos destinados a diversos fines. Para este tutorial, solo debe utilizar un archivo de certificado en formato PEM, que normalmente (aunque no siempre) está marcado con la extensión de archivo `.pem` o `.crt`. Si no tiene claro qué archivo debe utilizar, abra los archivos con un editor de texto y busque el que contiene uno o varios bloques que comienzan con la siguiente línea.  

   ```
   - - - - -BEGIN CERTIFICATE - - - - - 
   ```
El archivo debería terminar también con la siguiente línea.  

   ```
   - - - -END CERTIFICATE - - - - -
   ```
También puede probar el archivo en la línea de comandos, tal y como se muestra a continuación.  

   ```
   [ec2-user certs]$ openssl x509 -in certificate.crt -text
   ```
Verifique que estas líneas aparecen en el archivo. No utilice archivos que terminen con `.p7b`, `.p7c` o extensiones de archivos similares.

1. Coloque el nuevo certificado firmado por la CA y cualquier certificado intermedio en el directorio `/etc/pki/tls/certs`.
**nota**  
Hay varias formas de cargar el nuevo certificado en la instancia de EC2, pero la más sencilla e informativa consiste en abrir un editor de texto (por ejemplo, vi, nano o notepad) en el equipo local y en la instancia y, a continuación, copiar y pegar el contenido del archivo de uno al otro. Para realizar estas operaciones en la instancia de EC2, necesita permisos de raíz [sudo]. De esta forma, puede ver inmediatamente si hay algún problema con los permisos o las rutas. Procure, no obstante, no añadir más líneas al copiar el contenido o cambiarlo de ninguna forma. 

   Desde el `/etc/pki/tls/certs` directorio, compruebe que la configuración de propiedad, grupo y permisos del archivo coincide con los AL2 valores predeterminados altamente restrictivos (owner=root, group=root, solo para propietario). read/write En el siguiente ejemplo, se muestran los comandos que se utilizarán. 

   ```
   [ec2-user certs]$ sudo chown root:root custom.crt
   [ec2-user certs]$ sudo chmod 600 custom.crt
   [ec2-user certs]$ ls -al custom.crt
   ```

   Estos comandos deberían devolver el siguiente resultado. 

   ```
   -rw------- root root custom.crt
   ```

   Los permisos del archivo de certificado intermedio son menos estrictos (propietario=raíz, grupo=raíz, propietario puede escribir, grupo puede leer, mundo puede leer). En el siguiente ejemplo, se muestran los comandos que se utilizarán. 

   ```
   [ec2-user certs]$ sudo chown root:root intermediate.crt
   [ec2-user certs]$ sudo chmod 644 intermediate.crt
   [ec2-user certs]$ ls -al intermediate.crt
   ```

   Estos comandos deberían devolver el siguiente resultado.

   ```
   -rw-r--r-- root root intermediate.crt
   ```

1. Coloque la clave privada que utilizó para crear la CSR en el directorio `/etc/pki/tls/private/`. 
**nota**  
Hay varias formas de cargar la clave personalizada en la instancia de EC2, pero la más sencilla e informativa consiste en abrir un editor de texto (por ejemplo, vi, nano o notepad) en el equipo local y en la instancia y, a continuación, copiar y pegar el contenido del archivo de uno al otro. Para realizar estas operaciones en la instancia de EC2, necesita permisos de raíz [sudo]. De esta forma, puede ver inmediatamente si hay algún problema con los permisos o las rutas. Procure, no obstante, no añadir más líneas al copiar el contenido o cambiarlo de ninguna forma.

   Desde el `/etc/pki/tls/private` directorio, utilice los siguientes comandos para comprobar que la configuración de propiedad, grupo y permisos del archivo coincide con los AL2 valores predeterminados altamente restrictivos (owner=root, group=root, solo para propietario). read/write 

   ```
   [ec2-user private]$ sudo chown root:root custom.key
   [ec2-user private]$ sudo chmod 600 custom.key
   [ec2-user private]$ ls -al custom.key
   ```

   Estos comandos deberían devolver el siguiente resultado.

   ```
   -rw------- root root custom.key
   ```

1. Edite `/etc/httpd/conf.d/ssl.conf` para reflejar el nuevo certificado y los archivos de claves.

   1. Proporcione la ruta y el nombre de archivo del certificado de host firmado por la CA en la directiva `SSLCertificateFile` de Apache:

      ```
      SSLCertificateFile /etc/pki/tls/certs/custom.crt
      ```

   1. Si ha recibido un archivo de certificado intermedio (`intermediate.crt` en este ejemplo), proporcione su ruta y nombre de archivo utilizando la directiva `SSLCACertificateFile` de Apache:

      ```
      SSLCACertificateFile /etc/pki/tls/certs/intermediate.crt
      ```
**nota**  
Algunos CAs combinan el certificado del host y los certificados intermedios en un solo archivo, lo que hace innecesaria la directiva. `SSLCACertificateFile` Consulte las instrucciones que le ha proporcionado su CA.

   1. Proporcione la ruta y el nombre de archivo de la clave privada (`custom.key` en este ejemplo) en la directiva `SSLCertificateKeyFile` de Apache:

      ```
      SSLCertificateKeyFile /etc/pki/tls/private/custom.key
      ```

1. Guarde `/etc/httpd/conf.d/ssl.conf` y reinicie Apache.

   ```
   [ec2-user ~]$ sudo systemctl restart httpd
   ```

1. Pruebe el servidor introduciendo su nombre de dominio en una barra de direcciones URL del navegador con el prefijo `https://`. El navegador debería cargar la página de prueba sobre HTTPS sin generar errores.

## Paso 3: Probar y reforzar la configuración de seguridad
<a name="ssl_test"></a>

Cuando su TLS esté en funcionamiento y expuesto al público, debería probar su seguridad. Esta operación es muy sencilla con servicios online como [Qualys SSL Labs](https://www.ssllabs.com/ssltest/analyze.html), que realiza un análisis gratuito y exhaustivo de su configuración de seguridad. En función de los resultados, puede decidir si debe reforzar la configuración de seguridad predeterminada controlando los protocolos que acepta, qué cifrados prefiere y cuáles deben excluirse. Para obtener más información, consulte [cómo Qualys formula sus puntuaciones](https://github.com/ssllabs/research/wiki/SSL-Server-Rating-Guide).

**importante**  
Las pruebas reales son cruciales para la seguridad del servidor. Cualquier pequeño error de configuración puede provocar graves infracciones de seguridad y la pérdida de datos. Dado que las prácticas de seguridad recomendadas cambian continuamente en respuesta a las investigaciones y a las continuas amenazas, es esencial realizar auditorías de seguridad periódicas para mantener una buena administración del servidor. 

En el sitio de [Qualys SSL Labs](https://www.ssllabs.com/ssltest/analyze.html), introduzca el nombre de dominio completo de su servidor, con el formato **www.example.com**. Dos minutos después recibirá una puntuación (de A a F) de su sitio y un desglose detallado de los descubrimientos. En la siguiente tabla se resume el informe de un dominio con una configuración idéntica a la configuración predeterminada de Apache y con un certificado Certbot predeterminado. AL2 


|  |  | 
| --- |--- |
| Calificación global | B | 
| Certificate | 100% | 
| Compatibilidad del protocolo | 95% | 
| Intercambio de clave | 70 % | 
| Seguridad del cifrado | 90% | 

Aunque la información general muestra que la configuración es correcta, el informe detallado indica algunos posibles problemas, indicados aquí en orden de gravedad:

✗ **Algunos RC4 navegadores antiguos admiten el uso del cifrado**. Un sistema de cifrado es el núcleo matemático de un algoritmo de cifrado. RC4[Se sabe que, un sistema de cifrado rápido que se utiliza para cifrar los flujos de datos de TLS, tiene varias debilidades graves.](http://www.imperva.com/docs/hii_attacking_ssl_when_using_rc4.pdf) A menos que tenga muy buenas razones para admitir navegadores heredados, debería deshabilitar esta opción.

✗ **Se admiten las versiones antiguas de TLS.** La configuración admite TLS 1.0 (ya obsoleto) y TLS 1.1 (en vías de ser declarado obsoleto). Desde 2018 solo se ha recomendado TLS 1.2.

✗ **La confidencialidad directa no se admite por completo.** La [confidencialidad directa](https://en.wikipedia.org/wiki/Forward_secrecy) es una característica de los algoritmos que cifra mediante claves de sesión temporales (efímeras) que se obtienen de la clave privada. En la práctica, esto significa que los atacantes no pueden descifrar los datos HTTPS aunque posean una clave privada a largo plazo del servidor web.

**Para corregir y preparar para el futuro la configuración de TLS**

1. Abra el archivo de configuración `/etc/httpd/conf.d/ssl.conf` en un editor de texto y comente la línea siguiente introduciendo "\$1" al principio de la línea.

   ```
   #SSLProtocol all -SSLv3
   ```

1. Añada la siguiente directiva:

   ```
   #SSLProtocol all -SSLv3
   SSLProtocol -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2
   ```

   Esta directiva deshabilita explícitamente las versiones 2 y 3 de SSL, además de las versiones 1.0 y 1.1 de TLS. Ahora, el servidor se niega a aceptar conexiones cifradas con clientes que no utilicen versiones compatibles de TLS 1.2. El texto de la directiva transmite con más claridad a un lector humano las acciones que se han configurado que haga el servidor.
**nota**  
Al deshabilitar las versiones 1.0 y 1.1 de TLS de esta manera, bloquea un pequeño porcentaje de navegadores web desactualizados y evita que obtengan acceso a su sitio.

**Para modificar la lista de cifrados permitidos**

1. En el archivo de configuración `/etc/httpd/conf.d/ssl.conf`, encuentre la sección con la directiva **SSLCipherSuite** y comente la línea existente al introducir “\$1· al principio de la línea.

   ```
   #SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
   ```

1. Especifique conjuntos de cifrado explícitos y un orden de cifrado que dé prioridad a la confidencialidad directa y evite los cifrados inseguros. La directiva `SSLCipherSuite` que se utiliza aquí se basa en el resultado del [Mozilla SSL Configuration Generator](https://mozilla.github.io/server-side-tls/ssl-config-generator/), que personaliza una configuración de TLS al software específico que se ejecuta en su servidor. En primer lugar, determine sus versiones de Apache y OpenSSL utilizando la salida de los comandos siguientes.

   ```
   [ec2-user ~]$ yum list installed | grep httpd
   
   [ec2-user ~]$ yum list installed | grep openssl
   ```

   Por ejemplo, si la información devuelta es Apache 2.4.34 y OpenSSL 1.0.2, lo introducimos en el generador. Después elegimos el modelo de compatibilidad «moderno», esto crea una directiva `SSLCipherSuite` que aplica seguridad de forma agresiva pero sigue funcionando para la mayoría de navegadores. Si el navegador no admite la configuración moderna, puede actualizar el software o elegir la configuración «intermedia» en su lugar.

   ```
   SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:
   ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:
   ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
   ```

   Los cifrados con la calificación más alta tienen *ECDHE* en su nombre, una abreviatura de *Elliptic Curve Diffie-Hellman Ephemeral*. El término *ephemeral* indica confidencialidad directa. Como subproducto, estos cifrados no son compatibles. RC4

   Le recomendamos utilizar una lista de cifrados explícita en lugar de utilizar valores predeterminados o directivas escuetas cuyo contenido no es visible.

   Copie la directiva generada e `/etc/httpd/conf.d/ssl.conf`.
**nota**  
Aunque aquí se muestran en varias líneas para que la lectura sea más sencilla, la directiva debe estar en una sola línea cuando se copia a `/etc/httpd/conf.d/ssl.conf` con un solo símbolo de dos puntos (sin espacios) entre los nombres de los cifrados.

1. Por último, cancele el comentario de la siguiente línea eliminando el "\$1" al principio de la línea.

   ```
   #SSLHonorCipherOrder on
   ```

   Esta directiva obliga al servidor a preferir cifrados con una calificación alta, incluidos (en este caso) los que admiten la confidencialidad directa. Con esta directiva activada, el servidor intenta establecer una conexión muy segura antes de recurrir a los cifrados permitidos con menor seguridad.

Después de completar ambos procedimientos, guarde los cambios en `/etc/httpd/conf.d/ssl.conf` y reinicie Apache.

Si vuelves a probar el dominio en los [laboratorios SSL de Qualys](https://www.ssllabs.com/ssltest/analyze.html), verás que la RC4 vulnerabilidad y otras advertencias han desaparecido y el resumen es similar al siguiente.


|  |  | 
| --- |--- |
| Calificación global | A | 
| Certificate | 100% | 
| Compatibilidad del protocolo | 100% | 
| Intercambio de clave | 90% | 
| Seguridad del cifrado | 90% | 

En cada actualización de OpenSSL, se introducen nuevos cifrados y se elimina la compatibilidad con los antiguos. Conserve su AL2 instancia EC2 up-to-date, esté atento a los anuncios de seguridad de [OpenSSL](https://www.openssl.org/) y manténgase alerta a los informes de nuevos ataques de seguridad en la prensa técnica.

## Solución de problemas
<a name="troubleshooting"></a>
+ **Mi servidor web Apache no se inicia a menos que especifique una contraseña**

  Es el comportamiento esperado si ha instalado una clave de servidor privado cifrada y protegida mediante contraseña.

  Puede eliminar el cifrado y el requisito de contraseña de la clave. Supongamos que tiene una clave RSA cifrada privada que se denomina `custom.key` en el directorio predeterminado y que su contraseña es **abcde12345**. Ejecute los siguientes comandos en la instancia de EC2 para generar una versión no cifrada de la clave.

  ```
  [ec2-user ~]$ cd /etc/pki/tls/private/
  [ec2-user private]$ sudo cp custom.key custom.key.bak
  [ec2-user private]$ sudo openssl rsa -in custom.key -passin pass:abcde12345 -out custom.key.nocrypt 
  [ec2-user private]$ sudo mv custom.key.nocrypt custom.key
  [ec2-user private]$ sudo chown root:root custom.key
  [ec2-user private]$ sudo chmod 600 custom.key
  [ec2-user private]$ sudo systemctl restart httpd
  ```

  Ahora, Apache debería iniciarse sin solicitarle una contraseña.
+  **Recibo errores cuando ejecuto sudo yum install -y mod\$1ssl.**

  Al instalar los paquetes necesarios para SSL, puede que aparezcan errores similares a los siguientes:

  ```
  Error: httpd24-tools conflicts with httpd-tools-2.2.34-1.16.amzn1.x86_64
  Error: httpd24 conflicts with httpd-2.2.34-1.16.amzn1.x86_64
  ```

  Esto normalmente significa que la instancia EC2 no se está ejecutando. AL2 Este tutorial solo admite instancias recién creadas a partir de una AMI de AL2 oficial.

# Tutorial: aloje un WordPress blog en AL2
<a name="hosting-wordpress"></a>

Los siguientes procedimientos le ayudarán a instalar, configurar y proteger un WordPress blog en su instancia AL2. Este tutorial es una buena introducción al uso de Amazon EC2, ya que tiene el control total sobre el servidor web que aloja su WordPress blog, lo que no es habitual en un servicio de alojamiento tradicional.

Es responsable de actualizar los paquetes de software y de mantener los parches de seguridad del servidor. Para una WordPress instalación más automatizada que no requiera una interacción directa con la configuración del servidor web, el CloudFormation servicio proporciona una WordPress plantilla que también puede ayudarle a empezar rápidamente. Para obtener más información, consulte [Introducción](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/GettingStarted.Walkthrough.html) en la *Guía del usuario de AWS CloudFormation *. *Si necesita una solución de alta disponibilidad con una base de datos disociada, consulte [Implementación de un WordPress sitio web de alta disponibilidad](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/php-hawordpress-tutorial.html) en la AWS Elastic Beanstalk Guía para desarrolladores.*

**importante**  
Estos procedimientos están diseñados para usarse con. AL2 Para obtener más información acerca de otras distribuciones, consulte la documentación específica. Muchos de los pasos de este tutorial no funcionan en instancias de Ubuntu. Para obtener ayuda WordPress sobre la instalación en una instancia de Ubuntu, consulte [WordPress](https://help.ubuntu.com/community/WordPress)la documentación de Ubuntu. También se puede utilizar [CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/tutorials-wordpress-launch-instance.html)para realizar esta tarea en sistemas Amazon Linux, macOS o Unix.

**Topics**
+ [Requisitos previos](#hosting-wordpress-prereqs)
+ [Instale WordPress](#install-wordpress)
+ [Siguientes pasos](#wordpress-next-steps)
+ [Ayuda Ha cambiado el nombre DNS público y ahora el blog se ha roto](#wordpress-troubleshooting)

## Requisitos previos
<a name="hosting-wordpress-prereqs"></a>

En este tutorial se asume que has lanzado una AL2 instancia con un servidor web funcional con soporte para PHP y bases de datos (MySQL o MariaDB) siguiendo todos los pasos que se indican. [Tutorial: Instale un servidor LAMP en AL2](ec2-lamp-amazon-linux-2.md) En este tutorial también se incluyen pasos para configurar un grupo de seguridad que permita el tráfico `HTTP` y `HTTPS`, así como varios pasos para asegurar que los permisos de archivo están correctamente establecidos en el servidor web. Para obtener más información sobre la adición de reglas a su grupo de seguridad, consulte [Agregar reglas a un grupo de seguridad](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule).

Le recomendamos encarecidamente que asocie una dirección IP elástica (EIP) a la instancia que utilice para alojar un blog. WordPress Esto impide que la dirección DNS pública de la instancia cambie e interrumpa la instalación. Si posee un nombre de dominio y quiere usarlo para el blog, puede actualizar el registro DNS del nombre de dominio para que apunte a la dirección EIP (para obtener ayuda al respecto, póngase en contacto con el registrador de nombres de dominio). Puede tener una dirección EIP asociada con una instancia en ejecución sin costo alguno. Para obtener más información, consulte [Direcciones IP elásticas](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) en la *Guía del usuario de Amazon EC2*.

Si todavía no tiene un nombre de dominio para el blog, puede registrar uno con Route 53 y asociarlo con la dirección EIP de la instancia. Para obtener más información, consulte [Registrar nombres de dominio mediante Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/registrar.html) en la *Guía para desarrolladores de Amazon Route 53*.

## Instale WordPress
<a name="install-wordpress"></a>

**Opción: completar este tutorial con la automatización**  
Para completar este tutorial utilizando la AWS Systems Manager automatización en lugar de las siguientes tareas, ejecute el [documento de automatización](https://console.aws.amazon.com/systems-manager/documents/AWSDocs-HostingAWordPressBlog/).

Conéctese a la instancia y descargue el paquete WordPress de instalación.

**Para descargar y descomprimir el paquete de WordPress instalación**

1. Descargue el paquete de WordPress instalación más reciente con el **wget** comando. El comando siguiente debería descargar siempre la última versión.

   ```
   [ec2-user ~]$ wget https://wordpress.org/latest.tar.gz
   ```

1. Descomprima y desarchive el paquete de instalación. La carpeta de instalación se descomprime en una carpeta llamada `wordpress`.

   ```
   [ec2-user ~]$ tar -xzf latest.tar.gz
   ```<a name="create_user_and_database"></a>

**Para crear una base de datos, un usuario y una base de datos para WordPress la instalación**

 WordPress La instalación debe almacenar información, como las entradas de blog y los comentarios de los usuarios, en una base de datos. Este procedimiento ayuda a crear una base de datos para el blog y un usuario que esté autorizado a leer y guardar información en ella. 

1. Inicie el servidor de base de datos.
   + 

     ```
     [ec2-user ~]$ sudo systemctl start mariadb
     ```

1. Inicie sesión en el servidor de base de datos como el usuario `root`. Escriba la contraseña `root` de la base de datos cuando se lo pidan. Esta contraseña puede ser diferente de la contraseña `root` del sistema o incluso podría estar en blanco si no se ha protegido el servidor de bases de datos.

   Si todavía no ha protegido el servidor de base de datos, es importante que lo haga. Para obtener más información, consulte [Para proteger el servidor MariaDB](ec2-lamp-amazon-linux-2.md#securing-maria-db) (AL2).

   ```
   [ec2-user ~]$ mysql -u root -p
   ```

1. <a name="create_database_user"></a>Cree un usuario y una contraseña para la base de datos MySQL. WordPressLa instalación utiliza estos valores para comunicarse con la base de datos MySQL. 

   Asegúrese de que crea una contraseña fuerte para el usuario. No utilice la comilla simple ( ' ) en la contraseña porque interrumpirá el comando anterior. No utilice ninguna contraseña existente y asegúrese de que la guarda en un lugar seguro.

   Escriba el comando siguiente sustituyendo un nombre de usuario y contraseña únicos.

   ```
   CREATE USER 'wordpress-user'@'localhost' IDENTIFIED BY 'your_strong_password';
   ```

1. <a name="create_database"></a>Cree la base de datos. Póngale un nombre descriptivo y significativo, por ejemplo `wordpress-db`.
**nota**  
Los signos de puntuación que rodean el nombre de la base de datos en el comando siguiente son acentos graves. La tecla (```) se ubica por lo general sobre la tecla `Tab` en un teclado estándar. Los acentos graves no siempre son obligatorios pero permiten usar caracteres no válidos, por ejemplo, guiones, en los nombres de las bases de datos.

   ```
   CREATE DATABASE `wordpress-db`;
   ```

1. Otorgue todos los privilegios de su base de datos al WordPress usuario que creó anteriormente.

   ```
   GRANT ALL PRIVILEGES ON `wordpress-db`.* TO "wordpress-user"@"localhost";
   ```

1. Vacíe los privilegios de base de datos para recoger todos los cambios.

   ```
   FLUSH PRIVILEGES;
   ```

1. Salga del cliente de `mysql`.

   ```
   exit
   ```

**Para crear y modificar el archivo wp-config.php**

La carpeta WordPress de instalación contiene un ejemplo de archivo de configuración llamado`wp-config-sample.php`. En este procedimiento, va a copiar este archivo y a modificarlo para ajustarlo a su configuración específica.

1. Copie el archivo `wp-config-sample.php` en un archivo llamado `wp-config.php`. Esto crea un archivo de configuración nuevo y mantiene el archivo original de muestra intacto como copia de seguridad.

   ```
   [ec2-user ~]$ cp wordpress/wp-config-sample.php wordpress/wp-config.php
   ```

1. Modifique el archivo `wp-config.php` con el editor de texto favorito (por ejemplo **nano** o **vim**) y escriba los valores de la instalación. Si no tiene un editor favorito, `nano` es más adecuado para principiantes.

   ```
   [ec2-user ~]$ nano wordpress/wp-config.php
   ```

   1. Busque la línea que define `DB_NAME` y cambie `database_name_here` por el nombre de la base de datos que ha creado en [Step 4](#create_database) de [Para crear una base de datos, un usuario y una base de datos para WordPress la instalación](#create_user_and_database).

      ```
      define('DB_NAME', 'wordpress-db');
      ```

   1. Busque la línea que define `DB_USER` y cambie `username_here` por el usuario de la base de datos que ha creado en [Step 3](#create_database_user) de [Para crear una base de datos, un usuario y una base de datos para WordPress la instalación](#create_user_and_database).

      ```
      define('DB_USER', 'wordpress-user');
      ```

   1. Busque la línea que define `DB_PASSWORD` y cambie `password_here` por la contraseña fuerte que ha creado en [Step 3](#create_database_user) de [Para crear una base de datos, un usuario y una base de datos para WordPress la instalación](#create_user_and_database).

      ```
      define('DB_PASSWORD', 'your_strong_password');
      ```

   1. Busque la sección denominada `Authentication Unique Keys and Salts`. Estos `SALT` valores `KEY` y otros proporcionan una capa de cifrado a las cookies del navegador que WordPress los usuarios almacenan en sus máquinas locales. Básicamente, agregar valores largos aleatorios hace que el sitio sea más seguro. Visite [https://api.wordpress. org/secret-key/1.1/salt](https://api.wordpress.org/secret-key/1.1/salt/)/para generar aleatoriamente un conjunto de valores clave que puede copiar y pegar en el `wp-config.php` archivo. Para pegar texto en un terminal PuTTY, coloque el cursor en el punto que quiere pegar el texto y haga clic con el botón derecho del ratón dentro del terminal PuTTY.

      Para obtener más información sobre las claves de seguridad, visita [https://wordpress. org/support/article/editing-wp-config-php/\$1security -keys](https://wordpress.org/support/article/editing-wp-config-php/#security-keys).
**nota**  
Los valores siguientes tienen una finalidad de ejemplo únicamente; no los use en la instalación.

      ```
      define('AUTH_KEY',         ' #U$$+[RXN8:b^-L 0(WU_+ c+WFkI~c]o]-bHw+)/Aj[wTwSiZ<Qb[mghEXcRh-');
      define('SECURE_AUTH_KEY',  'Zsz._P=l/|y.Lq)XjlkwS1y5NJ76E6EJ.AV0pCKZZB,*~*r ?6OP$eJT@;+(ndLg');
      define('LOGGED_IN_KEY',    'ju}qwre3V*+8f_zOWf?{LlGsQ]Ye@2Jh^,8x>)Y |;(^[Iw]Pi+LG#A4R?7N`YB3');
      define('NONCE_KEY',        'P(g62HeZxEes|LnI^i=H,[XwK9I&[2s|:?0N}VJM%?;v2v]v+;+^9eXUahg@::Cj');
      define('AUTH_SALT',        'C$DpB4Hj[JK:?{ql`sRVa:{:7yShy(9A@5wg+`JJVb1fk%_-Bx*M4(qc[Qg%JT!h');
      define('SECURE_AUTH_SALT', 'd!uRu#}+q#{f$Z?Z9uFPG.${+S{n~1M&%@~gL>U>NV<zpD-@2-Es7Q1O-bp28EKv');
      define('LOGGED_IN_SALT',   ';j{00P*owZf)kVD+FVLn-~ >.|Y%Ug4#I^*LVd9QeZ^&XmK|e(76miC+&W&+^0P/');
      define('NONCE_SALT',       '-97r*V/cgxLmp?Zy4zUU4r99QQ_rGs2LTd%P;|_e1tS)8_B/,.6[=UK<J_y9?JWG');
      ```

   1. Guarde el archivo y salga del editor de texto.

**Para instalar sus WordPress archivos en la raíz de documentos de Apache**
+ Ahora que ha descomprimido la carpeta de instalación, ha creado una base de datos y un usuario MySQL y ha personalizado el archivo de WordPress configuración, puede copiar los archivos de instalación en la raíz de documentos del servidor web para poder ejecutar el script de instalación que complete la instalación. La ubicación de estos archivos depende de si quieres que tu WordPress blog esté disponible en la raíz real del servidor web (por ejemplo`my.public.dns.amazonaws.com`) o en un subdirectorio o una carpeta situada debajo de la raíz (por ejemplo,). `my.public.dns.amazonaws.com/blog`
  + Si quieres WordPress ejecutarlo desde la raíz de tus documentos, copia el contenido del directorio de instalación de WordPress (pero no el directorio en sí) de la siguiente manera: 

    ```
    [ec2-user ~]$ cp -r wordpress/* /var/www/html/
    ```
  + Si quieres WordPress ejecutarlo en un directorio alternativo bajo la raíz del documento, primero crea ese directorio y, a continuación, copia los archivos en él. En este ejemplo, WordPress se ejecutará desde el directorio`blog`:

    ```
    [ec2-user ~]$ mkdir /var/www/html/blog
    [ec2-user ~]$ cp -r wordpress/* /var/www/html/blog/
    ```

**importante**  
Por razones de seguridad, si no pasa al siguiente procedimiento de inmediato, pare el servidor web Apache (`httpd`) ahora. Tras mover la instalación a la raíz de documentos de Apache, el script de WordPress instalación queda desprotegido y un atacante podría acceder a su blog si el servidor web Apache estuviera en funcionamiento. Para detener el servidor web Apache, escriba el comando **sudo systemctl stop httpd**. Si pasa al siguiente procedimiento, no es preciso que pare el servidor web Apache.

**Para permitir el uso WordPress de enlaces permanentes**

WordPress Los enlaces permanentes necesitan usar `.htaccess` archivos de Apache para funcionar correctamente, pero esto no está habilitado de forma predeterminada en Amazon Linux. Use este procedimiento para permitir todas las anulaciones en la raíz de documentos de Apache.

1. Abra el archivo `httpd.conf` con el editor de textos que prefiera (como **nano** o **vim**). Si no tiene un editor favorito, `nano` es más adecuado para principiantes.

   ```
   [ec2-user ~]$ sudo vim /etc/httpd/conf/httpd.conf
   ```

1. Busque la sección que comienza por `<Directory "/var/www/html">`.

   ```
   <Directory "/var/www/html">
       #
       # Possible values for the Options directive are "None", "All",
       # or any combination of:
       #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
       #
       # Note that "MultiViews" must be named *explicitly* --- "Options All"
       # doesn't give it to you.
       #
       # The Options directive is both complicated and important.  Please see
       # http://httpd.apache.org/docs/2.4/mod/core.html#options
       # for more information.
       #
       Options Indexes FollowSymLinks
   
       #
       # AllowOverride controls what directives may be placed in .htaccess files.
       # It can be "All", "None", or any combination of the keywords:
       #   Options FileInfo AuthConfig Limit
       #
       AllowOverride None
   
       #
       # Controls who can get stuff from this server.
       #
       Require all granted
   </Directory>
   ```

1. Cambie la línea `AllowOverride None` de la sección anterior por `AllowOverride All`.
**nota**  
Hay múltiples líneas `AllowOverride` en este archivo; asegúrese de que cambia la línea de la sección `<Directory "/var/www/html">`.

   ```
   AllowOverride All
   ```

1. Guarde el archivo y salga del editor de texto.

**Para instalar la biblioteca de dibujos gráficos de PHP en AL2**  
La biblioteca GD para PHP le permite modificar imágenes. Instale esta biblioteca si tiene que recortar la imagen de encabezado para su blog. La versión phpMyAdmin que instale puede requerir una versión mínima específica de esta biblioteca (por ejemplo, la versión 7.2).

Utilice el siguiente comando para instalar la biblioteca de dibujos gráficos de PHP AL2. Por ejemplo, si instaló php7.2 desde amazon-linux-extras como parte de la instalación de la pila LAMP, este comando instalará la versión 7.2 de la biblioteca de dibujos gráficos de PHP.

```
[ec2-user ~]$ sudo yum install php-gd
```

Para verificar la versión instalada, utilice el siguiente comando:

```
[ec2-user ~]$ sudo yum list installed php-gd
```

A continuación, se muestra un ejemplo de la salida:

```
php-gd.x86_64                     7.2.30-1.amzn2             @amzn2extra-php7.2
```

**Para ajustar los permisos de archivo para el servidor web Apache**

Algunas de las funciones disponibles WordPress requieren acceso de escritura a la raíz del documento de Apache (por ejemplo, cargar contenido multimedia a través de las pantallas de administración). Si aún no lo ha hecho, aplique los siguientes permisos y pertenencias a grupos (tal y como se describe con más detalle en la[Tutorial: Instale un servidor LAMP en AL2](ec2-lamp-amazon-linux-2.md)).

1. Otorgue la propiedad de archivos de `/var/www` y su contenido al usuario `apache`.

   ```
   [ec2-user ~]$ sudo chown -R apache /var/www
   ```

1. Otorgue la propiedad de grupo de `/var/www` y su contenido al grupo `apache`.

   ```
   [ec2-user ~]$ sudo chgrp -R apache /var/www
   ```

1. Cambie los permisos del directorio `/var/www` y sus subdirectorios para agregar permisos de escritura de grupo y establecer el ID de grupo en futuros subdirectorios.

   ```
   [ec2-user ~]$ sudo chmod 2775 /var/www
   [ec2-user ~]$ find /var/www -type d -exec sudo chmod 2775 {} \;
   ```

1. Cambie de forma recursiva los permisos de archivo de `/var/www` y sus subdirectorios.

   ```
   [ec2-user ~]$ find /var/www -type f -exec sudo chmod 0644 {} \;
   ```
**nota**  
 Si pretende utilizarlos también WordPress como servidor FTP, aquí necesitará una configuración de grupo más permisiva. Para ello, revise los [pasos recomendados y la configuración WordPress de seguridad](https://wordpress.org/support/article/changing-file-permissions/). 

1. Reinicie el servidor web Apache para recoger el grupo y los permisos nuevos.
   + 

     ```
     [ec2-user ~]$ sudo systemctl restart httpd
     ```

**Ejecute el script WordPress de instalación con AL2**

Ya está listo para la instalación WordPress. Los comandos que utilice dependen del sistema operativo. Los comandos de este procedimiento se utilizan con AL2.

1. Use el comando **systemctl** para asegurarse de que se inician los servicios `httpd` y de base de datos cada vez que se arranca el sistema.

   ```
   [ec2-user ~]$ sudo systemctl enable httpd && sudo systemctl enable mariadb
   ```

1. Verifique que el servidor de base de datos se está ejecutando.

   ```
   [ec2-user ~]$ sudo systemctl status mariadb
   ```

   Si el servicio de base de datos no se está ejecutando, inícielo.

   ```
   [ec2-user ~]$ sudo systemctl start mariadb
   ```

1. Verifique que el servidor web Apache (`httpd`) se está ejecutando.

   ```
   [ec2-user ~]$ sudo systemctl status httpd
   ```

   Si el servicio `httpd` no se está ejecutando, inícielo.

   ```
   [ec2-user ~]$ sudo systemctl start httpd
   ```

1. En un navegador web, escriba la URL de su WordPress blog (la dirección DNS pública de la instancia o la dirección seguida de la `blog` carpeta). Deberías ver el script WordPress de instalación. Proporcione la información requerida para la WordPress instalación. Seleccione **Instalar WordPress** para completar la instalación. Para obtener más información, consulte el [paso 5: ejecutar el script de instalación](https://wordpress.org/support/article/how-to-install-wordpress/#step-5-run-the-install-script) en el WordPress sitio web.

## Siguientes pasos
<a name="wordpress-next-steps"></a>

Una vez que haya probado su WordPress blog, considere la posibilidad de actualizar su configuración.

**Uso de un nombre de dominio personalizado**  
Si tiene un nombre de dominio asociado con la dirección EIP de la instancia de EC2, puede configurar el blog para que use ese nombre en lugar de la dirección DNS pública de EC2. Para obtener más información, consulte [Cambiar la URL del sitio](https://wordpress.org/support/article/changing-the-site-url/) en el WordPress sitio web.

**Configuración del blog**  
Puede configurar el blog para usar distintos [temas](https://wordpress.org/themes/) y [complementos](https://wordpress.org/plugins/) y ofrecer una experiencia más personalizada a los lectores. Sin embargo, en ocasiones el proceso de instalación puede producir un efecto indeseado y provocar la pérdida del blog completo. Recomendamos encarecidamente que cree una copia de seguridad de Amazon Machine Image (AMI) de la instancia antes de instalar temas o complementos, de forma que pueda restaurar el blog si algo sale mal durante la instalación. Para obtener más información, consulte [Crear su propia AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html#creating-an-ami).

**Aumentar la capacidad**  
Si su WordPress blog se hace popular y necesita más capacidad de procesamiento o almacenamiento, tenga en cuenta los siguientes pasos:
+ Ampliar el espacio de almacenamiento de la instancia. Para obtener más información, consulte [Volúmenes elásticos de Amazon EBS](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-modify-volume.html) en la *Guía del usuario de Amazon EBS*.
+ Mover la base de datos MySQL a [Amazon RDS](https://aws.amazon.com/rds) para aprovechar la capacidad de fácil escala del servicio.

**Mejore el rendimiento de la red de su tráfico de Internet**  
Si espera que su blog impulse el tráfico a partir de los usuarios ubicados en todo el mundo, considere el uso de [AWS Global Accelerator](https://aws.amazon.com/global-accelerator). Global Accelerator le ayuda a reducir la latencia al mejorar el rendimiento del tráfico de Internet entre los dispositivos cliente de sus usuarios y la WordPress aplicación en la que se ejecuta AWS. Global Accelerator utiliza la [red AWS global](https://aws.amazon.com/about-aws/global-infrastructure/global_network/) para dirigir el tráfico a un punto final de aplicación en buen estado en la AWS región más cercana al cliente.

**Obtenga más información sobre WordPress**  
Para obtener más información WordPress, consulte la documentación de ayuda del WordPress Codex en [http://codex.wordpress.org/](http://codex.wordpress.org/).

Para obtener más información sobre la solución de problemas de la instalación, consulte [Problemas comunes de instalación](https://wordpress.org/support/article/how-to-install-wordpress/#common-installation-problems).

Para obtener información sobre cómo hacer que tu WordPress blog sea más seguro, consulta [Hardening WordPress](https://wordpress.org/support/article/hardening-wordpress/).

Para obtener información sobre cómo mantener tu WordPress blog up-to-date, consulta [Actualización WordPress](https://wordpress.org/support/article/updating-wordpress/).

## Ayuda Ha cambiado el nombre DNS público y ahora el blog se ha roto
<a name="wordpress-troubleshooting"></a>

 WordPress La instalación se configura automáticamente con la dirección DNS pública de la instancia EC2. Si detiene y reinicia la instancia, la dirección DNS pública cambia (salvo que está asociada a una dirección IP elástica) y el blog no funcionará porque hace referencia a los recursos de una dirección que ya no existe (o que se ha asignado a otra instancia de EC2). Para obtener una descripción más detallada del problema y varias soluciones posibles, consulte [Cambiar la URL del sitio](https://wordpress.org/support/article/changing-the-site-url/).

Si esto le ha ocurrido a la WordPress instalación, es posible que pueda recuperar el blog siguiendo el procedimiento que se indica a continuación, que utiliza la interfaz de línea de **wp-cli** comandos para WordPress.

**Para cambiar la URL WordPress del sitio por la **wp-cli****

1. Conéctese a la instancia de EC2 con SSH. 

1. Anote la URL del sitio anterior y la URL del sitio nuevo para la instancia. Es probable que la antigua URL del sitio sea el nombre de DNS público de la instancia de EC2 cuando la instaló WordPress. La URL del sitio nuevo es el nombre DNS público actual de la instancia de EC2. Si no está seguro de la URL del sitio anterior, puede usar **curl** para buscarla con el comando siguiente.

   ```
   [ec2-user ~]$ curl localhost | grep wp-content
   ```

   Debería ver referencias al nombre DNS público anterior en el resultado, que tendrá un aspecto similar a lo siguiente (la URL del sitio anterior en rojo):

   ```
   <script type='text/javascript' src='http://ec2-52-8-139-223.us-west-1.compute.amazonaws.com/wp-content/themes/twentyfifteen/js/functions.js?ver=20150330'></script>
   ```

1. Descargue el **wp-cli** con el comando siguiente.

   ```
   [ec2-user ~]$ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
   ```

1. Busque y sustituya la antigua URL del sitio en la WordPress instalación con el siguiente comando. Sustituya la dirección URL antigua y la nueva del sitio por la instancia de EC2 y la ruta de acceso a la WordPress instalación (normalmente, `/var/www/html` o`/var/www/html/blog`).

   ```
   [ec2-user ~]$ php wp-cli.phar search-replace 'old_site_url' 'new_site_url' --path=/path/to/wordpress/installation --skip-columns=guid
   ```

1. En un navegador web, introduzca la nueva URL del sitio de su WordPress blog para comprobar que el sitio vuelve a funcionar correctamente. Si no es así, consulte [Cambiar la URL del sitio](https://wordpress.org/support/article/changing-the-site-url/) y [Problemas comunes de instalación](https://wordpress.org/support/article/how-to-install-wordpress/#common-installation-problems) para obtener más información.