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/