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! 🎉
- Hemos comenzado a ofrecer la función de certificado Let’s Encrypt con actualización automática en el Acelerador Web
- 【Acelerador Web】Uso de certificados Let’s Encrypt con actualización automática
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 archivo | Contenido |
---|---|
www.ejemplo.jp.crt | Certificado del servidor y certificado intermedio |
www.ejemplo.jp.key | Clave 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 WebNota: 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.
- Si eres ingeniero de infraestructura, juega con “Sakura Cloud” a través de la API【Introducción】
- Documentación de la API de Sakura Cloud
- API pública del Acelerador Web
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,
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 .