{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Копытов Иван: заметки с тегом let's encrypt",
    "_rss_description": "Блог ленивого сисадмина",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/kini24.ru\/tags\/lets-encrypt\/",
    "feed_url": "https:\/\/kini24.ru\/tags\/lets-encrypt\/json\/",
    "icon": false,
    "authors": [
        {
            "name": "Копытов Иван",
            "url": "https:\/\/kini24.ru\/",
            "avatar": false
        }
    ],
    "items": [
        {
            "id": "214",
            "url": "https:\/\/kini24.ru\/all\/ustanovka-ejabberd-na-alt-linux\/",
            "title": "Установка ejabberd на ALT Linux",
            "content_html": "<h3>Заметка, по большей части, для себя.<\/h3>\n<p>Решил поделиться своим опытом установки и настройки ejabberd. В процессе встречал много ошибок, которые можно было бы избежать, будь у меня опыт по работе с этим сервером. Но опыт что называется «нулевой».<br \/>\nПервым делом, конечно, установка:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\"># apt-get install ejabberd<\/code><\/pre><p>Несмотря на то, что после установки появляется одноименная служба, воспользоваться ей мы пока не сможем. Угум-с... Поэтому начинаем с того, что создаем базу данных в MySQL и пользователя. SQL-скрипт находится по пути <i> \/usr\/lib\/erlang\/lib\/ejabberd-18.03\/priv\/sql\/mysql.sql<\/i>.<br \/>\nТеперь регистрируем пользователя:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\"># ejabberdctl start\nWARNING: It is not recommended to run ejabberd as root\n# ejabberdctl register admin example.com PaSsWoRd\n# ejabberdctl stop<\/code><\/pre><p>Ответы сервера будут немного отличаться, но основной вопрос возникает при виде строки «<i>WARNING: It is not recommended to run ejabberd as root<\/i>». Чтобы избавиться от этого предупреждения, нужно запускать ejabberd от имени другого пользователя. Это делает сервис, но он нам пока недоступен. Почти.<br \/>\nПосле запуска ejabberdctl в папке \/<i>var\/lib\/ejabberd<\/i> создаются нужные подкаталоги и файлы баз Mnesia. Вот только права у них сейчас root, поэтому сервер не сможет с ними работать. Меняем владельца:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\"># chown -R ejabberd:ejabberd \/var\/lib\/ejabberd<\/code><\/pre><p>Не забываем про логи — там то же самое:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\"># chown -R ejabberd:ejabberd \/var\/log\/ejabberd<\/code><\/pre><p>Теперь нужно изменить файл конфигурации сервера под себя. Открываем \/<i>etc\/ejabberd\/ejabberd.yml<\/i> и правим, как минимум, строчку <i>hosts<\/i> в начале файла. И учтите еще пару моментов.<\/p>\n<ol start=\"1\">\n<li>Если вы планируете дать возможность анонимным пользователям подключаться к вашему серверу в качестве клиентов, то лучше сразу настройте подраздел <i>host_config<\/i> в разделе <i>AUTHENTICATION<\/i>. Я лично потерял весь ростер, когда настроил его уже в процессе работы. Хрен знает почему так получилось, но повторов мне не хочется.<\/li>\n<li>Также лучше всего сразу настроить ejabberd на использованием базы MySQL и не использовать встроенную Mnesia. Связано это с ограничением Mnesia на размер БД. Если планируется использовать запись действий.<\/li>\n<\/ol>\n<p>После всего этого можно пробовать запускать службу:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\"># systemctl start ejabberd<\/code><\/pre><p>Итак, служба запустилась, сервер нас слушает.<br \/>\nКакие еще есть нюансы? Ну, например, использование сертификатов от Let’sEncrypt. Я перебрал множество вариантов их подключения, но сервер каждый раз продолжал ругаться или на их отсутствие, или на то, что они подписаны неизвестным CA, или что не может выстроить цепочку сертификатов, чтобы доверять им. Перед настройкой нам нужно провести небольшие подготовительные работы. А именно — экспортировать корневой сертификат DST Root CA X3 в pem-файл. После этого размещаем его, например, в папке сертификатов Let’sEncrypt \/<i>etc\/letsencrypt<\/i> и даем права на чтение всем. Подкаталогам <i>live<\/i> и <i>archive<\/i> даем права 0755. Самим сертификатам даем права 0644. Вроде бы ничего не забыл. Теперь приступаем к настройке ejabberd.<br \/>\nВ разделе <i>Certificates<\/i> прописываем следующие параметры:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">ca_file: &quot;\/etc\/letsencrypt\/DSTRootCAX3.pem&quot;\ncertfiles:\n  - &quot;\/etc\/letsencrypt\/live\/kini24.ru\/*.pem&quot;<\/code><\/pre><p>Первый указывает на корневой сертификат, второй — на папку с сертификатами на наш домен. Перезапускаем службу ejabberd и проверяем логи на ошибки. Если все нормально, то никаких сообщений по поводу сертификатов вы не увидите, кроме такой:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">[error] &lt;0.306.0&gt;@ejabberd_pkix:validate:543 Failed to list directory \/etc\/ssl\/certs: no such file or directory<\/code><\/pre><p>Согласен с ejabberd, нет у меня такой папки. Ну и черт с ней! :-)<br \/>\nВсе остальные параметры настраиваются достаточно просто, почитать можно здесь: <a href=\"https:\/\/docs.ejabberd.im\/admin\/configuration\/.\">https:\/\/docs.ejabberd.im\/admin\/configuration\/.<\/a> Вот тут всплыл другой нюанс, решение которого я искал достаточно долго. Дело в том, что в файле все регулируется отступами. Примерно так:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">listen:\n  -\n    port: 5222\n    ip: &quot;::&quot;\n    module: ejabberd_c2s\n    starttls: true\n    starttls_required: true\n    zlib: true<\/code><\/pre><p>У первой строки отступа нет вообще, потому что она «главная». У второй (тире) в начале два пробела. У следующего параметра, port, уже 4 пробела. Иными словами, каждый параметр отделяется от своего «родителя» двумя пробелами.<\/p>\n",
            "date_published": "2018-08-29T13:31:45+07:00",
            "date_modified": "2018-08-29T13:31:38+07:00",
            "tags": [
                "ejabberd",
                "let's encrypt",
                "linux",
                "настройка",
                "пробел",
                "сертификат",
                "установка"
            ],
            "_date_published_rfc2822": "Wed, 29 Aug 2018 13:31:45 +0700",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "214",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "194",
            "url": "https:\/\/kini24.ru\/all\/wildcard-sertifikaty-ot-lets-encrypt\/",
            "title": "Wildcard сертификаты от Let’s Encrypt",
            "content_html": "<p>За всеми событиями в жизни как-то пропустил момент, когда Let’s Encrypt стали выдавать бесплатные «wildcard» сертификаты. Иными словами, вы можете получить один сертификат на свой основной домен и все его субдомены разом. Больше не нужно беспокоиться о том, что каждый раз при создании субдомена придется создавать и новый сертификат. Нужно будет просто в конфигурационном файле указать текущий.<br \/>\nВ отличие от «стандартного» для генерирования сертификата «wildcard» нужно вручную прописать сервер для запросов. Команда будет выглядеть примерно так:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\"># certbot certonly --server https:\/\/acme-v02.api.letsencrypt.org\/directory -d kini24.ru -d *.kini24.ru --agree-tos -m admin@kini24.ru --manual --preferred-challenges dns --must-staple --hsts --uir --staple-ocsp<\/code><\/pre><p>Пройдемся по параметрам, чтобы было понятней:<br \/>\n—server — указывает на сервер, который мы хотим использовать для создания сертификата;<br \/>\n-d — указываем для каких доменов мы будем создавать сертификат. Советую вам первым указывать основной домен, а не его субдомены. Сэкономите немного времени;<br \/>\n—agree-tos — принимаем условия лицензионного соглашения;<br \/>\n-m — указываем свой адрес электронной почты. Он будет использоваться как логин;<br \/>\n—manual — используем «ручной» режим работы. Думаю, что можно было и не указывать, но я хотел проконтролировать процесс;<br \/>\n—preferred-challenges — указываем предпочтительный способ проверки, что именно вы имеете доступ к администрированию домена (являетесь его владельцем);<br \/>\nОстальные параметры не обязательны, можно их не указывать.<br \/>\nПосле ввода команды вас спросят не хотите ли вы получать новости от Electronic Frontier Foundation (EFF), основателя сервиса Let’s Encrypt. Ради интереса согласился, отписаться можно в любой момент. Затем был вопрос о том хочу ли я использовать указанный email в качестве логина. Соглашаемся. А вот дальше был один нюанс, который я поначалу не понял, но, в итоге, разобрался. Следующим шагом вас просят внести TXT-запись в ресурсные записи домена. Вносим и ждем, процесс занимает некоторое время. Обычно хватает 15 минут. Нажимаем Enter, чтобы скрипт проверил наличие записи. И вот тут он выдает точно такой же запрос на внесение записи TXT, но с другим значением. Это значение нужно также внести в ресурсные записи. Если быть точней, то первую запись нужно заменить на вторую. Этакая двойная проверка. Снова минуты ожидания и жмем Enter. Если проверка прошла, то сертификат будет создан.<br \/>\nТак как у меня также используется технология HPKP, то нужно еще и генерировать новые ключи для сертификата:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\"># openssl rsa -in \/etc\/letsencrypt\/live\/kini24.ru\/privkey.pem -outform der -pubout | openssl dgst -sha256 -binary | openssl enc -base64<\/code><\/pre><p>Вносим изменения в конфигурационный файл веб-сервера и перезапускаем его:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\"># systemctl restart httpd2<\/code><\/pre>",
            "date_published": "2018-05-16T09:58:04+07:00",
            "date_modified": "2018-05-16T09:57:46+07:00",
            "tags": [
                "apache",
                "certbot",
                "HPKP",
                "let's encrypt",
                "wildcard",
                "бесплатно",
                "инструкция",
                "сервер",
                "сертификат"
            ],
            "_date_published_rfc2822": "Wed, 16 May 2018 09:58:04 +0700",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "194",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        }
    ],
    "_e2_version": 4134,
    "_e2_ua_string": "Aegea 11.3 (v4134)"
}