24 мая 2016 в 10:59

Подробная инструкция по установке SSL-сертификата Let’s Encrypt на сервер с CMS Bitrix и Nginx из песочницы

Да, на Хабре уже много текстов про сертификаты Let’s Encrypt, но полной пошаговой инструкции я, к сожалению, не нашёл. Хотел восполнить пробел. К тому же, с мая 2016 года в процессе установки произошли незначительные изменения, которые могут сбить с толку новичка. Поэтому я решил написать эту инструкцию. Так сказать себе на память и другим в помощь.

Эта инструкция, в первую очередь, должна быть интересна новичкам.

image

Если у вас все настройки установлены по умолчанию, можно смотреть те пути, которые я привёл. То есть, если вы используете систему, установленную с помощью скрипта Bitrix environment на операционной системе CentOS 6.X. Если же нет, вы и сами знаете где что лежит.

Установка


Первое, что необходимо сделать — установить git:

# yum install git

Далее переходим в директорию /tmp:

# cd /tmp

С помощью git скачиваем файлы Let’s Encrypt. Сам скрипт теперь называется certbot:

# git clone https://github.com/certbot/certbot


Переходим в скачанную директорию:

# cd certbot

На всякий случай, даем права на выполнение для файла скрипта:

# chmod a+x ./certbot-auto

Получение сертификата


Далее следует команда непосредственно получения сертификата:

# ./certbot-auto certonly --webroot --agree-tos --email mypost@my-domain.ru -w /home/bitrix/www/ -d my-domain.ru -d www.my-domain.ru

--webroot — так как автоматическая установка для nginx пока не надежна, используем этот ключ;
--agree-tos — соглашаемся с лицензионным соглашением;
--email mypost@my-domain.ru — указываем свой e-mail. В дальнейшем он может пригодиться для восстановления своего аккаунта;
-w /home/bitrix/www — указываем корневую директорию сайта;
-d my-domain.ru — наш домен. так же можно указывать и поддомены, например -d site.my-domain.ru.

После этого скрипт начнет работу и предложит установить недостающие пакеты. Соглашаемся и ждём.

Если всё завершится успешно, вы увидите сообщение:

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/my-domain.ru/fullchain.pem. Your
cert will expire on 2016-08-21. To obtain a new version of the
certificate in the future, simply run Certbot again.
- If you lose your account credentials, you can recover through
e-mails sent to mypost@my-domain.ru.
- Your account credentials have been saved in your Certbot
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 Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

Сертификаты установлены, осталось только указать nginx'у, где они лежат.

Настройка


Открываем конфигурационный файл ssl.conf:

# vim /etc/nginx/bx/conf/ssl.conf

Если у вас уже были установлены сертификаты, удаляем или комментируем строки с ними и вставляем новые:

ssl_certificate /etc/letsencrypt/live/my-domain.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/my-domain.ru/privkey.pem;

Не забываем включить ssl, если этого не было сделано ранее:

ssl on;
keepalive_timeout 70;
keepalive_requests 150;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

После этого перезапускаем nginx:

# service nginx reload

Если он не выдал никаких ошибок, значит всё в порядке. Можно зайти на сайт и посмотреть что получилось.

Обновление


Сертификат выдается на 90 дней, так что после этого срока нужно будет его обновить. Делается это командой:

# certbot-auto renew

Её так же можно поставить в cron.

На этом всё. Для составления инструкции я использовал статью Yet another инструкция по получению ssl-сертификата Let's Encrypt и официальный гайд.
@geolaz
карма
3,0
рейтинг 0,0
Системный администратор
Самое читаемое Администрирование

