Fixing Letsencrypt's `certbot` Authentication Error in GitLab
For months now, I've been dealing with an annoying problem relating to
my GitLab instance: I could not renew my
TLS certificate without disabling GitLab's http-to-https
forwarding. certbot
would fail with the error:
Failed authorization procedure
What made this hard to figure out is that:
- It worked fine before (but since I wasn't watching the logs, I didn't know which precise update broke everything).
- Nobody else seemed to be having the same problem.
But now I fixed it (finally)!
Background
First some background: I use GitLab ears now. Back in the pre-10.5 days, you
had to set up TLS manually yourself, and supply GitLab with a certificate/key
pair. Thus, I had Letsencrypt's certbot
every day as a
cron job. And GitLab's nginx server would host certbot
's
challenge. This was easy to set up, add:
nginx['custom_gitlab_server_config'] = "location ^~ /.well-known/ { root /var/www/letsencrypt; }"
to your /etc/gitlab/gitlab.rb
.
Problem
But ever since version 10.5, this stopped working (well, not completely: if you
bypassed https it would still work but I was not happy with that): GitLab's
nginx would not allow access to ./well-known
.
Solution
I stumbled accross the solution today: let GitLab manage the
certbot
. Remove the line above, and add:
letsencrypt['enable'] = true
letsencrypt['contact_emails'] = ['your@favorite.email']
to your /etc/gitlab/gitlab.rb
. You can save yourself the cron job by also
adding:
letsencrypt['auto_renew'] = true
letsencrypt['auto_renew_hour'] = "12"
letsencrypt['auto_renew_minute'] = "30"
letsencrypt['auto_renew_day_of_month'] = "*/15"
Presto!
Note
Don't foget to remove any external references to your certificates using the
nginx['ssl_certificate']
settings.