Обновляем репозиторий
apt-get update
Если не установлен GIT
apt-get install git
Загружаем репозиторий
git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
Создаем сертификат с помощью клиента 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