SSL asegura la transferencia de datos entre el cliente y el servidor. No solo eso, también aumenta el ranking de tu sitio web en Google, por lo que se puede decir que los certificados SSL son imprescindibles al construir aplicaciones.
AWS proporciona una solución muy conveniente llamada “AWS Certificate Manager” (ACM). No solo eso, también aumenta el ranking de tu sitio web en Google, por lo que se puede decir que los certificados SSL son imprescindibles al construir aplicaciones.
¡¡Eso es genial!! ¡Pero podemos prescindir del balanceador de carga para las instancias que alojan nuestros entornos de desarrollo y proyectos secundarios… ¿¿CIERTO??
Después de todo, una única instancia low-cost será suficiente. Simplemente generaremos un certificado utilizando ACM y lo usaremos en nuestra “single instance”… Espera, ¿¿Qué es eso?? ¿¿No podemos?? 😧😧😧
Aparentemente, ACM requiere un balanceador de carga (o distribución de CloudFront). No es posible utilizar el certificado directamente con una instancia.
Bueno, eso es un poco molesto 😒 pero no te preocupes, aún podemos obtener un certificado SSL gratuito sin incurrir en gastos innecesarios de balanceador de carga, en tres sencillos pasos.
1. Elastic Beanstalk
El primer paso es despedirse de tu balanceador de carga. Convertir tu tipo de insancia a single instance de “load balanced.” Puedes hacer esto desde la pestaña Capacity dentro de Configurations. Simplemente elige “instancia única” en el tipo de entorno y eso es todo.

2. Certbot
El segundo paso es crear y firmar el certificado utilizando “certbot”. Puedes encontrarlo aquí. Debería mencionar que necesitarás un dominio para utilizar el certificado.
Abre la terminal en tu máquina local. Estoy usando Mac, así que algunos de los comandos pueden ser un poco diferentes para ti.
certbot certonly --manual -d domain.com --preferred-challenges dns- “certonly”: utiliza autenticadores de cerbot
- “manual”: genera certificados en máquinas que no sean servidores web.
- “d”: especifica un dominio
- “preferred-challenges”: un método para la verificación del dominio
La interfaz de línea de comandos te pedirá que permitas registrar la dirección IP de tu máquina. Tienes que aceptar para continuar.
Después de eso, te pedirá que despliegues un registro DNS TXT con el nombre_acme-challenge.domain.com. Presiona “enter” cuando desees verificar el nuevo registro.
Al crear con éxito el certificado, la interfaz de línea de comandos generará dos archivos: “privkey.pem” y “fullchain.pem”.
certbot certificatesPuedes usar el comando anterior para listar todos los certificados junto con las rutas a sus archivos.
3. .ebextensions
Bien, así que casi hemos terminado, el tercer y último paso es habilitar HTTPS para tu “instancia única” permitiendo el tráfico en el puerto 443.
ChatGPT Crea una carpeta llamada .ebextensions, es importante que el nombre sea exactamente el mismo. Luego crea un archivo de configuración con la extensión “.config”.
Resources:
sslSecurityGroupIngress:
Type: AWS::EC2::SecurityGroupIngress
Properties:
GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
IpProtocol: tcp
ToPort: 443
FromPort: 443
CidrIp: 0.0.0.0/0
packages:
yum:
mod24_ssl : []
files:
/etc/httpd/conf.d/ssl.conf:
mode: "000644"
owner: root
group: root
content: |
LoadModule ssl_module modules/mod_ssl.so
Listen 443
<VirtualHost *:443>
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
SSLEngine on
SSLCertificateFile "/etc/pki/tls/certs/server.crt"
SSLCertificateChainFile "/etc/pki/tls/certs/chain.pem"
SSLCertificateKeyFile "/etc/pki/tls/certs/server.key"
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
SSLSessionTickets Off
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
ProxyPass / http://localhost:80/ retry=0
ProxyPassReverse / http://localhost:80/
ProxyPreserveHost on
RequestHeader set X-Forwarded-Proto "https" early
</VirtualHost>
/etc/pki/tls/certs/server.crt:
mode: "000400"
owner: root
group: root
source: 'https://s3-eu-west-1.amazonaws.com/numu.elasticbean/ssl/`{"Ref": "AWSEBEnvironmentName" }`.crt'
authentication: S3Access
/etc/pki/tls/certs/server.key:
mode: "000400"
owner: root
group: root
source: 'https://s3-eu-west-1.amazonaws.com/numu.elasticbean/ssl/`{"Ref": "AWSEBEnvironmentName" }`.key'
authentication: S3Access
/etc/pki/tls/certs/chain.pem:
mode: "000400"
owner: root
group: root
source: 'https://s3-eu-west-1.amazonaws.com/numu.elasticbean/ssl/`{"Ref": "AWSEBEnvironmentName" }`.pem'
authentication: S3Access- “packages” la clave instala mod24_ssl en la instancia.
- “files” la clave se utiliza para crear archivos que contienen el certificado, la cadena de certificados y la clave privada que certbot creó.
Nota:
- Copia el contenido de “privkey.pem” al archivo server.key
- Copia el contenido de “fullchain.pem” al archivo chain.pem
- Habrá dos claves en “fullchain.pem” Solo necesitas copiar la primera clave al archivo server.crt
Ahora todo lo que tienes que hacer es desplegar tu código en Elastic Beanstalk. Asegúrate de que tu instancia esté conectada a la misma URL en Route53 que ingresaste en la interfaz de línea de comandos de certbot.
“¡¡¡Voilà!!! Calificación A+ para tu propio certificado SSL sin coste alguno. Puedes testear tu certificado SSL en ssllabs.com.”

