Seleccionar página

Certificados SSL gratuitos Let’s Encrypt: Integración inmediata con las pilas de software más populares

Una de las cuestiones clave que debemos abordar al alojar aplicaciones de producción es garantizar su seguridad. El enfoque muy básico y comúnmente utilizado para el intercambio seguro de datos es cifrar el tráfico de la aplicación con el protocolo HTTPS.

Además de eso, a partir del 1 de enero de 2017, uno de los navegadores más populares, Google Chrome, ha comenzado a marcar todas las páginas web que solicitan especificar la contraseña o los detalles de la tarjeta de crédito y no están protegidas con SSL, como no seguras. Esta novedad hace que la integración del cifrado sea aún más esencial.

Sin embargo, emitir y configurar un certificado SSL personalizado para un proyecto puede ser una tarea bastante complicada y que requiere mucho tiempo. Let’s Encrypt (LE) es una autoridad certificadora abierta y gratuita, que permite simplificar y automatizar enormemente el proceso de integración de certificados SSL de confianza.

Una tendencia general de mover Web a HTTPS implica la automatización completa de la emisión y el dispositivo de certificados SSL personalizados. Así, los desarrolladores de Elasticserver han realizado un gran trabajo al empaquetar el servicio Let’s Encrypt con Cloud Scripting , para implementar una solución que permita deshacerse de realizar renovaciones periódicas de certificados.

La ventaja clave de esta solución es una integración única lista para usar con las pilas de servidores de aplicaciones y equilibradores de carga más populares. De esta manera, brinda la posibilidad de proteger libremente la mayoría de las aplicaciones existentes que se ejecutan en Elasticserver.

Al estar aprovisionada como un complemento, esta solución se puede instalar fácilmente en la parte superior de cualquier contenedor con el soporte de SSL personalizado habilitado, es decir, los siguientes servidores (la lista se amplía constantemente):

  • Equilibradores de carga: NGINX, Apache LB, HAProxy , Varnish
  • Servidores de aplicaciones Java: Tomca t, TomEE, GlassFis h, Payara, Jetty
  • Servidores de aplicaciones PHP – Apache PHP, NGINX PHP
  • Servidores de aplicaciones Ruby: Apache Ruby, NGINX Ruby

Si necesita Let’s Encrypt SSL para cualquier otra pila, simplemente agregue un equilibrador de carga frente a sus servidores de aplicaciones e instale el complemento. La terminación SSL en el nivel de equilibrio de carga se usa de forma predeterminada en topologías agrupadas.

Cómo funciona

Durante la instalación, el complemento descarga y configura el cliente Let’s Encrypt (el llamado agente de administración de certificados (CMA)), solicita certificados a la autoridad certificadora (CA) Let’s Encrypt, aplica los certificados emitidos a la pila de software en ejecución de acuerdo con sus especificaciones de integración SSL y agrega un trabajo cron especial para iniciar la actualización de certificados cuando se acerca la fecha de vencimiento.

Validación de control de dominio

Tras la solicitud de emisión de certificados, Let’s Encrypt CA verifica el punto de entrada del ambiente en el puerto 80 para demostrar que el servidor web dado controla los dominios especificados. Por lo tanto, durante el proceso de validación del dominio, todo el tráfico HTTP entrante se enrutará internamente al puerto 12345 personalizado donde se ejecuta el proxy CMA correspondiente.

En caso de que una capa contenga varios nodos del mismo tipo, durante el período de actualización todo el tráfico HTTP entrante se enrutará adicionalmente al nodo maestro donde se ejecuta el proxy CMA. Esto se logra estableciendo reglas de enrutamiento DNAT temporales especiales para que la solicitud de validación de dominio pueda ser manejada por el CMA.

Dado que dicha redirección es necesaria solo durante la validación del dominio, estas configuraciones especiales de DNAT se eliminarán justo después de que se confirme la correspondencia del nombre de host.

Después de la validación exitosa del dominio, CMA tiene la capacidad de solicitar, renovar y revocar certificados SSL para dominios específicos, por lo que generará automáticamente el par de claves SSL apropiado. Como resultado, los certificados emitidos se propagarán a todos los nodos dentro de la capa de punto de entrada a través de la API de Elasticserver, por lo que la aplicación se configurará correctamente para el trabajo posterior a través de HTTPS.  

A pesar de la extensa descripción, todas estas operaciones se manejan en cuestión de minutos. Ahora, descubramos cómo iniciar realmente la instalación del complemento Let’s Encrypt.

Vamos a cifrar la instalación del complemento SSL

Para obtener un certificado SSL para el nombre de host del ambiente, realice lo siguiente:

1. Inicie sesión en el panel de Elasticserver y haga clic en Tienda de aplicaciones en la parte superior de una página. Dentro del marco abierto, cambie a la pestaña Complementos y busque el paquete Let’s Encrypt Free SSL .

