Устанавливаем бесплатные SSL сертификаты на сервер nginx и забываем о них навсегда...

Интернет сейчас массово переходит на защищенные протоколы, пора и нам перевести наш сайт на HTTPS. Официальный сайт Let's Encrypt.

Скачиваем исходники к себе в домашнюю директорию:

$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt
$ ./letsencrypt-auto --help

Для автоматического получения будем использовать плагин webroot. Добавляем location в наш конфиг nginx нашего сайта:

server {
    listen       80;
    server_name  pnixx.ru;

    location '/.well-known/acme-challenge' {
        default_type "text/plain";
        root /tmp/letsencrypt-auto;
    }

    location / {
        return 301 https://pnixx.ru$request_uri;
    }
}

Создаем директорию /tmp/letsencrypt-auto (вы можете использовать любую другую директорию). Перезагружаем сервер:

$ sudo /etc/init.d/nginx reload

Создаем файл renew.sh в директории letsencrypt. Этот файл будет обновлять наши сертификаты.

#!/bin/bash

mkdir -p /tmp/letsencrypt-auto
letsencrypt-auto renew

sudo /etc/init.d/nginx reload

exit 0

Создаем директорию, где будут храниться конфиги /etc/letsencrypt. Создаем файл конфига cli.ini:

# Use a 4096 bit RSA key instead of 2048
rsa-key-size = 4096

# Always use the staging/testing server
#server = https://acme-staging.api.letsencrypt.org/directory
server = https://acme-v01.api.letsencrypt.org/directory

# Указываем адрес почты домена
email = info@pnixx.ru

# Плагин обновления сертификата
authenticator = webroot
webroot-path = /tmp/letsencrypt-auto

Можно кинуть симлинк для быстрого доступа к пакету:

$ ln -s /path/to/letsencrypt/letsencrypt-auto /usr/bin/

Пробуем получить сертификат:

$ letsencrypt-auto certonly -c /etc/letsencrypt/cli.ini -d pnixx.ru -d www.pnixx.ru

Сертификат получили, прописываем у нашего основного сервера полученные сертификаты:

server {
    listen 443 ssl;
    server_name pnixx.ru;

    ssl on;
    ssl_certificate     /etc/letsencrypt/live/pnixx.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/pnixx.ru/privkey.pem;

    ...
}

Перезагружаем сервер:

$ sudo service nginx reload

Прописываем в крон ежемесечное обновление сертификата:

@monthly /path/to/letsencrypt/renew.sh

 Удачи всем.

P.Nixx, 30.01.2016, 17:09