Title: Let's encrypt on OpenBSD in 5 minutes | |
Author: Solène | |
Date: 20 January 2017 | |
Tags: security openbsd70 openbsd | |
Description: | |
Let's encrypt is a free service which provides free SSL | |
certificates. It is fully automated and there are a few tools to | |
generate your certificates with it. In the following lines, I will | |
just explain how to get a certificate in a few minutes. You can find | |
more informations on [Let's Encrypt website](https://letsencrypt.org). | |
To make it simple, the tool we will use will generate some keys on the | |
computer, send a request to Let's Encrypt service which will use http | |
challenging (there are also dns and another one kind of challenging) | |
to see if you really own the domain for which you want the | |
certificate. If the challenge process is ok, you have the certificate. | |
**Please, if you don't understand the following commands, don't type | |
it.** | |
While the following is right for OpenBSD, it may change slightly for | |
others systems. Acme-client is part of the base system, you can read | |
the man page acme-client(1). | |
## Prepare your http server | |
For each certificate you will ask a certificate, you will be | |
challenged for each domain on the port 80. A file must be available in | |
a path under "/.well-known/acme-challenge/". | |
You must have this in your **httpd** config file. If you use another | |
web server, you need to adapt. | |
server "mydomain.com" { | |
root "/empty" | |
listen on * port 80 | |
location "/.well-known/acme-challenge/*" { | |
root { "/acme/" , request strip 2 } | |
} | |
} | |
The `request strip 2` part is IMPORTANT. (I've lost 45 minutes figuring | |
out why root "/acme/" wasn't working.) | |
## Prepare the folders | |
As stated in acme-client man page and if you don't need to change the | |
path. You can do the following commands with root privileges : | |
# mkdir /var/www/acme | |
# mkdir -p /etc/ssl/acme/private /etc/acme | |
# chmod 0700 /etc/ssl/acme/private /etc/acme | |
## Request the certificates | |
As root, in the acme-client sources folder, type the following the | |
generate the certificates. The verbose flag is interesting and you | |
will see if the challenging step work. If it doesn't work, you should | |
try manually to get a file like with the same path tried from Let's | |
encrypt, and try again the command when you succeed. | |
$ acme-client -vNn mydomain.com www.mydomain.com mail.mydomain.com | |
Now, you can use your SSL certificates for your mail server, imap | |
server, ftp server, http server.... There is a little drawback, if you | |
generate certificates for a lot of domains, they are all written in | |
the certificate. This implies that if someone visit one page, look at | |
the certificate, this person will know every domain you have under | |
SSL. I think that it's possible to ask every certificate independently | |
but you will have to play with acme-client flags and make some kind of | |
scripts to automatize this. | |
Certificate file is located at **/etc/ssl/acme/fullchain.pem** and | |
contains the full certification chain (as its name is explicit). And | |
the private key is located at **/etc/ssl/acme/private/privkey.pem**. | |
Restart the service with the certificate. | |
## Renew certificates | |
Certificates are valid for 3 months. Just type | |
./acme-client mydomain.com www.mydomain.com mail.mydomain.com | |
EASY ! |