Digital Ocean DNS-01 challange
Brief notes on how to setup a lets encrypt cert bot using digital oscean as dns provider.
Configure DNS at domain registrar
- At the domain name registrar, configure the domain to use Digital Ocean's nameservers.
- Example: at GoDaddy this setting is called use custom name servers.
Create an API Token
- Login to https://cloud.digitalocean.com/
- Register an account unless you already have one.
- Keep any credentials in a safe place.
- Click on API in the navigation menu.
- Select Token → Generate new token.
- Give the token a descriptive name, so you can identify and revoke it if necessary.
- Select the desired expiration.
- Suggestion: use No expiration to avoid maintenance overhead.
- Select Custom scopes to narrow down what the token can do with the API.
- Select the Domain resource type, so the token can only modify domain records.
- Click Generate Token.
- Copy the token string and keep it in a very safe place.
- You will not be able to view it again.
- If this token becomes public, someone could modify your DNS records.
Setup the certbot
Install certbot
- Make sure your server has internet access (required for DNS-01 challenge).
- Ensure the snap version of certbot is installed and configured:
sudo snap install --classic certbot sudo snap set certbot trust-plugin-with-root=ok
Install Digital Ocean Plugin
- Install the Digital Ocean plugin:
sudo snap install certbot-dns-digitalocean
Create credentials file
- Create the file:
sudo nano /etc/letsencrypt/digitalocean.ini
- Paste this line (replace with your security token):
dns_digitalocean_token = PASTE_TOKEN_HERE
- In nano: use Ctrl+O to write, then Ctrl+X to exit.
Secure credentials file
- Change ownership of the file:
sudo chown root:root /etc/letsencrypt/digitalocean.ini
- Restrict permissions:
sudo chmod 600 /etc/letsencrypt/digitalocean.ini
Activate certbot
Request certificate
- Replace example.com and int.example.com (add/remove domains as needed).
- Wildcards are supported, e.g. `*.example.com`.
- Use the domain owner's email.
sudo certbot certonly --dns-digitalocean \ --dns-digitalocean-credentials /etc/letsencrypt/digitalocean.ini \ -d example.com -d int.example.com \ --agree-tos --email you@example.com --non-interactive
Test renewal
- Test renewal with a dry run:
sudo certbot renew --dry-run
Avoid renewing certificates without the dry run flag as Let's encrypt has a cap of renewals/day.
Reload nginx
- If successful, check nginx config and reload:
sudo nginx -t && sudo systemctl reload nginx