Consejo: Alternativamente, puede importar el archivo manifest.jps desde el repositorio de complementos de Let’s Encrypt apropiado: https://github.com/jelastic-jps/lets-encrypt/blob/master/manifest.jps

La importación de complementos a través de la pestaña JPS permite proporcionar personalización sobre la marcha.

Haga clic en Instalar para continuar.

. Una vez que se obtienen los datos requeridos, verá la ventana de instalación del complemento Let’s Encrypt SSL.

Aquí, necesitas:

  • proporcionar dominios externos del ambiente de destino, las opciones posibles son:
    • deje el campo en blanco para crear un certificado SSL ficticio, asignado a la URL interna del ambiente ( env_name. { hoster_domain } ), para ser utilizado en las pruebas
    • inserte los dominios externos vinculados preliminares para obtener un certificado de confianza para cada uno de ellos; si especifica varios nombres de host, sepárelos con coma o punto y coma

  • seleccione el nombre del ambiente correspondiente en la lista desplegable expandible
  • seleccione una capa de nodos con el punto de entrada de su ambiente (por lo general, el complemento lo detecta y recupera automáticamente, pero puede redefinirse manualmente)

Finalmente, haga clic en Instalar para iniciar la instalación de los certificados SSL apropiados.

Tenga en cuenta que el complemento requiere una dirección IP pública para funcionar correctamente. Entonces, en caso de que el punto de entrada del ambiente no lo tenga, se adjuntará automáticamente durante la instalación (tenga en cuenta que la IP pública es una opción de pago; el costo se puede encontrar dentro del marco de Cuotas y precios ).

3. El proceso de instalación puede llevar varios minutos para validar la propiedad del nombre de dominio, emitir certificados de Let’s Encrypt y aplicarlos.
Cuando termine, puede acceder a la sección Configuración del ambiente > SSL  para verificar que el soporte HTTPS está activo y encontrar la fecha de vencimiento del certificado.

4. También puede asegurarse de que todo funcione como se esperaba al intentar abrir la aplicación a través de HTTPS :

Como puede ver, el ambiente es accesible y la conexión establecida es segura y confiable para el navegador.

Instalación de complementos a través de API

Alternativamente, el complemento se puede instalar con la instalación del método de la API  Elasticserver . La llamada de API se ve así:

https: // [ app.infra-j.elasticserver.co/ ] /1.0/marketplace/jps/rest/install?jps=letsencrypt-ssl-addon&session= {session} & envName = {nombre_de_tu_ambiente} & nodeGroup = {tu_grupo_de_nodos} & settings = {configuración_de_su_complemento}

dónde:

{session} token de autenticación o sesión del usuario 

{nombre_de_tu_ambiente} : nombre del ambiente de destino

{tu_grupo_de_nodos} : identificador único de nodeGroup

{configuración_de_su_complemento} : lista de configuraciones específicas de complementos en formato JSON (pares clave: valor)

Configuraciones disponibles:

  • customDomains : dominios externos vinculados para obtener un certificado de confianza para cada uno de ellos; si especifica varios nombres de host, sepárelos con coma o punto y coma. Déjelo en blanco para crear un certificado SSL ficticio X1, asignado al dominio interno del entorno
  • nodeGroup [opcional]  : grupo de nodos de entorno donde se debe instalar el complemento. El valor predeterminado es: nodeGroup del complemento
  • nodeId [opcional]  : nodo de entorno particular donde se instalará la nube complementaria
  • webroot [opcional]  : utilice el método «webroot» en lugar de «independiente» para la validación del dominio por parte de la autoridad de certificación Let’s Encrypt. Por defecto es: falso 
  • webrootPath [opcional] : un directorio («raíz web») que contiene los archivos proporcionados por su servidor web para validar un dominio (solo se aplica si «webroot = true») 
  • fallbackToX1 [opcional] : obtenga un certificado de prueba de un servidor intermedio si falla la emisión de un certificado X3 confiable. Por defecto es: falso
  • deployHook [opcional] : un enlace o un cuerpo de script para invocar después de obtener un certificado
  • deployHookType [opcional] : bash o js (solo se aplica si el parámetro deployHook no está vacío). El valor predeterminado es: js  
  • undeployHook [opcional] : un enlace o un cuerpo de script para invocar después de desinstalar el complemento
  • undeployHookType [opcional] : bash o js (solo se aplica si el parámetro undeployHook no está vacío). El valor predeterminado es: js  
  • prueba [opcional] : obtenga un certificado X1 ficticio de un servidor intermedio. Por defecto es: falso

Por ejemplo:

