Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

f1:certificado_ssl [2025/08/27 14:21] – creado lmachucaf1:certificado_ssl [2025/08/27 15:05] (actual) lmachuca
Línea 27: Línea 27:
 git clone https://github.com/acmesh-official/acme.sh.git git clone https://github.com/acmesh-official/acme.sh.git
 </code> </code>
 +
 +Para configurar el servidor web correspondiente (Apache o Nginx) se recomienda seguir las recomendaciones oficiales. En particular, para **Certbot** se recomienda crear un depósito de certificados bajo el árbol de directorios del servicio web (ej.: ''/etc/apache2/certbot'') y para configurar **''acme.sh''** se recomienda [[https://github.com/acmesh-official/acme.sh/wiki/Stateless-Mode|habilitar el modo Stateless]] para simplificar la fase de challenge al pedir un certificado singular de subdominio y crear también su ruta de certificados correspondiente (ej.: ''/etc/apache2/certacme''). 
 +
 +Tomar nota que los repositorios de ''devops-stag'' y ''devops-erebor'' vienen con ejemplos de archivos de configuración para ayudar a configurar acme-challenge y este tutorial asume que esos archivos han sido instalados.
  
 ===== Case 1: Subdominio directo ===== ===== Case 1: Subdominio directo =====
Línea 37: Línea 41:
   * Los puertos 80 y 443 del servidor ''servidor2'' deben estar abiertos y conectados al servidor Apache/Nginx.   * Los puertos 80 y 443 del servidor ''servidor2'' deben estar abiertos y conectados al servidor Apache/Nginx.
  
 +==== httpd ====
 +
 +El servicio web debe tener habilitado un archivo de configuración de acme-challenge, basado en el correspondiente en ''devops-stag'' o similar. Este archivo suele ser:
 +
 +  * Apache: ''/etc/apache2/conf-enabled/acme-challenge.conf''
 +  * Nginx: ''/etc/nginx/conf.d/acme-challenge.conf''
 +
 +==== VirtualHost ====
 +
 +Se asume que el VirtualHost tiene una estructura similar a la siguiente en un archivo de virtualhost:
 +
 +Apache -  ''sites-available/miproyecto.helpcom.cl.conf'' (el cual debe estar activado con ''a2ensite''):
 +
 +<code>
 +<VirtualHost *:80>
 + ServerName miproyecto.helpcom.cl
 + UseCanonicalName Off
 +
 + ErrorLog ${APACHE_LOG_DIR}/miproyecto.log
 + # debería estar cubierto por acme-challenge.conf
 + # Alias /.well-known/acme-challenge  /var/www/.acme
 +
 + # alojamiento directo...
 + # DocumentRoot /var/www/miproyecto.helpcom.cl/public
 + # ...o proxeado 
 + ProxyPreserveHost On
 + # etc...
 +</VirtualHost>
 +</code>
 +
 +Nginx - ''sites-available/miproyecto.helpcom.cl.conf'' - pendiente
 +
 +
 +==== Certbot ====
 +
 +Con Certbot, asumiendo que la configuración esté correcta, basta con invocar Certbot y el programa mismo ofrecerá la opción de modificar el archivo de VirtualHost correspondiente en vivo:
 +
 +<code bash>
 +# Apache
 +certbot certonly --apache -d miproyecto.helpcom.cl
 +# Nginx
 +certbot certonly --nginx -d miproyecto.helpcom.cl
 +</code>
 +
 +Si todo sale correctamente, Certbot generará una familia de certificados en ''/etc/letsencrypt/live.d'' para el dominio deseado, y generará un nuevo archivo de configuración para el servidor web con la configuración HTTPS, por ejemplo en este caso ''/etc/apache2/sites-available/miproyecto.helpcom.cl-le.conf''. Antes de reiniciar el servicio web para que tome la configuración, es necesario activar este nuevo sitio con ''a2ensite''.
 +
 +==== acme.sh ====
 +
 +Con acme.sh, asumiendo que la configuración está correcta, basta con invocar acme.sh pasándole específicamnte la ruta de certificados del servicio que queremos (si no se ha configurado el programa para eso) y habilitando el modo Stateless.
 +
 +<code bash>
 +acme.sh --issue -d miproyecto.helpcom.cl --stateless
 +</code>
 +
 +:!: Notar que la opción ''%%--stateless%%'' va al final.
 +
 +Si todo sale correctamente, el sistema anunciará que se ha generado los archivos de certificado en el directorio deseado. Si no se configuró acme.sh para exportar los certificados al servicio web, se puede hacer directamente con la opción installcert:
 +
 +<code bash>
 +# configurar como corresponda:
 +export CERTP=/etc/apache2/certacme
 +export CERTD=miproyecto.helpcom.cl
 +acme.sh --install-cert -d "CERTD" \
 +    --cert-file "${CERTP}/${CERTD}/cert.pem" \
 +    --key-file "${CERTP}/${CERTD/key.pem" \
 +    --fullchain-file "${CERTP}/${CERTD/fullchain.pem"
 +
 +</code>
 +
 +Una vez que los certificados estén copiados deben coincidir con las rutas en el archivo generado. Si no se configuró acme.sh para generar el archivo, o la configuración no corresponde, se puede crear manualmente con el ejemplo en [[#VirtualHost-443]].
 +
 +==== Reiniciar httpd ====
 +
 +Una vez que esté todo verificado, recargamos la configuración del servidor web:
 +
 +<code bash>
 +# Apache
 +service apache2 reload
 +# Nginx
 +service nginx reload
 +</code>
 +
 +==== HTTPS-only ====
 +
 +Si se desea, una vez que el certificado está probado, forzar el sitio a usar HTTPS, se debe modificar la configuración del sitio de ese VirtualHost del puerto 80 para redirigir al puerto 443.
 +
 +Para esto modificamos el fragmento del VirtualHost en el archivo de sitio HTTP (no HTTPS) por ejemplo ''sites-available/miproyecto.helpcom.cl.conf'', como sigue:
 +
 +**Apache**:
 +
 +<code conf>
 +<VirtualHost *:80>
 + ServerName miproyecto.helpcom.cl
 + UseCanonicalName Off
 + Redirect / https://miproyecto.helpcom.cl/
 +
 + # quitar DocumentRoot y directivas ProxyPass,
 + # pero NO quitar otras directivas de configuración
 +...
 +
 +</VirtualHost>
 +</code>
 +
 +**Nginx**:
 +
 +TBA
  
 ===== Caso 2: Subdominio proxeado por Helpcom ===== ===== Caso 2: Subdominio proxeado por Helpcom =====
Línea 50: Línea 160:
  
 (TBA) (TBA)
 +
 +===== VirtualHost-443 =====
 +
 +Acá se presenta un ejemplo de archivo de VirtualHost resultante, el cual puede ser usado como plantilla para configurar el acceso a los certificados manualmente si por alguna razón Certbot o acme.sh no pueden generar el archivo correctamente:
 +
 +Ejemplo 1: Apache + Certbot
 +
 +<file apache2/sites-available/miproyecto.helpcom.cl-le.conf>
 +<VirtualHost *:443>
 + ServerName miproyecto.helpcom.cl
 + ...
 + Include /etc/letsencrypt/options-ssl-apache.conf
 + SSLCertificateFile     /etc/letsencrypt/live/miproyecto.helpcom.cl/fullchain.pem
 + SSLCertificateKeyFile  /etc/letsencrypt/live/miproyecto.helpcom.cl/privkey.pem
 +
 +...
 +
 +</VirtualHost>
 +
 +</file>
 +
 +Ejemplo 2: Nginx + acme.sh
 +
 +<file nginx/sites-available/miproyecto.helpcom.cl-le.conf>
 +server {
 + listen 80;
 + listen [::]:80;
 + listen 443 ssl;
 + listen [::]:443 ssl;
 + server_name miproyecto.helpcom.cl;
 +
 + include include.d/acme.conf;
 +
 + ssl_certificate         /etc/nginx/certacme/miproyecto.helpcom.cl/fullchain.pem;
 + ssl_certificate_key     /etc/nginx/certacme/miproyecto.helpcom.cl/key.pem;
 + ssl_trusted_certificate /etc/nginx/certacme/miproyecto.helpcom.cl/fullchain.pem;
 +
 + ssl_stapling on
 +
 +...
 +}
 +
 +</file>
  
 {{tag>f1 hosting servicios}} {{tag>f1 hosting servicios}}
    
f1/certificado_ssl.txt · Última modificación: 2025/08/27 15:05 por lmachuca
CC Attribution-Noncommercial-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0