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