curl -X POST ‘ https : // app.infra-j.elasticserver.co marketplace jps rest install ‘-d session = dedb4acdedb4acdedb4ac4dedb4ace370e0b03 -d jps = letsencrypt-ssl-addon -d envName = application -d nodeGroup = cp –data-urlencode settings =’ {«customDomains»: «aplicación. midominio-personalizado «} ‘

Actualización de Let’s Encrypt Certificates

Su (s) certificado (s) SSL Let’s Encrypt seguirán siendo válidos durante 90 días. Una vez que expire este período, deben renovarse para que el cifrado permanezca activo.

De forma predeterminada, los certificados SSL actualizados requeridos se solicitan y aplican automáticamente 30 días antes del vencimiento (recibirá la notificación por correo electrónico correspondiente). Este control se realiza una vez al día según el trabajo cron apropiado. Si es necesario, la hora exacta se puede especificar ajustando la configuración correspondiente «cronTime»: » 0 $ {fn.random (1,6)} * * * » dentro de este archivo de manifiesto de paquete.

Además, esta operación se puede realizar manualmente en cualquier momento. Para eso, haga clic en el botón Complementos junto a la capa de entorno apropiada y use el botón Actualizar ahora dentro del panel de complementos.

Además, sus certificados SSL se pueden actualizar mediante la reinstalación de complementos para los mismos nombres de dominio. Por lo tanto, agregar nuevos o especificar nombres de dominio diferentes durante este procedimiento provocará la sustitución completa de los certificados usados.

Actualización de certificados a través de API

De manera similar a la instalación de complementos, se puede forzar la actualización del certificado mediante una llamada a la API con el método executeappaction :

https://https://app.infra-j.elasticserver.co/1.0/marketplace/jps/rest/executeappaction?session= {session} & appUniqueName = {nombre-unico-dela-app} & action = update

donde :

  • {session} : token de autenticación o sesión del usuario 
  • {nombre_unico_dela_app} : nombre único del complemento instalado. Podría encontrarse como el valor de la clave nombreunico en la respuesta del método GetEnvInfo .

Por ejemplo:

curl -X POST ‘ https : // app.infra-j.elasticserver.comarketplace jps rest executeappaction ‘-d session = dedb4acdedb4acdedb4ac4dedb4ace370e0b03 -d appUniqueName = f56f5659-f4ff-42fd-8955-1f9a750abcd9 -d action = actualizar

Vamos a cifrar la reconfiguración de certificados

En caso de necesidad, el complemento Let’s Encrypt Free SSL ya existente se puede ajustar para adaptarse a los nuevos requisitos. Simplemente haga clic en el botón Configurar dentro del panel Let’s Encrypt.

Luego, en la ventana emergente, puede cambiar el (los) dominio (s) externo (s) o eliminar cualquiera de los enumerados (por ejemplo, si tuvo problemas para asignarles un certificado SSL).

Nota: Para evitar problemas de seguridad, se emitirá un nuevo certificado, incluso en el caso de que se eliminen los nombres de dominio del existente.

Vamos a cifrar la reconfiguración de certificados a través de API

https://[api-host]/1.0/marketplace/jps/rest/executeappaction?session={session}&appUniqueName={nombre-unico- dela-app}&action=configure&params={«dominios-personalizados»:»{nueva-lista-de-dominios}»}

dónde:

  • {session} : token de autenticación o sesión del usuario 
  • {nombre-unico-dela-app} : nombre único del complemento instalado. Podría encontrarse como el valor de la clave nombreunico en la respuesta del método GetEnvInfo
  • {nueva-lista-de-dominios} : nueva lista de dominios externos vinculados para obtener un certificado SSL para cada uno de ellos; si especifica varios nombres de host, sepárelos con coma o punto y coma

Ejemplo:

curl -X POST ‘ https : //app.infra-j.elasticserver.co marketplace jps rest executeappaction ‘-d session = dedb4acdedb4acdedb4ac4dedb4ace370e0b03 -d nombreunicodelaapp = f56f5659-f4ff-42fd-8955-1f9a750abcd9 -d action = configure –data-urlencode params = «dominios.personalizados.com»:»sub.ejemplo.com «} ‘ :

Vamos a cifrar la eliminación del complemento SSL

Si es necesario, el complemento Let’s Encrypt SSL se puede eliminar fácilmente de su ambiente. Simplemente vaya a la pestaña Complementos , expanda la lista de opciones en la esquina superior derecha de la tabla Let’s Encrypt SSL y seleccione Desinstalar :

Después de la confirmación, el complemento se eliminará y los certificados adjuntos se desactivarán.

¡Eso es! Ahora ya sabe cómo instalar y administrar el complemento Let’s Encrypt para la configuración automática personalizada de SSL de su ambiente para que pueda proteger casi cualquier aplicación en poco tiempo, completamente gratis y sin apenas esfuerzo.