Получение сертификата SSL/HTTPS на DLE (CentOS 7 LEMP)
После того, как мы установили DLE на наш VPS, нам потребуется SSL сертификат. Он необходим для защиты ваших данных и для продвижения сайта в Google, так как Google лучше относится к сайтам, которые имеют SSL сертификат.
Установка DLE на CentOS 7 LEMP (Nginx 1.14, MariaDB 1.12, PHP-FPM 7.1) в этом блоге -> ссылка
Примечание: половина статьи взята из хабра и адаптирована под DLE.
После того, как letsencrypt инициализирует, нам необходимо будет вести дополнительные данные. Предложенные вопросы могут варьироваться в зависимости от того, как давно вы использовали letsencrypt раньше, но мы запускаем первый раз.
В командной строке введите адрес электронной почты, который будет использоваться для информативных сообщений, а также будет возможность восстановить ключи:
Мы видим, куда сохранились созданные сертификаты /etc/letsencrypt/live/example.com/ и дату истечения действия сертификата.
После получения сертификата, вы будете иметь следующие PEM-закодированных файлы:
cert.pem: сертификат для вашего домена
chain.pem: Let's Encrypt цепь сертификатов
fullchain.pem: cert.pem и chain.pem
privkey.pem: Сертификат с приватным ключом
В целях дальнейшего повышения уровня безопасности, мы сформируем ключ по алгоритму шифрования Диффи-Хеллмана. Чтобы создать 2048-битный ключ, используйте следующую команду:
Теперь перейдём к важному шагу, настройке конфига NGINX для работы SSL на DLE.
Перезапускаем:
Добавляем в данный файл следующие строки:
Эта команда создаст cron, который каждый понедельник будет выполнять автоматическое продление letsencrypt сертификатов в 2:30 и перезагружать Nginx в 2:35. Вся информация об обновлении будет логироваться в /var/log/le-renew.log.
Необязательно:
Всякий раз, когда новые обновления доступны для клиента Let’s Encrypt, вы можете обновить локальную копию, запустив git pull из каталога /opt/letsencrypt:
Установка DLE на CentOS 7 LEMP (Nginx 1.14, MariaDB 1.12, PHP-FPM 7.1) в этом блоге -> ссылка
Примечание: половина статьи взята из хабра и адаптирована под DLE.
Установка Letsencrypt
Первым делом мы устанавливаем Git, Bc.sudo yum -y install git bc
Далее мы копируем проект Letsencrypt на наш VPS из GitHub.sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
После успешного копирования мы вводим команду для генерации сертификата:letsencrypt-auto certonly
Так же вводим (вместо example.com ваш домен)cd /opt/letsencrypt ./letsencrypt-auto certonly -a webroot --webroot-path=/usr/share/nginx/html -d example.com -d www.example.c
После того, как letsencrypt инициализирует, нам необходимо будет вести дополнительные данные. Предложенные вопросы могут варьироваться в зависимости от того, как давно вы использовали letsencrypt раньше, но мы запускаем первый раз.
В командной строке введите адрес электронной почты, который будет использоваться для информативных сообщений, а также будет возможность восстановить ключи:
Соглашайтесь с условиями пользования Letsencrypt.
Если все прошло успешно, тогда в консоли вы должны увидеть примерно это:Output:
IMPORTANT NOTES:
- If you lose your account credentials, you can recover through
e-mails sent to [email protected]
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/example.com/fullchain.pem. Your
cert will expire on 2016-03-15. To obtain a new version of the
certificate in the future, simply run Let's Encrypt again.
- Your account credentials have been saved in your Let's Encrypt
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Let's
Encrypt so making regular backups of this folder is ideal.
- If like Let's Encrypt, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Мы видим, куда сохранились созданные сертификаты /etc/letsencrypt/live/example.com/ и дату истечения действия сертификата.
После получения сертификата, вы будете иметь следующие PEM-закодированных файлы:
cert.pem: сертификат для вашего домена
chain.pem: Let's Encrypt цепь сертификатов
fullchain.pem: cert.pem и chain.pem
privkey.pem: Сертификат с приватным ключом
В целях дальнейшего повышения уровня безопасности, мы сформируем ключ по алгоритму шифрования Диффи-Хеллмана. Чтобы создать 2048-битный ключ, используйте следующую команду:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Процесс может занять несколько минут, но когда ключ создастся, он будет помещен в каталог в /etc/ssl/certs/dhparam.pem.Теперь перейдём к важному шагу, настройке конфига NGINX для работы SSL на DLE.
server {
listen 80;
server_name example.com;
root /usr/share/nginx/html/;
index index.php index.html index.htm;
location / {
return 301 https://example.com$request_uri;
}
location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ {
return 301 https://example.com$request_uri;
}
location ~ \.php$ {
return 301 https://example.com$request_uri;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
rewrite ^ /robots.txt break;
allow all;
log_not_found off;
access_log off;
}
location ~ /\.ht {
deny all;
}
}
server {
listen 80;
server_name www.example.com;
rewrite ^ https://example.com$request_uri? permanent;
}
server {
listen 443 ssl http2;
server_name example.com;
root /usr/share/nginx/html/;
index index.php index.html index.htm;
keepalive_timeout 60;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
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_dhparam /etc/ssl/certs/dhparam.pem;
add_header Strict-Transport-Security max-age=15768000;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ {
access_log off;
expires max;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param DOCUMENT_ROOT /usr/share/nginx/html/;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
fastcgi_param PATH_TRANSLATED /usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param HTTPS on;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ /\.ht {
deny all;
}
#DLE
location ~* (uploads|uploads/fotos|uploads/files|templates)/.+\.php {
deny all;
}
location ~* /templates/.+\.tpl {
deny all;
}
location ~* ^/(engine/data|engine/cache|engine/cache/system|language).+\.(php|tmp) {
deny all;
}
# Редиректы
rewrite "^/page/([0-9]+)(/?)$" /index.php?cstart=$1 last;
# Сам пост
rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),([0-9]+),(.*).html(/?)+$" /index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&cstart=$5&news_name=$6&seourl=$6 last;
rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),(.*).html(/?)+$" /index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5&seourl=$5 last;
rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/print:page,([0-9]+),(.*).html(/?)+$" /index.php?mod=print&subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5&seourl=$5 last;
rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*).html(/?)+$" /index.php?subaction=showfull&year=$1&month=$2&day=$3&news_name=$4&seourl=$4 last;
rewrite "^/([^.]+)/page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$4&news_page=$2&cstart=$3&seourl=$5&seocat=$1 last;
rewrite "^/([^.]+)/page,([0-9]+),([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$3&news_page=$2&seourl=$4&seocat=$1 last;
rewrite "^/([^.]+)/print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$" /index.php?mod=print&news_page=$2&newsid=$3&seourl=$4&seocat=$1 last;
rewrite "^/([^.]+)/([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$2&seourl=$3&seocat=$1 last;
rewrite "^/page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$3&news_page=$1&cstart=$2&seourl=$4 last;
rewrite "^/page,([0-9]+),([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$2&news_page=$1&seourl=$3 last;
rewrite "^/print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$" /index.php?mod=print&news_page=$1&newsid=$2&seourl=$3 last;
rewrite "^/([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$1&seourl=$2 last;
# За день
rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})(/?)+$" /index.php?year=$1&month=$2&day=$3 last;
rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/page/([0-9]+)(/?)+$" /index.php?year=$1&month=$2&day=$3&cstart=$4 last;
# За весь месяц
rewrite "^/([0-9]{4})/([0-9]{2})(/?)+$" /index.php?year=$1&month=$2 last;
rewrite "^/([0-9]{4})/([0-9]{2})/page/([0-9]+)(/?)+$" /index.php?year=$1&month=$2&cstart=$3 last;
# Вывод за весь год
rewrite "^/([0-9]{4})(/?)+$" /index.php?year=$1 last;
rewrite "^/([0-9]{4})/page/([0-9]+)(/?)+$" /index.php?year=$1&cstart=$2 last;
# вывод отдельному тегу
rewrite "^/tags/([^/]*)(/?)+$" /index.php?do=tags&tag=$1 last;
rewrite "^/tags/([^/]*)/page/([0-9]+)(/?)+$" /index.php?do=tags&tag=$1&cstart=$2 last;
# поиск по доп полям
rewrite "^/xfsearch/(.*)/page/([0-9]+)(/?)+$" /index.php?do=xfsearch&xf=$1&cstart=$2 last;
rewrite "^/xfsearch/(.*)(/?)+$" /index.php?do=xfsearch&xf=$1 last;
# вывод для отдельного юзера
rewrite "^/user/([^/]*)/rss.xml$" /index.php?mod=rss&subaction=allnews&user=$1 last;
rewrite "^/user/([^/]*)(/?)+$" /index.php?subaction=userinfo&user=$1 last;
rewrite "^/user/([^/]*)/page/([0-9]+)(/?)+$" /index.php?subaction=userinfo&user=$1&cstart=$2 last;
rewrite "^/user/([^/]*)/news(/?)+$" /index.php?subaction=allnews&user=$1 last;
rewrite "^/user/([^/]*)/news/page/([0-9]+)(/?)+$" /index.php?subaction=allnews&user=$1&cstart=$2 last;
rewrite "^/user/([^/]*)/news/rss.xml(/?)+$" /index.php?mod=rss&subaction=allnews&user=$1 last;
# вывод всех последних новостей
rewrite "^/lastnews(/?)+$" /index.php?do=lastnews last;
rewrite "^/lastnews/page/([0-9]+)(/?)+$" /index.php?do=lastnews&cstart=$1 last;
# вывод в виде каталога
rewrite "^/catalog/([^/]*)/rss.xml$" /index.php?mod=rss&catalog=$1 last;
rewrite "^/catalog/([^/]*)(/?)+$" /index.php?catalog=$1 last;
rewrite "^/catalog/([^/]*)/page/([0-9]+)(/?)+$" /index.php?catalog=$1&cstart=$2 last;
# вывод непрочитанных статей
rewrite "^/newposts(/?)+$" /index.php?subaction=newposts last;
rewrite "^/newposts/page/([0-9]+)(/?)+$" /index.php?subaction=newposts&cstart=$1 last;
# вывод избранных статей
rewrite "^/favorites(/?)+$" /index.php?do=favorites last;
rewrite "^/favorites/page/([0-9]+)(/?)+$" /index.php?do=favorites&cstart=$1 last;
rewrite "^/rules.html$" /index.php?do=rules last;
rewrite "^/statistics.html$" /index.php?do=stats last;
rewrite "^/addnews.html$" /index.php?do=addnews last;
rewrite "^/rss.xml$" /index.php?mod=rss last;
rewrite "^/sitemap.xml$" /uploads/sitemap.xml last;
if (!-d $request_filename) {
rewrite "^/([^.]+)/page/([0-9]+)(/?)+$" /index.php?do=cat&category=$1&cstart=$2 last;
rewrite "^/([^.]+)/?$" /index.php?do=cat&category=$1 last;
}
if (!-f $request_filename) {
rewrite "^/([^.]+)/rss.xml$" /index.php?mod=rss&do=cat&category=$1 last;
rewrite "^/page,([0-9]+),([^/]+).html$" /index.php?do=static&page=$2&news_page=$1 last;
rewrite "^/print:([^/]+).html$" /index.php?mod=print&do=static&page=$1 last;
}
if (!-f $request_filename) {
rewrite "^/([^/]+).html$" /index.php?do=static&page=$1 last;
}
}
server {
listen 443 ssl http2;
server_name www.example.com;
rewrite ^ https://example.com$request_uri? permanent;
}
Теперь необходимо перезапустить NGINX, но перед этим проверьте ваш конфиг на ошибки.nginx -t
Если всё хорошо, значит вы сделали всё правильно. Помните, везде example.com нужно менять на свой домен!Перезапускаем:
sudo systemctl reload nginx
Далее нам нужно настроить автообновление, для этого в консоль вводим:/opt/letsencrypt/letsencrypt-auto renew
Так как недавно был получен сертификат, выйдет данное сообщение:Checking for new version...
Requesting root privileges to run letsencrypt...
/root/.local/share/letsencrypt/bin/letsencrypt renew
Processing /etc/letsencrypt/renewal/example.com.conf
The following certs are not due for renewal yet:
/etc/letsencrypt/live/example.com/fullchain.pem (skipped)
No renewals were attempted.
Нам необходимо войти через FTP менеджер и отредактировать файл /etc/crontabДобавляем в данный файл следующие строки:
30 2 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log
35 2 * * 1 /usr/bin/systemctl reload nginx
Эта команда создаст cron, который каждый понедельник будет выполнять автоматическое продление letsencrypt сертификатов в 2:30 и перезагружать Nginx в 2:35. Вся информация об обновлении будет логироваться в /var/log/le-renew.log.
Необязательно:
Всякий раз, когда новые обновления доступны для клиента Let’s Encrypt, вы можете обновить локальную копию, запустив git pull из каталога /opt/letsencrypt:
cd /opt/letsencrypt
sudo git pull
Похожие материалы
13-04-2019, 09:48, Блог
19-09-2018, 21:58, Блог
19-05-2019, 09:41, Статьи
15-08-2019, 20:09, Файлы
Соблюдай правила, не стесняйся спрашивать и комментировать. Вступай в дисскусию нашего королевства Модляндия.
Информация Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Лента комментариев
3 new hostile factions RU
Надеюсь, не ошибся в оформлении. Если есть недоработки -админы ,сильно не
Masks | Маски (RUS)
Просто переименуйте имя папки 2988783702 в Masks - RUS и все заработает. И
Wild Fit (RU)
Чтобы мод был виден ,имя ПАПКИ должно совпадать с именем ФАЙЛА самого
Как качать моды из сервиса STEAM без подписки
Способ конечно замароченый, но он работает. Спасибо большое!🙂👍
Masks | Маски (RUS)
Мод для игры не существует, возможно дело в том что папка имеет цифровое