Комментарии (23)

  • +6
    Прочитал статью до конца, думаю вполне годный материал для новичков(хоть подобные материалы уже и есть на хабре). Но назрел 1 вопрос по релевантности заголовка статьи к ее содержимому — "а где и причем тут битрикс?".
    • 0
      Ну я ставил сертификаты именно на сервер с битрикс, и в тексте приведено где указываются новые сертификаты в настроенной на битрикс системе.
      По сути, если разбираться в nginx, итак понятно, где и что надо указать.
      • +3
        Я думаю это не имеет значения, т.к. в системе могло быть что угодно, хоть набор скриптов на perl'e. Дело в том, что эта настройка затрагивает только nginx и генерацию letsencrypt. В битриксе вы не делаете абсолютно ничего.
        П.с. — для интереса, пройдите поиском по своему тексту на слова «битрикс» — их там ровно 0 не считая заголовок.
  • +4
    # service nginx restart
    Так он же упадет после этого, если с конфигом что-то не так.
    # service nginx reload исключительно.

    Плюсом, сам letsencrypt вроде как не рекомендует прописывать прямые пути в конфигах nginx на /etc/letsencrypt/… а копировать их в скрипте крона, который обновляет сертификаты.
    • +2
      nginx -t
    • 0
      # service nginx reload исключительно.

      Спасибо, исправил.
      сам letsencrypt вроде как не рекомендует прописывать прямые пути в конфигах nginx

      В инструкции этого не увидел, но, думаю, можно и так и эдак.
    • 0
      В live же вроде всегда свежие симлинки, ссылаться на которые вполне можно, не?
      • 0
        Пожалуй, я и правда был неправ. Почему-то мне запомнилось по выводу скрипта, что так делать не стоит, однако ж перечитал официальную документацию:
        All generated keys and issued certificates can be found in /etc/letsencrypt/live/$domain. Rather than copying, please point your (web) server configuration directly to those files (or create symlinks)

        Явно говорят можно, и даже рекомендовано.
  • –1
    С помощью git скачиваем файлы Let’s Encrypt. Сам скрипт теперь называется certbot:

    Вообще-то, наоборот, это раньше certbot назывался официальными скриптом. С их вебсайта:

    Certbot was developed by EFF and others as a client for Let’s Encrypt and was previously known as “the official Let’s Encrypt client”

    Теперь официальным клиентом считается github.com/letsencrypt/letsencrypt
    • –1
      Until May 2016, Certbot was named simply letsencrypt or letsencrypt-auto

      Пруф
    • 0
      Хм ваша ссылка редиректиктит как раз на https://github.com/certbot/certbot. Да и официальный сайт (https://letsencrypt.org/getting-started/) отправляет на Certbot
      • 0
        Хм, и правда. Виноват.
  • +2
    https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-14-04
    статья куда серьезнее и без привязки к «Битрикс»
  • 0
    Хм, той статье уже три месяца. Пошёл дописал в комментах свой опыт про обновление сертификата. Тоже не менее важный процесс, чем первичная установка. Вкратце: всё работает само, даже и писать особо-то нечего.
  • 0
    Я не могу сказать, что очень уж продвинутый админ
    Но то, что их скрипт тянет за собой build stack, мне нравится не очень.
    И вообще скрипт очень уж… самоуверен, чтоли.
  • 0
    Вы stapling тоже не смогли настроить?
    Мучался и гуглил сам около 2 дней — не смог.
    • 0
      После пары дней гугла и чтения всяческих статей и мануалов, вывел идеальный конфиг. В общем это у меня лежит в /etc/nginx/nginx.conf:
      ##
      # SSL Settings
      ##

      ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

      ssl_session_cache shared:SSL:10m;
      ssl_session_timeout 1d;

      # Uncomment for SSLLabs.com x4 100.
      #ssl_protocols TLSv1.2;
      #ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:!AES128';

      # With AES128 for better compability.
      ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

      ssl_prefer_server_ciphers on;

      ssl_ecdh_curve secp384r1;

      # OCSP Stapling
      ssl_stapling on;
      ssl_stapling_verify on;

      А в виртуал хостах (/etc/nginx/sites-available/domain.xyz.conf) я прописываю только это:

      ### START OF SSL CONFIGURATION ###

      ssl on;

      ssl_certificate /etc/letsencrypt/live/cloud.krasovsky.me/fullchain.pem;
      ssl_certificate_key /etc/letsencrypt/live/cloud.krasovsky.me/privkey.pem;
      ssl_trusted_certificate /etc/letsencrypt/live/cloud.krasovsky.me/fullchain.pem;
      ssl_dhparam /etc/letsencrypt/live/cloud.krasovsky.me/dhparam.pem;

      ### END OF SSL CONFIGURATION ###

      add_header Strict-Transport-Security 'max-age=631138519; includeSubDomains; preload' always;

      Если раскомментировать участок кода и закомментировать аналогичный, то на SSLLabs можно получить все 4 проверки на 100 баллов, но теряется поддержка многих устройств (реально многих, там даже Android 4.3 не может зайти). А с моим конфигом не работает только Windows XP и Android 2.3, потому что они не поддерживают SNI (мне без него не обойтись).
      • 0
        Дублирую на Pastebin, а то может быть какие-то символы сожрал парсер:
        http://pastebin.com/614YLmfW
  • 0
    Для меня как новичка, не понятно как быть если есть и nginx и apache?
    • 0
      Тут всё зависит от настройки. Чаще всего первым при запросе пользователя отвечает nginx, затем он перенаправляет запрос на apache. Если этот запрос внутри сервера идёт по незашрифрованному пути (то есть в proxy_pass ссылка прописана как http), то достаточно настроить один только nginx.
  • 0
    --
  • 0
    Вот такая ошибка при получении сертификата. Что не так?

    --> Проверка зависимостей окончена
    Ошибка: Multilib version problems found. This often means that the root
    cause is something else and multilib version checking is just
    pointing out that there is a problem. Eg.:

    1. You have an upgrade for openssl which is missing some
    dependency that another package requires. Yum is trying to
    solve this by installing an older version of openssl of the
    different architecture. If you exclude the bad architecture
    yum will tell you what the root cause is (which package
    requires what). You can try redoing the upgrade with
    --exclude openssl.otherarch… this should give you an error
    message showing the root cause of the problem.

    2. You have multiple architectures of openssl installed, but
    yum can only see an upgrade for one of those arcitectures.
    If you don't want/need both architectures anymore then you
    can remove the one with the missing update and everything
    will work.

    3. You have duplicate versions of openssl installed already.
    You can use «yum check» to get yum show these errors.

    ...you can also use --setopt=protected_multilib=false to remove
    this checking, however this is almost never the correct thing to
    do as something else is very likely to go wrong (often causing
    much more problems).

    Protected multilib versions: openssl-1.0.1e-57.el6.x86_64 != openssl-1.0.1e-42.el6_7.4.i686
    Could not install OS dependencies. Aborting bootstrap!

    И подскажите, пожалуйста, если я уже устанавливал ранее сертификат для почты (в конфиге прописаны пути к сертификатам), то может его можно использовать или еще один можно установить?
    • 0
      C этим разобрался, сертификаты для разных сайтов установлены. Но после установки сертификата, сайт стал дидосить
      https://site.com:443/csp-report. Как это отключить?

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.