OpenBSD acme-client(1)
short guide for acme-client
acme-client is an Automatic Certificate Management Environment (ACME) client: it looks in its configuration for a domain section corresponding to the domain given as command line argument and uses that configuration to retrieve an X.509 certificate which can be used to provide domain name validation
setup httpd
## first setup httpd well known acme location in "/etc/httpd.conf"
server "www.example.com" {
alias "example.com"
listen on * port 80
root "/htdocs/www.example.com"
location "/.well-known/acme-challenge/*" {
root "/acme"
request strip 2
}
}
## testing "httpd.conf" file
> httpd -nf /etc/httpd.conf
## start httpd forced
> rcctl -f start httpd
## enable httpd
> rcctl enable httpd
## create /etc/acme-client.conf
authority letsencrypt {
api url "https://acme-v02.api.letsencrypt.org/directory"
account key "/etc/acme/letsencrypt-privkey.pem"
}
authority letsencrypt-staging {
api url "https://acme-staging-v02.api.letsencrypt.org/directory"
account key "/etc/acme/letsencrypt-staging-privkey.pem"
}
domain example.com {
alternative names { secure.example.com }
domain key "/etc/ssl/private/example.com.key"
domain full chain certificate "/etc/ssl/example.com.fullchain.pem"
sign with letsencrypt
}
## create acme certificate
> acme-client -v www.example.com
Note: Certificates are default load from
/etc/ssl/private/server.key
/etc/ssl/server.crt
to load acme certificates we need to instruct httpd
where these stored
## configure "/etc/httpd.conf"
server "www.example.com" {
alias "example.com"
listen on * port 80
listen on * tls port 443
root "/htdocs/www.example.com"
tls certificate "/etc/ssl/acme/fullchain.pem"
tls key "/etc/ssl/acme/private/privkey.pem"
location "/.well-known/acme-challenge/*" {
root "/acme"
request strip 2
}
# this will redirect traffic to tls port 443
block return 301 "https://$SERVER_NAME$REQUEST_URI"
}
## we need to reload config for httpd
> rcctl reload httpd
so we want to make shure that we route every traffic over https with relayd
## add to /etc/relayd.conf
relay "proxyssl" {
listen on $gateway port https
protocol "httpproxy"
forward to <new-webserver> port https
}
to automatic renew our certificates we need to speak to daily(8)
(openbsd crontab)
## renew acme certificate every night
## edit crontab(8) to automate
~ * * * * acme-client example.com && rcctl reload httpd
as script
#!/bin/sh
acme-client example.com www.example.com
if [ $? -eq 0 ]
then
rcctl reload httpd
fi