Let's encrypt
Requirements
Software | Version |
---|---|
Ubuntu | 16.04 |
Nginx | 1.10 |
Installation
_$: sudo apt install letsencrypt
Prepare the web server
We have a web server for the domain example.com
.
The path for that web is /var/www/example-com
.
Create a new directory for letsencrypt:
_$: mkdir /var/www/example-com/letsencrypt
Let’s encrypt will place a file in /var/www/example-com/letsencrypt
, so it must be publicly accesible. You can place a small index.html
file in there to see if it is actually publicly accesible.
/var/www/example-com/letsencrypt/index.html:
--------------------------------------------
<!DOCTYPE html>
<html>
<head>
<title>example.com</title>
</head>
<body>
<h1>Let's Encrypt</h1>
</body>
</html>
Go to http://example.com/letsencrypt/index.html and see if you see the contents of the HTML file we just created.
Let’s Encrypt will also create a directory called .well-known
inside /var/www/example/letsencrypt
, so we must do the same check. The easiest way is to create another index.html
file in that directory.
/var/www/example-com/letsencrypt/.well-known/index.html:
--------------------------------------------------------
<!DOCTYPE html>
<html>
<head>
<title>example.com</title>
</head>
<body>
<h1>Let's Encrypt Well-known</h1>
</body>
</html>
Go to http://example.com/letsencrypt/.well-known/index.html and see if you see the contents of the HTML file.
Example: Configure Nginx server to receive a Let’s Encrypt certificate
A possible configuration valid for Nginx that will allow you to install Let’s Encrypt is:
server {
server_name example.com;
listen 80;
root /var/www/example-com;
# Configuration
# ...
# Let's Encrypt
location /letsencrypt/ {
alias /var/www/example-com/letsencrypt/;
}
location /.well-known/ {
alias /var/www/example-com/letsencrypt/.well-known/;
}
}
Note: After having got your certificate, comment that section out.
Get a certificate
_$: sudo letsencrypt certonly --webroot -w /var/www/example/letsencrypt -d example.com
During the installation wizard you will have to enter an email address:
Enter email address (used for urgent notices and lost key recovery): email@example.com
And read the terms of service:
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf
You must agree in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
When it finishes, it will place your certificate at /etc/letsencrypt/live/example.com/fullchain.pem
Check
You can check the certificate you just created with the following command:
_$: openssl x509 -text -noout -in /etc/letsencrypt/live/example.com/fullchain.pem
Renew a certificate
You can test automatic renewal for your certificates by running this command:
_$: sudo letsencrypt renew --dry-run --agree-tos
If that goes well, create a cron task to run twice a day the following command:
letsencrypt renew
Use your shiny new certificate
Create some links to make it easier for nginx to be configured:
_$: cd /etc/nginx
_$: mkdir ssl
_$: ln -s /etc/letsencrypt/live/example.com/privkey.pem ./ssl/example.key
_$: ln -s /etc/letsencrypt/live/example.com/fullchain.pem ./ssl/example.pem
server {
server_name example.com;
root /var/www/example-com;
listen 80;
# Configuration
include conf.d/example-com;
}
server {
server_name example.com;
root /var/www/example-com;
# SSL
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/example.key;
ssl_certificate_key /etc/nginx/ssl/example.pem;
# Configuration
include conf.d/example-com;
}