Let’s Encrypt: получение сертификата по шагам ubuntu nginx

Let’s Encrypt: получение сертификата по шагам ubuntu

Устанавливаем Let’s Encrypt

cd /usr/local/sbin
wget https://dl.eff.org/certbot-auto
chmod a+x /usr/local/sbin/certbot-auto
locale-gen ru_RU ru_ru.UTF-8
dpkg-reconfigure locales
apt install python-pip
pip install --upgrade pip

Создаем каталог

mkdir -p /var/www/letsencrypt
chown -R www-data:www-data /var/www/letsencrypt

Правим конфиг nginx. добавим в конфиг блок с letsencrypt

server {
    listen 80;
    server_name
    www.itc-life.ru
        itc-life.ru
    ;
    location / {
    return              301 https://$server_name$request_uri;
    }
    location ^~ /.well-known/acme-challenge/ {
    root /var/www/letsencrypt;
    }
}

Релоадим nginx

/etc/init.d/nginx reload

Получаем Сертификаты

rm -rf /etc/letsencrypt/accounts/*

certbot-auto certonly -a webroot --webroot-path=/var/www/letsencrypt --agree-tos --non-interactive --text --email "admin@itc-life.ru"   -d www.itc-life.ru -d itc-life.ru

Для генерации со помощью докера

mkdir -p /docker-compose/certbot
cd /docker-compose/certbot
mkdir -p etc/letsencrypt
mkdir -p var/lib/letsencrypt

Теперь сгенерируем сертификат

docker run -it --rm --name certbot -v "/docker-compose/certbot/etc/letsencrypt:/etc/letsencrypt"  -v "/docker-compose/certbot/var/lib/letsencrypt:/var/lib/letsencrypt" -v "/docker-volumes/var/log/letsencrypt:/var/log/letsencrypt" -v "/docker-compose/app/var/www/letsencrypt:/var/www/letsencrypt"  certbot/certbot certonly  --webroot -w /var/www/letsencrypt --email human@itc-life.ru --text --no-eff-email --agree-tos   -d "${DOMAIN}" -d "www.${DOMAIN}"

Где вместо $DOMAIN подставим нужный домен

При первом получение попросят ввести email, на случай необходимости установки связи – пишем свой с доменным именем

Генерируем сертификат Diffie-Hellman Group

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

Правим конфиг на https, теперь у нас будет https и http с location для letsencrypt остальное с 80 будет 301 отправлять на https

 

server {
    listen 80;
    server_name
        www.itc-life.ru
        itc-life.ru
    ;
    location / {
    return              301 https://$server_name$request_uri;
    }
    location ^~ /.well-known/acme-challenge/ {
    root /var/www/letsencrypt;
    }
}
server {
        listen 443 ssl http2;
        server_name
        www.itc-life.ru
        itc-life.ru
        ;
	    ssl_protocols TLSv1.1 TLSv1.2;
	    ssl_certificate /etc/letsencrypt/live/itc-life.ru/fullchain.pem;
	    ssl_certificate_key /etc/letsencrypt/live/itc-life.ru/privkey.pem;
	    ssl_prefer_server_ciphers on;
	    ssl_dhparam /etc/ssl/certs/dhparam.pem;
	    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
	    ssl_session_timeout 1d;
	    ssl_session_cache shared:SSL:10m;
	    ssl_stapling on;
	    ssl_stapling_verify on;
	    add_header 'Access-Control-Allow-Origin' '*';
	    add_header 'Access-Control-Allow-Credentials' 'true';
	    add_header 'Access-Control-Allow-Methods' 'GET';
	    location ^~ /.well-known/acme-challenge/ {
	    root /var/www/letsencrypt;
	    }
}

Скрипт автоматического обновления сертификатов.Создадим файл /root/scripts/renewcert.sh

#!/bin/sh
#certbot-auto --agree-tos --renew-by-default --standalone --standalone-supported-challenges http-01 --http-01-port 9999 --server https://acme-v01.api.letsencrypt.org/directory certonly -d  www.itc-life.ru -d itc-life.ru
/usr/local/sbin/certbot-auto renew --force-renew
if [ $? -ne 0 ]nan
 then
        ERRORLOG=`tail /var/log/letsencrypt/letsencrypt.log`
        echo -e "The Let's Encrypt cert has not been renewed! \n \n" \
                 $ERRORLOG
 else
        nginx -s reload
fi
exit 0

Обновить с помощью докер – главное пробросить верно пути и всё

docker run -it --rm --name certbot -v "/docker-compose/SWARM/web/configs/letsencrypt:/etc/letsencrypt"  -v "/docker-compose/SWARM/web/data/var/www/letsencrypt:/var/www/letsencrypt"   certbot/certbot renew --force-renew --webroot --webroot-path=/var/www/letsencrypt

Ну и релоадим докер с nginx(люблю докер):

docker exec -ti -u 0 $(docker ps | grep nginx | grep 443 | grep 80  | awk '{print $NF}') nginx -s reload

Добавляем в кроны

crontab -e

Вставляем строку

0 0 1 JAN,MAR,MAY,JUL,SEP,NOV * sh /root/scripts/renewcert.sh

Обновить сертифкат через порт

certbot-auto -agree-tos -renew-by-default -standalone -standalone-supported-challenges http-01 -http-01-port 9999 -server https://acme-v01.api.letsencrypt.org/directory certonly -d  www.itc-life.ru  -d  itc-life.ru
Опубликовано в Nginx

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

 

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.