{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Копытов Иван: заметки с тегом wildcard",
    "_rss_description": "Блог ленивого сисадмина",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/kini24.ru\/tags\/wildcard\/",
    "feed_url": "https:\/\/kini24.ru\/tags\/wildcard\/json\/",
    "icon": false,
    "authors": [
        {
            "name": "Копытов Иван",
            "url": "https:\/\/kini24.ru\/",
            "avatar": false
        }
    ],
    "items": [
        {
            "id": "271",
            "url": "https:\/\/kini24.ru\/all\/obnovlenie-wildcard-sertifikatov-letsencrypt\/",
            "title": "Обновление wildcard-сертификатов Let’sEncrypt",
            "content_html": "<h3>Случай, когда ваш домен располагается на reg.ru<\/h3>\n<p>Можно, конечно, воспользоваться сторонними библиотеками, но я не любитель ставить что-то стороннее, если можно обойтись своими силами. Поэтому пришлось потратить время на написание и тестирование bash-скрипта с именем authenticator.sh:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">#!\/bin\/bash\n\n#Основные параметры\ndomain=&quot;kini24.ru&quot;\nusername=&quot;graywolf&quot;\npassword=&quot;********&quot;\n# Этот параметр менять не нужно\nsubdomain=&quot;&quot;\n\n# Корректно задаем судбдомен\n# Если обрабатывается основной домен, то субдомен будет _acme-challenge\n# Если обрабатывается субдомен, то строка будет вида _acme-challenge.subdomain\nif [[ $CERTBOT_DOMAIN = $domain ]]\nthen\n  subdomain=&quot;_acme-challenge&quot;\nelse\n  subdomain=&quot;_acme-challenge.${CERTBOT_DOMAIN%.$domain}&quot;\nfi\n\n# Чисто для информации\n\/usr\/bin\/echo &quot;Requesting $CERTBOT_DOMAIN&quot;\n\n# Запрос на удаления текущих записей\ntxt_delete=&quot;input_format=json&amp;input_data={\\&quot;username\\&quot;:\\&quot;$username\\&quot;,\\&quot;password\\&quot;:\\&quot;$password\\&quot;,\\&quot;domains\\&quot;:[{\\&quot;dname\\&quot;:\\&quot;$domain\\&quot;}],\\&quot;subdomain\\&quot;:\\&quot;$subdomain\\&quot;,\\&quot;record_type\\&quot;:\\&quot;TXT\\&quot;,\\&quot;output_content_type\\&quot;:\\&quot;plain\\&quot;}&quot;\n\n# Запрос на добавления записи\ntxt_add=&quot;input_format=json&amp;input_data={\\&quot;username\\&quot;:\\&quot;$username\\&quot;,\\&quot;password\\&quot;:\\&quot;$password\\&quot;,\\&quot;domains\\&quot;:[{\\&quot;dname\\&quot;:\\&quot;$domain\\&quot;}],\\&quot;subdomain\\&quot;:\\&quot;$subdomain\\&quot;,\\&quot;text\\&quot;:\\&quot;$CERTBOT_VALIDATION\\&quot;,\\&quot;output_content_type\\&quot;:\\&quot;plain\\&quot;}&quot;\n\n#Можно проверить при желении\n#\/usr\/bin\/echo &quot;Certbot parameters:&quot;\n#\/usr\/bin\/echo &quot;Current domain: $CERTBOT_DOMAIN&quot;\n\/usr\/bin\/echo &quot;Validation string: $CERTBOT_VALIDATION&quot;\n#\/usr\/bin\/echo &quot;Delete request: $txt_delete&quot;\n#\/usr\/bin\/echo &quot;Add request: $txt_add&quot;\n\n# Запрос на удаление ВСЕХ TXT записей\nif [[ $CERTBOT_DOMAIN != $domain ]]\nthen\n #\/usr\/bin\/echo &quot;Remove all TXT records&quot;\n  \/usr\/bin\/curl --silent --data &quot;$txt_delete&quot; &quot;https:\/\/api.reg.ru\/api\/regru2\/zone\/remove_record&quot;\nfi\n\n# Запрос на создание TXT записи\n#\/usr\/bin\/echo &quot;Add new TXT record&quot;\n\/usr\/bin\/curl --silent --data &quot;$txt_add&quot; &quot;https:\/\/api.reg.ru\/api\/regru2\/zone\/add_txt&quot;\n\n# Проверяем что нужная TXT запись появилась. Иначе ждем пока данные обновятся\n#answer=&quot;&quot;\n#while [[ $answer != $CERTBOT_VALIDATION ]]\n#do\n#  \/usr\/bin\/echo &quot;Requesting DNS record&quot;\n#  answer=$(\/usr\/bin\/dig @77.88.8.8 $CERTBOT_DOMAIN txt +short | \/usr\/bin\/tr -d \\&quot; | \/usr\/bin\/egrep $CERTBOT_VALIDATION)\n#  \/usr\/bin\/sleep 60\n#done\n\nif [[ $CERTBOT_REMAINING_CHALLENGES -eq 0 ]]\nthen\n  sleep 15m\nfi\n\n# Выводим количество доменов, которые осталось обработать\n\/usr\/bin\/echo &quot;Remaining challenges: $CERTBOT_REMAINING_CHALLENGES&quot;<\/code><\/pre><p>Логика скрипта следующая. В начале задаются основной домен, имя пользователя и пароль от личного кабинета reg.ru. Параметр <i>subdomain<\/i> менять не нужно, он «вычисляется» по ходу выполнения скрипта. Далее если обрабатывается основной домен, то поддомен становится равным <i>_acme-challenge<\/i>, иначе в конец еще добавляется поддомен. Формируется строка для удаления всех (!) текущих записей типа TXT, если обрабатыается поддомен. Записи для основного домена просто добавляются (тут да, небольшой косяк, нужно немного дописать скрипт).<br \/>\nЗатем, после добавления DNS-записи скрипт должен был запрашивать все записи TXT и, после появлении нужной, продолжать выполнение, но тут скрипт уходил в бесконечный цикл, поэтому я его закомментировал полностью. Сможете исправить — буду благодарен.<br \/>\nНа последнем шаге скрипт, если доменов для регистрации не осталось, ждет 15 минут (время обновления записей у reg.ru от 15 минут до 1 часа) и возвращает управление команде certbot.<\/p>\n<p>Вызывается скрипт примерной такой командой:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">certbot certonly --manual --agree-tos --manual-public-ip-logging-ok --email admin@kini24.ru --preferred-challenges dns --server https:\/\/acme-v02.api.letsencrypt.org\/directory --domain *.jabber.kini24.ru --domain *.meet.kini24.ru --domain *.kini24.ru --domain kini24.ru --rsa-key-size 2048 --key-type ecdsa --elliptic-curve secp256r1 --redirect --uir --staple-ocsp --must-staple --hsts --manual-auth-hook \/root\/authenticator.sh<\/code><\/pre><p>В этой команде следующие параметры:<br \/>\n<i>certonly<\/i> — только получение сертификата;<br \/>\n<i>agree-tos<\/i> — принимаем пользовательское соглашение;<br \/>\n<i>manual-public-ip-logging-ok<\/i> — соглашаемся на публикацию нашего IP-адреса;<br \/>\n<i>email<\/i> — указываем свою электронную почту для уведомлений;<br \/>\n<i>preferred-challenges<\/i> — выбираем тип проверки. Для wildcard-сертификатов это только DNS;<br \/>\n<i>server<\/i> — указываем сервер сертификации;<br \/>\n<i>domain<\/i> — перечисляем свои (суб-)домены;<br \/>\n<i>rsa-key-size<\/i> — указываем «размер» ключа. Значение 2048 по умолчанию, оставил на всякий случай;<br \/>\n<i>key-type<\/i> — тип ключа. Снова указано значение по умолчанию;<br \/>\n<i>elliptic-curve<\/i> — «кривые». Тут тоже значение по умолчанию;<br \/>\n<i>redirect<\/i> — перенаправлять с http на https$<br \/>\n<i>uir<\/i> — добавляет в ответ заголовок <i>Content-Security-Policy<\/i> со значением <i>upgrade-insecure-requests<\/i>;<br \/>\n<i>staple-ocsp<\/i> — «сшивание» сертификатов;<br \/>\n<i>must-staple<\/i> — обязательное «сшивание»;<br \/>\n<i>hsts<\/i> — принудительная активация защищенного режима, т. е. https;<br \/>\n<i>manual-auth-hook<\/i> — запуск своего скрипта.<\/p>\n",
            "date_published": "2023-12-16T16:16:55+07:00",
            "date_modified": "2023-12-16T16:16:15+07:00",
            "tags": [
                "reg.ru",
                "wildcard",
                "автоматическое",
                "обновление",
                "рег.ру",
                "сертификат",
                "скрипт"
            ],
            "_date_published_rfc2822": "Sat, 16 Dec 2023 16:16:55 +0700",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "271",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "208",
            "url": "https:\/\/kini24.ru\/all\/obnovlenie-servera-2\/",
            "title": "Обновление сервера",
            "content_html": "<p>Итак, попало ко мне в руки хорошее «железо», что стало неплохим поводом обновить свой сервер. Так как конфигурация слишком сильно отличалась от прежней, то систему тоже пришлось ставить заново. Поначалу не могу понять почему установка проходит нормально, а сама система после этого не грузится. Потом припомнил, что Linux с картами Intel HD Graphics так и не научился нормально работать. Что поделать, пришлось отключать в BIOS встроенную видеокарту и ставить внешнюю. Плохо то, что эта внешняя видеокарта предназначалась для установки в компьютер жены. Старое «железо» из сервера тоже должно было пойти на апгрейд ее компьютера.<br \/>\nУвы, но на работе тоже было много работы, поэтому апгрейд двух систем несколько затянулся. Затем пришлось устранять ошибки в работе веб-сервера, ибо я заодно захотел поменять некоторые настройки. Сейчас его работоспособность почти полностью восстановлена за исключением двух субдоменов: «зеркала» обновлений NOD32 и облака. Последнее из них меня волнует меньше всего, доступ к нужным файлам я могу получить и другими способами. А вот «зеркало»... На него слишком много завязано. Работа над ним пока что ведется. Написал разработчику, описал проблему,  пока что жду от него ответа.<br \/>\nТакже выяснилось, что dovecot не совсем корректно работает с wildcard-сертификатами. Если быть точней, то мне удалось настроить почти все нужные почтовые клиенты (веб-интерфейс, Outlook на телефоне), кроме Thunderbird, установленного на домашнем компьютере. При попытке просмотреть почту с его помощью dovecot ругается на сертификат. Проблема, как оказалось, не новая, но рабочего решения её пока не нашел.<br \/>\nУстановил пока что другую видеокарту в компьютер жены, но она оказалась с «битой» памятью, что приводило к периодическим перезагрузкам. Интересно, сможет сервер работать без видеокарты вообще? Пока что пара моих попыток заставить его работать в таком режиме не увенчались успехом — все время «ругался» спикером. Подозреваю, что придется покупать новую, хоть какую-нибудь. Главное, чтобы присутствовала в системе.<\/p>\n",
            "date_published": "2018-08-11T14:38:11+07:00",
            "date_modified": "2018-08-11T14:38:06+07:00",
            "tags": [
                "hd graphics",
                "intel",
                "linux",
                "nod32",
                "thunderbird",
                "wildcard",
                "апгрейд",
                "видеокарта",
                "железо",
                "зеркало",
                "обновление",
                "почта",
                "сервер",
                "сертификат"
            ],
            "_date_published_rfc2822": "Sat, 11 Aug 2018 14:38:11 +0700",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "208",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "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)"
}