Переходим на https, устанавливаем сертификаты let's encrypt, получаем класс А+

Статус
В этой теме нельзя размещать новые ответы.

_seal

Проверенные
Сообщения
99
Реакции
34
Баллы
1,715
заодно настраиваем nginx и apache.
disclaimer - все настройки проводятся на выделенном сервере под freebsd. все что вы делаете - вы делаете на свой страх и риск. Всякий холивар на тему Linux/FreeBSD не приветствуется. На вопрос "почему сертификаты от ,а не например от StartSSL ??" ответ простой - .

Ну я думаю все знакомы с последними тенденциями глобального перехода на https. Так что писать о том что это такое, зачем оно надо, как влияет на выдачу, индексацию и т.д. я писать не буду.

Итак поехали.

Устанавливаем собственно сертификаты от .
Для работы с ними я буду использовать - почему его? - читаем на сайте.

На всякий случай, заранее проверьте чтоб в вашем firewall были открыты 80 и 443 порты.

certbot присутствует в портах.
Код:
pkg search certbot
py27-certbot-0.9.3,1           Let's Encrypt client
посему просто ставим его со всеми зависимостями. (для простоты восприятия я привожу примеры с использованием pkg)
Код:
 sudo pkg install py27-certbot
Код:
pkg_tree py27-certbot\*
py27-certbot-0.9.3,1
|\__ python27-2.7.13_1
|\__ py27-setuptools27-32.1.0
|\__ py27-openssl-16.0.0
|\__ py27-psutil-5.0.1
|\__ py27-six-1.10.0
|\__ py27-mock-1.3.0_1
|\__ py27-cryptography-1.6
|\__ py27-pyrfc3339-1.0
|\__ py27-pytz-2016.10,1
|\__ py27-parsedatetime-2.1
|\__ py27-zope.interface-4.1.3
|\__ py27-configobj-5.0.6_1
|\__ py27-zope.component-4.2.2
|\__ py27-acme-0.9.3,1
|\__ py27-python2-pythondialog-3.4.0
 \__ py27-configargparse-0.11.0

Для первичного запуска certbot и получения сертификата 80 и 443 порт должны быть свободны. посему
тушим nginx который у меня в качестве фронта к apache
Код:
sudo service nginx stop
получаем сертификат
Код:
sudo certbot certonly --standalone -d example.com -d www.example.com
в ходе получения сертификата вас попросят ввести email на который будут приходить уведомления от letsencrypt и т.д.

пускаем nginx
Код:
sudo service nginx start

если у вас возникли проблемы при получении сертифката - велкам в /var/log/letsencrypt/
и изучаем letsencrypt.log

т.к. сертификат выдается на 90 дней, нам нужно делать автоматический renew. letsencrypt рекомендует нам делать это дважды в день. ну чтож. послушаем совет.

Код:
crontab -e
42 00,12 * * * service nginx stop && certbot renew --dry-run && service nginx start

вот собственно и все. сертификаты хранятся в /usr/local/etc/letsencrypt/live/example.com/
Код:
ls -l
total 6
drwx------  4 root  wheel  4  7 февр. 12:42 accounts
drwx------  3 root  wheel  3  7 февр. 09:40 archive
drwxr-xr-x  2 root  wheel  5  8 февр. 00:42 csr
drwx------  2 root  wheel  5  8 февр. 00:42 keys
drwx------  3 root  wheel  3  7 февр. 09:40 live
drwxr-xr-x  2 root  wheel  3  8 февр. 09:01 renewal

с сертификатами от letsencypt мы закончили. но это еще не все;
Код:
cd /usr/local/etc/ssl/
openssl dhparam -out dhparams.pem 4096

Теперь о /usr/local/etc/ssl/dhparam.pem; — это нужно, чтобы у нас заработал Forward Secrecy. Прямая секретность означает, что если третья сторона узнает какой-либо сеансовый ключ, то она сможет получить лишь доступ к данным, защищенным лишь этим ключом.

переходим к настройке nginx

Я просто советую скопипастить этот конфиг для nginx. Вдаваться в поробности что и зачем я не буду. Это совсем отдельная тема, есть гугль, и в конце выложу ссылки источников где вдохновлялся знаниями.

Код:
cat /usr/local/etc/nginx/ssl.conf



# Source https://cipherli.st/

# Enable Perfect Forward Secrecy (PFS)
ssl_prefer_server_ciphers on;

ssl_certificate /usr/local/etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /usr/local/etc/letsencrypt/live/example.com/privkey.pem;

# Disable SSLv2 and SSLv3 (BEAST and POODLE attacks)
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

# Enable our strong DH Key
ssl_dhparam /usr/local/etc/ssl/dhparams.pem;

# Cipher-list for PFS.
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_ecdh_curve secp384r1;

# Requires nginx >= 1.1.0
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;

# Requires nginx >= 1.5.9
ssl_stapling on;

# Requires nginx >= 1.3.7
ssl_stapling_verify on;

# Requires nginx => 1.3.7
resolver 8.8.8.8 4.4.4.4 valid=300s;
resolver_timeout 5s;

# HSTS Support
add_header Strict-Transport-Security "max-age=63072000;includeSubdomains; preload";

# These headers can break applications, be careful!
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosnif;

не заываем в директивах ssl_certificate и ssl_certificate_key указать свои правильные пути к сертификатам!

правим сам nginx.conf (тут чуток надерганы куски моих конфигов, поэтому копипастим вдумчиво)


Код:
http {
     server {
             listen 443 ssl;
             add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
             server_name  example.com;
             include ssl.conf;

              root /usr/local/www/data/example.com;

          location / {
          add_header X-Served-By "My Servlet Handler";
          add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
          proxy_pass         http://127.0.0.1:8081;
          proxy_redirect     off;
          proxy_set_header   Host              $http_host;
          proxy_set_header   X-Real-IP         $remote_addr;
          proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
          proxy_set_header   X-Forwarded-Proto $scheme;
          proxy_set_header X-Forwarded-Ssl on;

          client_max_body_size       256m;
          client_body_buffer_size    128k;
          client_body_timeout        12;
  
          proxy_connect_timeout   600;
          proxy_read_timeout      600;
          proxy_send_timeout      600;
          send_timeout            600;

          proxy_buffer_size          64k;
          proxy_buffers              8 64k;
          proxy_busy_buffers_size    64k;
          proxy_temp_file_write_size 64k;

   }
}
Наличие proxy_set_header X-Forwarded-Proto $scheme; и proxy_set_header X-Forwarded-Ssl on; обязательно!
в этом конфиге включен.

не забываем редиректы с 80 порта на 443

Код:
server {
   listen 80;
   server_name  example.com;

   location / {
      return 301 https://www.example$request_uri;
   }


}

#================================================================

server {
   listen   80;
   server_name www.example.com;

 location / {
     return 301 https://www.example$request_uri;
 }

} #

с nginx закончили.

кое что добавим в настройки виртуального хоста в apache, а именно передаем переменные окружения, в частности имя протокола, из nginx в apache. делается это для правильной работы ajax
Код:
<VirtualHost 127.0.0.1:8080>
  ServerName www.example.com
  ...
  LoadModule setenvif_module libexec/apache24/mod_setenvif.so
  SetEnvIf X-Forwarded-Proto https HTTPS=on
  ...
</VirtualHost>
готово.

теперь осталось только настроить сам xenforo. эта тема тут очень много обсуждалась, поэтому не буду вдаваться в подробности.

в .htaccess добавляем
Код:
#https
   RewriteCond %{HTTP:X-Forwarded-proto} !^https$
   RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
и приводим к виду

Код:
#   Mod_security can interfere with uploading of content such as attachments. If you
#   cannot attach files, remove the "#" from the lines below.
#<IfModule mod_security.c>
#   SecFilterEngine Off
#   SecFilterScanPOST Off
#</IfModule>

ErrorDocument 401 default
ErrorDocument 403 default
ErrorDocument 404 default
ErrorDocument 405 default
ErrorDocument 406 default
ErrorDocument 500 default
ErrorDocument 501 default
ErrorDocument 503 default

<IfModule mod_rewrite.c>
   RewriteEngine On
   #https
   RewriteCond %{HTTP:X-Forwarded-proto} !^https$
   RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

   #   If you are having problems with the rewrite rules, remove the "#" from the
   #   line that begins "RewriteBase" below. You will also have to change the path
   #   of the rewrite to reflect the path to your XenForo installation.
   #RewriteBase /xenforo

   #   This line may be needed to enable WebDAV editing with PHP as a CGI.
   #RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

   RewriteCond %{REQUEST_FILENAME} -f [OR]
   RewriteCond %{REQUEST_FILENAME} -l [OR]
   RewriteCond %{REQUEST_FILENAME} -d
   RewriteRule ^.*$ - [NC,L]
   RewriteRule ^(data/|js/|styles/|install/|favicon\.ico|crossdomain\.xml|robots\.txt) - [NC,L]
   RewriteRule ^.*$ index.php [NC,L]

</IfModule>

в админке форума
/admin.php?options/list/basicBoard
URL-адрес форума - меняем http на https
URL-адрес домашней страницы - меняем http на https

/admin.php?options/list/messageOptions#_imageLinkProxy
включаем проксирование изображений и ссылок

ну вот вроде и все. рестарт nginx и apache
Код:
service nginx restart
service apache24 restart
класс сертификата проверяем на

Уверен что если вы все сделали правильно то получите бонус в виде заветного

Снимок экрана 2017-02-08 в 10.39.46.jpg

а в окошке вашего браузера

2017-02-08 at 10.40.png


В качестве изврата добавим САА в мастер запись вашего dns строчку:

Код:
example.com.    CAA    0 issue "letsencrypt.org"

в результате получаем вот такую красивую картинку :-)

Снимок экрана 2017-02-08 в 14.17.38.jpg


Все дополнения, пожелания, предложения, улучшения - принимаются :-)

В статье использовались материалы




и конечно же форума xeforo.info :-)

По возможности сообществу
 
Последнее редактирование:
  • Мне нравится
Реакции: Hope
Это всё хорошо, что набросали статью, но приведите в читабельный вид и название темы поправьте.
 
и что тут не читабельно?
 
VestaCP - поддерживает переход на Let's в один клик. Не знаю как у других панелей обстоят дела
upload_2017-2-8_14-7-44.png

Потыкать ручками:
 
На какой срок они дают этот сертификат ?
 
На 90 дней.

В первом сообщении об этом написано как бы...
 
На какой срок они дают этот сертификат ?
90 дней. сертификат надо регулярно обновлять. тогда он бессрочный.
для этого в crontab добавляем

42 00,12 * * * service nginx stop && certbot renew --dry-run && service nginx start
 
tnAnGel, с LE от весты - это для мазахистов, лучше забыть про эту опцию и ставить нормально, благо дел там на 1,5 минуты.
 
Нет там проблем в Весте, с получение сертификата от LE, и занимает тоже не больше минуты.
 
Все просто переходите сюда , там выбираете ОС и веб-сервер будет дана инструкция что как делать. Всего несколько минут и у вас зеленый замочек. Выдается сертификатт Let's Encrypt на 90 дней с автоматическим продлением.
 
я получал его через ispmgr
screenshot 2017-12-17 0013.jpg
эти методы отличаются чем то или это что то иное?
в ispmgr не проще получить SSL-сертификат
 
Статус
В этой теме нельзя размещать новые ответы.
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу