Обновляем репозиторий

apt-get update

Если не установлен GIT

apt-get install git

Загружаем репозиторий

Создаем сертификат с помощью клиента Let’s Encrypt

cd /opt/letsencrypt
./letsencrypt-auto certonly -a webroot --webroot-path=/var/www/example --email webmaster@example.com -d example.com -d www.example.com
Заменим нужные опции на свои:
certonly — скачать сертификат, но не устанавливать (сами разберемся);
—webroot-path — путь к каталогу с сайтом;
—email — почтовый ящик для контактов;
-d — домен (можно указать несколько, еще раз указав -d).

Генерируем ключ Diffie–Hellman

openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Настройка NGINX

Обновляем фаил конфигурации сайта (/etc/nginx/sites-availavle/example)

Код:

server {
	listen 80;
	listen 443 ssl;

	root /var/www/example;
	index index.php index.html index.htm;

	server_name site_name.ru;
	access_log /var/www/logs/example_access.log;
        error_log  /var/www/logs/example_error.log error;
        charset utf-8;

	if ( $scheme = "http" ) {
	    return 301 https://$host$request_uri;
	}

	ssl_certificate /etc/letsencrypt/live/example/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/example/chain.pem;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_dhparam /etc/ssl/certs/dhparam.pem;
        ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        ssl_stapling on;
        ssl_stapling_verify on;

        add_header Strict-Transport-Security max-age=15768000;

	location / {
		index index.php index.html;
		proxy_read_timeout 3000;

		try_files $uri $uri/ =404;
	}

	location ~ /.well-known {
		allow all;
	}

	location ~ \.php$ {
		include snippets/fastcgi-php.conf;
		fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
	}
}

(к сертификату относится все с префиксом ssl_)

Проверяем конфигурацию

nginx -t

Перезагружаем

service nginx reload

Открываем порт

ufw allow ‘Nginx HTTPS’
ufw allow 443
ufw reload

Автопродление сертификата

Продление сертифката выполняется с помощью Let’s Encrypt клиента

/opt/letsencrypt/letsencrypt-auto renew

Так как сертификат только выдан – продление не требуется.

На будущее – добавляем две задачи в крон

crontab -e

Раз в месяц проверять сертификат и перечитвать конфиг NGINX

@monthly /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log
@monthly service nginx reload

Для обновления Let’s Encrypt клиента

cd /opt/letsencrypt
git pull
При обновлении сертификатов мы можем обнаружить проблемы обновления на сайтах, которых уже не существует.
Например:

Cert not yet due for renewal
All renewal attempts failed. The following certs could not be renewed:
/etc/letsencrypt/live/siteName.com/fullchain.pem (failure)

 

Для удаления сертификата введем:


/opt/letsencrypt/letsencrypt-auto revoke --cert-path /etc/letsencrypt/live/siteName.com/fullchain.pem

 

Список сертификатов Let’s Encrypt можно посмотреть в папке

/etc/letsencrypt/live