Traefik: Configurar dns-01 challenge de let’s encrypt en OVH con Wildcards

Imagino que todo el mundo sabrá que let’s encrypt por fin admite certificados wildcard. Que es un certificado wildcard? pues un certificado único que vale para todos los subdominios. Ej: *.ichasco.com. De este modo, todos los subdominios de ichasco.com podrán utilizar el mismo certificado. Y como no podía ser de otro modo, Traefik también lo ha implementado en la versión 1.6. Por lo que ahora se pueden generar wildcards al vuelo. Cabe destacar que para usar esto, hay que hacer la validación por DNS y no por HTTP. En este post explicaré como hacerlo con OVH como proveedor de DNS.

Crear las Keys en OVH

Crear la aplicación en OVH:

https://eu.api.ovh.com/createApp/

Rellenar con los parámetros necesarios. En el Account ID poner el ID y no el correo.

Guardar las Application Key y Secret

Hacer un curl en una terminal para conseguir consumerKey. Sustituir por el que nos ha dado previamente en el paso anterior

curl \
-XPOST \
-H"X-Ovh-Application: <Application_Key>" \
-H "Content-type: application/json" \
https://eu.api.ovh.com/1.0/auth/credential -d '{
"accessRules": [
 {
 "method": "GET",
 "path": "/*"
 },
 {
 "method": "POST",
 "path": "/*"
 },
 {
 "method": "PUT",
 "path": "/*"
 },
 {
 "method": "DELETE",
 "path": "/*"
 }
],
"redirection": "https://miweb.com/"
}'

Esto nos dará el consumerKey y una URL

{"validationUrl":"https://eu.api.ovh.com/auth/?credentialToken=sRp1huz56Z3lGPR4mgZ01u6fYJ9Droa1zVu6zGHO6bpA32r2tfASDa876AD","consumerKey":"EoE092vBxNhMyDlM3nLmnT3d2Sf12WiosciIh6DeI","state":"pendingValidation"}

Para validarlo, hay que abrir la URL en un navegador.

https://eu.api.ovh.com/auth/?credentialToken=sRp1huz56Z3lGPR4mgZ01u6fYJ9Droa1zVu6zGHO6bpA32r2tfASDa876AD

Y validar los datos. Otra vez ingresar con el ID y no con el correo

Con esto se conseguirá:

  • Application Key
  • Application Secret
  • Consumer Key

Una vez hecho esto, configurar Traefik para que utilice el challenge de dns

vim traefik.toml
[acme]
  email = "info@ichasco.com"
  storage = "/etc/traefik/acme/acme.json"
  entryPoint = "https"
  acmeLogging = true
  OnHostRule = true
  [acme.dnsChallenge]
    provider = "ovh"
    delayBeforeCheck = 0

Y configurar las keys que previamente hemos obtenido de OVH en el docker-compose:

environment:
 - OVH_ENDPOINT=ovh-eu
 - OVH_APPLICATION_KEY=application_key
 - OVH_APPLICATION_SECRET=applicatoin_secret
 - OVH_CONSUMER_KEY=EoE092vBxNhMyDlM3nLmnT3d2Sf12WiosciIh6DeI

Una vez hecho esto, reiniciar traefik y viendo los logs, se puede comprobar que ha funcionado correctamente:

proxy_1 | legolog: 2018/03/28 08:21:43 [INFO][test.ichasco.com] acme: Trying to solve DNS-01
proxy_1 | legolog: 2018/03/28 08:21:43 [INFO][test.ichasco.com] Checking DNS record propagation using [127.0.0.11:53]
proxy_1 | legolog: 2018/03/28 08:21:55 [INFO][test.ichasco.com] The server validated our request
proxy_1 | legolog: 2018/03/28 08:21:55 [INFO][test.ichasco.com] acme: Validations succeeded; requesting certificates
proxy_1 | legolog: 2018/03/28 08:21:57 [INFO][test.ichasco.com] Server responded with a certificate.

Certificados Wildcard

Como hemos dicho antes, traefik implementa el acme 2.0 que soporta wildcards a partir de la versión 1.6. Actualmente está en RC por lo que para usarla hay que forzarla en el docker-compose

image: traefik:1.6

Para que traefik pueda generar los certificados wildcard, hay que indicarle los dominios en el fichero de configuración

vim traefik.toml
[acme]
 email = "info@ichasco.com"
 storage = "/etc/traefik/acme/acme.json"
 entryPoint = "https"
 acmeLogging = true
 OnHostRule = true
 [acme.dnsChallenge]
   provider = "ovh"
   delayBeforeCheck = 0
 [[acme.domains]]
   main = "*.ichasco.com"

Y cuando se arranca traefik se puede ver como se crean los certificados

proxy_1 | legolog: 2018/03/28 09:31:48 [INFO][*.ichasco.com] acme: Obtaining bundled SAN certificate
proxy_1 | legolog: 2018/03/28 09:31:49 [INFO][*.ichasco.com] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz/qeKIa15fNXeZQBGfjGNyUa9WlCq3P9j54Z-3FaSLT_AgXDe0
proxy_1 | legolog: 2018/03/28 09:32:14 [INFO][*.ichasco.com] acme: Validations succeeded; requesting certificates

Y ya se pueden ver los certificados wildcard en las Webs

Tutorial para crear las Keys de OVH:
https://eu.api.ovh.com/g934.first_step_with_api

Info sobre traefik 1.6 y letsencrypt:
https://docs.traefik.io/v1.6/configuration/acme/

 

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *