пятница, 14 апреля 2017 г.

Let's Encrypt и Apache2. Настройка в Ubuntu 16.04

Итак, сейчас мы рассмотрим как настроить SSL/TSL сертификат от Let's Encrypt на Ubuntu 16.04 сервере, и Apache2 в качестве веб сервера. Let's Encryp обеспечивает простой способ получения и установки доверенных сертификатов бесплатно!

Новая версия стати. только самое необходимое

добавляем репозиторий:
sudo add-apt-repository ppa:certbot/certbot
устанавливаем certbot:
sudo apt install python-certbot-apache
добавляем сертификат в конфиг апача.
sudo certbot --apache -d your_domain -d www.your_domain
где, your_domain название домена из конфига виртуального хоста:
ServerName your_domain;
после установки certbot-а, он сам добавит необходимые инструкции в cron чтобы обновлять сертификаты. по умолчанию сертификат выдается на 80 дней. certbot будет каждые 20 дней его пытаться обновить. чтобы проверить процесс обновления сертификатов, наберите команду
sudo certbot renew --dry-run


Старая статья, для истории...

1. Установим Let's Encrypt клиент

Для начала установим Let's Encryps клиент из официального репозитория убунты.
sudo apt-get update
sudo apt-get install python-letsencrypt-apache

2. Создадим SSL сертификат

Для того, чтобы создать сертификат на один домен, выполним команду:
sudo letsencrypt --apache -d example.com
для нескольких:
sudo letsencrypt --apache -d example.com -d www.example.com
указываем email адрес для восстановления, а также соглашаемся с условиями использования. Все. необходимые сертификаты созданы. Убедимся в этом при помощи команды:
sudo find /etc/letsencrypt/live/ -type l
, которая покажет какие файлы сертификатов созданы и пути к ним.
Теоретически, letsencrypt будет пытаться сам прописать необходимые настройки в апач, но, у меня не все виртуальные хосты апача лежат в sites-available/enabled, поэтому ему это не удалось, и мы будем править настройки виртуальных хостов вручную.

3. Добавление SSL сертификатов в настройки виртуального хоста Apache

Открываем файл с настройками виртуального хоста, и меняем порт с 80 на 433:
<VirtualHost *:433>
...
</VirtualHost>
также, чтобы пользователи попадали на наш сайт и через порт 80, создадим еще один виртульных хост и на 80 порту, с тем же хостеймом и алиасами, который просто будет делать редирект на порт 433.
<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com 
    ServerAdmin admin@example.com

    Redirect "/" "https://example.com/" 
</VirtualHost>
теперь, переходя по старым ссылкам (с http) пользователи автоматически будут попадать на новую версию хоста с SSL.
в виртуальном хосте на порту 443 добавим наш сертификат:
...
    SSLEngine on
    SSLProtocol all -SSLv2

    SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem

    
        SSLOptions +StdEnvVars
    
    
        SSLOptions +StdEnvVars
    
    BrowserMatch "MSIE [2-6]" \
        nokeepalive ssl-unclean-shutdown \
        downgrade-1.0 force-response-1.0
    # MSIE 7 and newer should be able to use keepalive
    BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
...
перезапустим апач:
sudo /etc/init.d/apache2 restart
и теперь при попытке перейти на http://example.com/example.html нас будет перенаправлять на https://example.com/example.html

4. Проверим сертификат

Проверить наш новый SSL сертификат можно перейдя по ссылке: https://www.ssllabs.com/ssltest/analyze.html?d=example.com. Разумеется, в url ссылки вместо example.com вы должны указать свой домен

5. Обновление сертификата.

Let's Encrypt сертификаты действительны в течении 90 дней, но рекомендуется обновлять их раз в 60 дней, во избежание возможных проблем. Клиент Let's Encrypt имеет встроенную команду для обновления сертификатов. Она проверяет установленные в системе сертификаты и если до срока окончания их действия остается менее 30 дней - то обновляет их. Чтобы запустить обновление для всех установленных сертификатов нужно выполнить команду:
sudo 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.
Для того, чтобы быть уверенными что наши сертификаты не устареют, создадим правило для cron которое будет запускать команду обновления вместо нас. Поскольку обновляются сертификаты, которым до окончания срока действия осталось менее 30 дней, то мы можем создать правило, для запуска команды обновления, скажем, раз в неделю.
sudo crontab -e
и добавим туда строку:
30 2 * * 1 /usr/bin/letsencrypt renew >> /var/log/le-renew.log
в результате команда /usr/bin/letsencrypt renew будет выполняться каждый понедельник в 2.30 ночи. Логи выполнения обновлений можно будет смотреть в /var/log/le-renew.log.

Комментариев нет:

Отправить комментарий