Usando Let's Encrypt con el Acelerador Web de Sakura Cloud (CDN)
Acelerador Web Servidor
Lastmod: 2021-01-29
Published: 2017-01-25

Este contenido ha sido trasladado desde Qiita.

Probemos usar Let’s Encrypt con el Acelerador Web de Sakura Cloud.

Actualización (2021/01/29)

Se lanzó la función de actualización automática de Let’s Encrypt en el propio Acelerador Web,
¡así que ya no es necesario pasar por los siguientes inconvenientes! 🎉

Resumen

Cuando se utiliza un dominio propio con el Acelerador Web de Sakura Cloud,
se puede realizar SSL (también compatible con HTTP2) instalando un certificado SSL, así que aquí está la historia de cómo utilicé el certificado de Let’s Encrypt.

Lo que hay que hacer

  • Obtener un certificado de Let’s Encrypt
  • Intentar registrar el certificado SSL a través de la API

Requisitos previos

  • El Acelerador Web ya está funcionando con un dominio propio.
  • Suponemos que el servidor de origen está creado con nginx.

Estado Actual

  • Configuración de nginx en el servidor de origen
server {
    listen       80;
    server_name  www.ejemplo.jp;

    location / {
        root /usr/share/nginx/html;
        index index.html;

        add_header Cache-Control s-maxage=3600;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
  • Estado donde el contenido del servidor de origen se almacena en caché por 1 hora (3600 segundos)

Preparativos para emitir un certificado con Let’s Encrypt

Preparación de la herramienta de emisión de certificados

Oficialmente se recomienda usar una herramienta llamada certbot, pero como es complicado instalar Python, utilizaremos lego, que está escrito en golang.

https://github.com/xenolf/lego/releases

Ya hay un binario precompilado disponible, así que lo utilizaremos rápidamente.

  • Descarga (en este caso, para Linux de 64 bits)
# curl -L -O https://github.com/xenolf/lego/releases/download/v0.3.1/lego_linux_amd64.tar.xz
# tar xvf lego_linux_amd64.tar.xz
  • Prueba para verificar si el comando funciona
# cd lego
# ./lego --verison

Utilizaremos el comando lego para realizar la verificación de propiedad del dominio y así emitir el certificado mediante el método de webroot (colocando el archivo de verificación en un directorio específico).

Archivos y caché usados para la verificación del dominio

Para evitar que el archivo de verificación de dominio se almacene en caché por el Acelerador Web,
agregaremos una configuración a nginx para que no se almacene en caché.

Como el archivo utilizado para la verificación del dominio debe colocarse en /.well-known/ dentro de la raíz del documento,
aislaremos la ubicación de modo que la carpeta /.well-known/ no se almacene en caché.

server {
    listen       80;
    server_name  www.ejemplo.jp;

    location / {
        root /usr/share/nginx/html;
        index index.html;

        add_header Cache-Control s-maxage=3600;
    }

+    location /.well-known/ {
+        root /usr/share/nginx/html;
+        index index.html;
+    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

El Acelerador Web no almacenará en caché a menos que se incluya s-maxage en Cache-Control.

Intentamos emitir el certificado con lego

# ./lego --path ./ --webroot /usr/share/nginx/html/ --email hoge@ejemplo.jp --domains www.ejemplo.jp --accept-tos run

Si no hubo problemas, encontrarán la clave privada y el certificado dentro de un directorio llamado certificate.

Nombre de archivoContenido
www.ejemplo.jp.crtCertificado del servidor y certificado intermedio
www.ejemplo.jp.keyClave privada

Este certificado del servidor y el certificado intermedio se pueden registrar en el Acelerador Web para ser utilizados como SSL.

Registro de certificados en el Acelerador Web usando la API

Es posible registrar un certificado SSL desde el panel de control, pero, pensando en la actualización automática,
creo que es más conveniente usar la API para registrar el certificado SSL.

Actualización del 21/12/2017: ¡La API se ha hecho pública oficialmente, por lo que ahora puede actualizar con confianza!
Anuncio de adición de funciones en el Acelerador Web
Nota: Al parecer, la API para el registro de certificados SSL no es información pública. He estado utilizando la API a la que accede el panel de control,
pero como no está documentada, ¡hágalo bajo su propio riesgo!

Primero, obtenga su token de API de Sakura Cloud.
No se incluirán detalles sobre cómo usar la API de Sakura Cloud.

Configura el certificado a través de la API

# curl -X POST --user "Access Token":"Access Token Secret" \
https://secure.sakura.ad.jp/cloud/zone/is1a/api/webaccel/1.0/site/<ID del sitio>/certificate \
-d "{\"Certificate\": { \"CertificateChain\": \"$(perl -pe 's/\n/\\n/' certificates/www.ejemplo.jp.crt | perl -pe 's/\\n$//')\", \"Key\": \"$(perl -pe 's/\n/\\n/' certificates/www.ejemplo.jp.key | perl -pe 's/\\n$//')\" }}" | jq .

Nota: Por favor, reemplace el token de API, , y los nombres de archivo del certificado según corresponda.

Una vez que el registro se complete sin problemas, al acceder a https://www.ejemplo.jp/ debería aparecer el sitio con el certificado de Let’s Encrypt.

Por último

La actualización del certificado SSL también se puede automatizar utilizando Let’s Encrypt junto con la API de Sakura Cloud,
parece que se puede crear un sistema que lo actualice automáticamente.

Solo parece necesario ejecutar el siguiente comando para actualizar el certificado, lo cual parece bastante sencillo.

# ./lego --path ./ --webroot /usr/share/nginx/html/ --email hoge@ejemplo.jp --domains www.ejemplo.jp --accept-tos renew
# curl -X PUT --user "Access Token":"Access Token Secret" \
https://secure.sakura.ad.jp/cloud/zone/is1a/api/webaccel/1.0/site/<ID del sitio>/certificate \
-d "{\"Certificate\": { \"CertificateChain\": \"$(perl -pe 's/\n/\\n/' certificates/www.ejemplo.jp.crt | perl -pe 's/\\n$//')\", \"Key\": \"$(perl -pe 's/\n/\\n/' certificates/www.ejemplo.jp.key | perl -pe 's/\\n$//')\" }}" | jq .