воскресенье, 31 марта 2019 г.

Программа для обнаружения и настройки преобразователей интерфейсов USR-TCP232-24


USR-TCP232-24 - это преобразователь интерфейсов, выпускаемый китайской фирмой Jinan USR IOT Technology Limited. Он позволяет подключать к сети Ethernet устройства с интерфейсами RS-232, RS-422 и RS-485. На плате имеется два физических интерфейса: первый может работать как интерфейс RS-232 или RS-422, а второй предназначен для подключения только устройств с интерфейсом RS-485. Одновременно может использоваться только один из последовательных интерфейсов. Сам преобразователь представляет собой печатную плату, защищённую термоусадочной оболочкой. Питается преобразователь интерфейсов от блока питания на 5 Вольт. В России его часто можно встретить под названием SNR-RS485-Ethernet.

Мне встречались телефонные станции, которые умели слать на порт RS-232 информацию о звонках. Это устройство можно использовать для отправки этих данных на компьютер с Ethernet-интерфейсом.

Существует масса промышленных устройств, работающих по интерфейсу RS-485. В отличие от интерфейса RS-232, интерфейс RS-485 обладает более высокой помехоустойчивостью, позволяет обмениваться данными на скорости до 10 мегабит в секунду и подключать к одному ведущему устройству до 10 ведомых устройств. Например, это могут быть электросчётчики.

Нельзя сказать, что устройство дешёвое, но при ближайшем рассмотрении можно понять, что разработчики старались максимально удешевить устройство: у него нет не только корпуса, но и сколь-нибудь общепринятого интерфейса. Устройство не поддерживает ни telnet, ни SNMP, ни HTTP. Для его настройки используется программа для Windows, которая взаимодействует с устройством по фирменному протоколу, состоящему из UDP-пакетов двух типов, которые всегда шлются на широковещательный адрес 255.255.255.255 и на порт 1500.

Пакеты первого типа отправляются самим устройством в ответ на запрос обнаружения. Они содержат в себе информацию о MAC-адресе преобразователя интерфейсов и его текущих настройках.

Пакеты второго типа в сторону устройства отправляет программа настройки. В этих пакетах содержится MAC-адрес настраиваемого устройства и его новые настройки.

Программа для настройки преобразователей интерфейсов есть только в варианте для Windows. Поскольку я пользуюсь Linux, мне хотелось иметь программу для Linux, чтобы не прибегать к помощи wine или виртуальных машин с Windows.

К счастью, описание протокола можно легко найти в интернете. Сопоставить описание протокола с реальностью можно при помощи сетевого сниффера, прослушивая трафик между преобразователем интерфейсов и программой для Windows, запущенной в виртуальной машине.

Преобразователь интерфейсов я купил в интернет-магазине E2E4. Этот преобразователь интерфейсов понадобился мне для доступа к электросчётчику Энергомера CE102M-R5 145 A, который я приобрёл в новую квартиру. Последняя буква A в модели счётчика обозначает, что счётчик оснащён интерфейсом RS-485. На работе приходилось иметь дело и с такими преобразователями интерфейсов и с электросчётчиками, но разобраться во всём подробнее на работе нет возможности - в капиталистической системе важнее занять поляну быстрее конкурентов, а не достичь более качественного результата.

Кроме счётчика и преобразователя интерфейсов я также купил блок питания для установки на DIN-рейку рядом со счётчиком. К сожалению, в ящике с электросчётчиком для этого блока питания не хватило места, поэтому он переехал в соседний ящик, поближе к преобразователю интерфейсов, где особого смысла в таком блоке питания уж не было.

Особенности реализации

Реализованы режимы обнаружения, прописывания настроек и смены настроек.
  1. В режиме обнаружения через указанный интерфейс отправляется пакет обнаружения, после чего в течение 5 секунд принимаются широковещательные UDP-пакеты с данными откликнувшихся устройств. Для гарантированного завершения обнаружения в отведённое время в 5 секунд используется системный интервальный таймер и перехват сигнала SIGALRM. Для отправки широковещательных пакетов используется специальная опция сетевого сокета SO_BROADCAST, разрешающая отправку пакетов на широковещательный адрес. Для привязки сокета к сетевому интерфейсу с указанным именем используется опция сетевого сокета SO_BINDTODEVICE.
  2. В режиме прописывания настроек выполняется отправка пакета с новыми настройками преобразователя интерфейса. Настройки конструируются из значений по умолчанию и заменяющих их значений, указанных в опциях командной строки. После прописывания настроек выдерживается пауза для применения настроек преобразователем интерфейсов, после чего выполняется обнаружение устройства с указанным MAC-адресом. Отправленные настройки сверяются с обнаруженными. При успешном применении настроек выводится соответствующее сообщение.
  3. В режиме смены настроек сначала выполняется обнаружение устройства с указанным MAC-адресом. Обнаруженные настройки берутся за основу, а изменяемые значения берутся из опций командной строки. Дальнейшие действия аналогичны прописыванию настроек: после прописывания настроек выдерживается пауза для применения настроек преобразователем интерфейсов, после чего выполняется обнаружение устройства с указанным MAC-адресом. Отправленные настройки сверяются с обнаруженными. При успешном применении настроек выводится соответствующее сообщение.

Использование программы

Для сборки программы из исходных текстов можно воспользоваться имеющимся в комплекте файлом make.sh

Если запустить программу из командной строки, не указывая ей никаких аргументов, программа выведет справку по использованию, которая выглядит следующим образом:
Usage: usr discover <interface>
       usr config|change <interface> <mac> <options>
Options:
  Serial interface:
    -1               - use one stop bit
    -2               - use two stop bits
    -5               - use five data bits
    -6               - use six data bits
    -7               - use seven data bits
    -8               - use eight data bits
    -N               - don't use parity bit
    -E               - use even parity bit control
    -O               - use odd parity bit control
    -M               - always set parity bit
    -C, -S           - always clear parity bit
    -r <bitrate>     - use specified bitrate, bits/s
    -w <word-format> - use specified data bits, parity control mode
                       and stop bits
                       Example: 8N1 - 8 data bits, no parity control, 1 stop bit
    -s <serial>      - use specified bitrate, data bits, parity control mode
                       and stop bits. Examples: 9600/8N1, 19200/7-E-1
  Ethernet interface:
    -i <ip>          - use specified IP
    -n <netmask>     - use specified subnetwork mask
    -g <gateway>     - use specified gateway
  Converter mode:
    -u               - use UDP-client mode
    -U               - use UDP-server mode
    -t               - use TCP-client mode
    -T               - use TCP-server mode
    -m <port>        - use specified source port
                       (for UDP-client and TCP-client modes)
                       or listen specified port
                       (for UDP-server and TCP-server modes)
    -d <dest-ip>     - use specified destination ip
                       (for UDP-client and TCP-client modes)
    -p <dest-port>   - use specified destination port
                       (for UDP-client and TCP-client modes)
  Additional settings:
    -I <id>          - use specified converter identifier
                       (only in TCP-client mode and enabled flags
                       connect-id or/and data-id)
    -f <flags>       - use only specified comma-separated flags
    -f +<flags>      - enable specified comma-separated flags
    -f -<flags>      - disable specified comma-separated flags
  Flags:
    connect-id       - send converter identifier after connection was
                       established
    data-id          - send data with converter identifier
    rs485            - use interface RS-485 instead of RS-232
    rs422            - use interface RS-422 instead of RS-232
    reset            - reset converter after 30 failed connections to server
                       (only in TCP-client mode)
    link             - enable link led when connection is established
    index            - enable indexing of incoming connections
                       (only for TCP-server mode)
    rfc2217          - enable RFC2217 functions for temporarily changing of
                       serial settings (only before next restart of converter)
Как можно увидеть, программа может работать в одном из трёх режимов:
  • discover <interface> - режим обнаружения преобразователей интерфейсов, находящихся в локальной сети за указанным сетевым Ethernet-интерфейсом,
  • config <interface> <mac> <options> - режим настройки преобразователя интерфейсов с указанным MAC-адресом и за указанным сетевым Ethernet-интерфейсом. Опции указывают настройки, которые нужно выставить на указанном преобразователе интерфейсов. Все не указанные настройки примут значение по умолчанию,
  • change <interface> <mac> <options> - режим изменения настроек преобразователя интерфейсов с указанным MAC-адресом и за указанным сетевым Ethernet-интерфейсом. Опции указывают новые значения настроек, которые нужно поменять. Все не указанные настройки сохраняют свои прежние значения.
При обнаружении преобразователей интерфейсов результаты будут выводиться примерно в таком виде:
MAC:     00:14:54:CF:5C:41
Version: 5.8
Mode:    TCP-server
Flags:
         Use RS485
IP:      169.254.254.7
Netmask: 255.255.255.0
Gateway: 169.254.254.1
Port:    20108
Serial:  19200/7-E-1
Режимы config и change распознают MAC-адрес в любом из распространённых форматов:
  • 00:11:22:33:44:55,
  • 00-11-22-33-44-55,
  • 0011:2233:4455,
  • 0011-2233-4455,
  • 001122:334455,
  • 001122-334455,
  • 00112233445566,
  • 0:1:2:33:44:55.
Опции для настройки преобразователя интерфейсов собраны в логически взаимосвязанные группы:

Serial interface - настройки последовательного интерфейса

Последовательные интерфейсы могут работать в одном из двух режимов:
  • Синхронном, когда данные передаются с постоянной скоростью, без пауз,
  • Асинхронном, когда данные передаются по мере необходимости.
При асинхронном режиме передаче данных возникает необходимость согласования обеими сторонами моментов начала и прекращения обмена данными. Существует два метода управления потоком данных:
  • Аппаратный, когда для согласования обмена данными используются выделенные сигнальные линии,
  • Программный, когда в потоке передаваемых данных передаются особые последовательности данных, обозначающие начало и конец передачи. Сами передаваемые данные при этом кодируются таким образом, чтобы в них эти особые последовательности не встречались.
При программном методе управления потоком каждая передаваемая порция данных начинается с одного единичного старт-бита, а заканчивается одним или более стоп-битами. Непосредственно после порции данных, но до стоповых битов, может также передаваться бит, используемый для контроля правильности передаваемых данных - бит контроля чётности. Если бит контроля чётности имеется, то он должен принимать такое значение, чтобы вместе с битами данных единичных битов было либо чётное количество (контроль чётности - Even), либо чтобы вместе с битами данных единичных битов было нечётное количество (контроль нечётности - Odd). Ещё существует возможность вставлять бит контроля чётности, но не использовать его и выставлять либо всегда равным единице (Mark), либо всегда равным нулю (Space или Clear).

Преобразователь интерфейсов поддерживает только асинхронный режим с программным методом управления потоком.

Для настройки количества битов данных предназначены опции -5, -6, -7 и -8. Каждая из этих опций настраивает указанное количество бит данных.

Для настройки количества стоп-битов предназначены опции -1 и -2, которые настраивают один или два стоп-бита соответственно.

Для настройки бита контроля чётности предназначены следующие опции:
  • -N - нет бита чётности,
  • -E - контроль чётности,
  • -O - контроль нечётности,
  • -M - всегда выставлять бит контроля чётности в единичное значение,
  • -C или -S - всегда выставлять бит контроля чётности в нулевое значение.
Все эти настройки вместе полностью определяют формат слова, передаваемого по последовательной линии. Формат слова можно указать, не прибегая к указанным выше опциям, а воспользовавшись опцией -w <word-format>. Программа принимает формат слова, указанный одной строчкой. Например: 8N1, 7-E-1, 7-C-1, 6S2, 5M2.

Скорость передачи данных в битах в секунду можно указать при помощи опции -r <bitrate>. Стандартные значения битовой скорости таковы: 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600. Программа принимает только значения, указанные в этом списке, а при указании других значений будет сообщать об ошибке.

При помощи опции -s <serial> можно указать одновременно и формат слова и скорость передачи данных по последовательному интерфейсу. Значения этой опции могут быть, например, такими: 9600/8N1, 19200/7-E-1. Таким образом, одна эта опция может заменить все предыдущие опции, рассмотренные выше.

Ethernet interface - настройки сетевого Ethernet-интерфейса

В этой группе настроек есть всего три опции:
  • -i <ip> - настройка IP-адреса преобразователя интерфейсов,
  • -n <netmask> - настройка маски подсети, при помощи которой указываются локальные IP-адреса, к которым можно отправлять пакеты напрямую, находя соответствующие им MAC-адреса через ARP-запросы,
  • -g <gateway> - настройка шлюза по умолчанию. Шлюз по умолчанию представляет собой IP-адрес, на который будут отправляться пакеты для IP-адресов вне локальной сети. В качестве MAC-адреса получателя Ethernet пакета будет выставлен MAC-адрес шлюза по умолчанию, найденный через ARP-запрос. При этом в заголовке IP-пакета, вложенного в Ethernet-кадр, будет указан реальный IP-адрес получателя. Шлюз получит Ethernet-кадр, адресованный ему, заглянет в заголовок IP-пакета и определит, куда нужно передать пакет дальше.
К сожалению, в устройстве не предусмотрена поддержка протокола IPv6. Скорее всего из-за всё того же стремления максимально удешевить устройство.

Converter mode - настройки режима работы преобразователя интерфейсов

В этой группе настроек можно указать режим работы преобразователя интерфейсов. Преобразователь интерфейсов может выступать в одной из двух ролей:
  • в роли сервера, ожидая поступления входящего подключения или пакетов на порт с указанным номером,
  • в роли клиента, подключаясь на указанные IP-адрес и порт при поступлении данных на последовательный интерфейс.
Как в той, так и в другой роли преобразователь интерфейсов может работать по одному из двух транспортных протоколов: UDP или TCP.

Роль и протокол настраиваются при помощи одной из следующих опций:
  • -u - UDP-клиент,
  • -U - UDP-сервер,
  • -t - TCP-клиент,
  • -T - TCP-сервер.
При помощи опции -m <port> можно указать порт, который будет прослушиваться преобразователем интерфейсов, работающим в роли сервера, или будет использоваться в качестве исходящего при работе преобразователя интерфейсов в роли клиента.

Если пребразователь будет работать в режиме клиента, то при помощи опций -d <dest-ip> и -p <dest-port> можно указать IP-адрес и порт удалённого узла, в направлении которого будут предприниматься попытки установить TCP-соединение или отправить UDP-пакеты.

Additional settings - дополнительные настройки, в том числе - флажки

Если несколько преобразователей интерфейсов настроены в режиме TCP-клиента и подключаются на один и тот же IP-адрес и порт, то компьютер, принимающий подключения, может различить их по IP-адресу или порту, с которого установлено подключение. Однако может быть более удобным, если каждый подключающийся преобразователь интерфейсов будет отправлять числовой идентификатор при подключении или с каждой порцией данных. Значение этого идентификатора можно настроить при помощи опции -I . Идентификатор может принимать значения от 0 до 65535. Учтите, что идентификатор будет использоваться преобразователем интерфейсов только в том случае, если на нём настроен соответствующий флаг - connect-id и/или data-id (см. ниже в разделе Flags - флажки).

Также у преобразователя интерфейсов имеется ряд других настроек, которые могут быть включены или выключены. Эти настройки называются флажками и могут изменяться при помощи опции -f:
  • -f <flags> - установить только указанные флажки, остальные сбросить,
  • -f +<flags> - установить указанные флажки, остальные не менять,
  • -f -<flags> - сбросить указанные флажки, остальные не менять.
Все описанные выше опции программы могут быть указаны в командной строке многократно. При этом более поздние значения заменяют ранее указанные. В случае с опцией -f можно, например, указать её один (или более) раз со знаком + перед списком флажков, а один (или более) раз со знаком - перед списком флажков. Результат будет куммулятивным: флажки будут меняться в том порядке, в каком это предписывают сделать соответствующие опции -f, так что одни опции могут включить флажки, другие - отключить. Список флажков в аргументе опции flags разделяется запятыми. Знак + или - может быть указан только в начале списка флажков, не допускается указывать его перед каждым флажком индивидуально.

Flags - флажки

Флажки:
  • connect-id - после установки TCP-подключения со стороны преобразователя интерфейсов отправляеть числовой идентификатор преобразователя интерфейсов, настроенный опцией -I <id>,
  • data-id - при передаче очередной порции данных, полученной с последовательного интерфейса, отправлять числовой идентификатор преобразователя интерфейсов, настроенный опцией -I <id>,
  • rs485 - использовать интерфейс RS-485, а не RS-232,
  • rs422 - использовать интерфейс RS-422, а не RS-232 (RS-422 - это более помехоустойчивый вариант интерфейса RS-232, в котором нули и единицы кодируются не уровнем напряжения, а разницей напряжений на линиях),
  • reset - сбросить преобразователь интерфейсов после 30 неудачных попыток подключения (флажок используется только когда преобразователь интерфейсов настроен на работу в режиме TCP-клиента),
  • link - включить светодиод, если подключение установлено,
  • index- включить нумерацию входящих подключений (флажок используется только в режиме TCP-сервера и позволяет устройству с последовательным интерфейсом отличать друг от друга несколько входящих TCP-подключений),
  • rfc2217 - включить функции для временной смены настроек последовательного интерфейса в соответствии с RFC2217 (со стороны Ethernet-интерфейса можно поменять настройки скорости и формата слова последовательного интерфейса, которые будут отменены при разрыве или закрытии подключения).

Примеры

Пример команды обнаружения преобразователей интерфейсов и результатов обнаружения:
# ./usr discover eth0
MAC:     00:14:54:CF:5C:41
Version: 5.8
Mode:    TCP-server
Flags:
         Use RS485
         Enable switching bitrate RFC2217
IP:      192.168.0.2
Netmask: 255.255.255.0
Gateway: 192.168.0.1
Port:    20108
Serial:  19200/7-E-1
Для настройки своего преобразователя интерфейсов для работы с электросчётчиком Энергомера CE102M-R5 145 A, я воспользовался вот такой командой:
# ./usr config eth0 00-14-54-CF-5C-41 -s 9600/7E1 -i 169.254.254.7 -n 255.255.255.0 -g 169.254.254.1 -T -m 50 -f rs485

Где взять

Исходные тексты программы можно взять по ссылке https://stupin.su/git/stupin/usr/archive/master.tar.gz.

воскресенье, 24 марта 2019 г.

Проблема с XFCE

Столкнулся на одном из компьютеров со странной проблемой - не удаётся выключить компьютер через меню XFCE:

В открывшемся диалоговом окне выбираем "Выключить":

Кнопка нажимается успешно, но вот дальше ничего не происходит.

Последующие попытки повторить те же действия приводят к ошибке. После нажатия пункта "Выйти" в меню XFCE появляется сообщение об ошибке:

Процитирую надпись с картинки: "Получена ошибка при попытке завершения сеанса. Менеджер сеансов ожидает завершение работы системы. Пожалуйста подождите". Не буду сейчас придираться к грамотности сообщения (Ошибка не получена, а произошла. Ожидает чего? Завершения. "Пожалуйста, подождите").

На всякий случай, приведу также сообщения на английском языке: "Received error while trying to log out. Session manager must be in idle state when requesting a shutdown"

Сколько ни искал в интернете решения проблемы, ничего годного найти не смог. В итоге помогло... Чтение журналов! В домашнем каталоге пользователя есть журнал .xsession-error, в котором моё внимание привлекли две подозрительные строчки:
/etc/xdg/xfce4/xinitrc: 85: /etc/xdg/xfce4/xinitrc: xrdb: not found

** (xfce4-session:4149): CRITICAL **: polkit_unix_process_set_property: assertion 'val != -1' failed
sh: 1: /usr/bin/iceauth: not found
Я поискал, в каких пакетах находятся недостающие файлы xrdb и iceauth:
$ apt-file search xrdb | grep /xrdb$
bash-completion: /usr/share/bash-completion/completions/xrdb
x11-xserver-utils: /usr/bin/xrdb
$ apt-file search iceauth | grep /iceauth$
x11-xserver-utils: /usr/bin/iceauth
Как видно из результатов поиска, оба файла находятся в пакете x11-xserver-utils. Установим недостающий пакет:
# apt-get install x11-xserver-utils
Принудительно перезапустим дисплейный менеджер:
# systemctl restart lightdm
Пробуем выключить компьютер снова - теперь всё получается!

воскресенье, 17 марта 2019 г.

Получение SSL-сертификата от удостоверяющего центра Let's Encrypt в Debian Stretch

В черновиках скопилось некоторое количество готовых статей, которые хотелось ещё чем-то дополнить, из-за чего они и не были опубликованы своевременно. Например, эта статья была написана аж в октябре 2017 года. О некоторых статьях я уже не помню, чем ещё я хотел их дополнить. Про другие помню, но сейчас их доведение до задуманного вида не является для меня приоритетной задачей. Думаю, что лучше опубликовать всё как есть, а дополнять можно уже впоследствии отдельными статьями.

В последние годы администраторы и пользователи интернет всё чаще обращают внимание на безопасность. Увлечение защищёнными версиями протоколов приняло настолько повальный характер, что некоторые начали перегибать палку и требовать наличия сертификатов даже там, где они вроде бы и не нужны. Например, когда я обновлял операционную систему Debian с Jessie на Stretch, то система управления источниками бесперебойного питания NUT стала требовать использования SSL-сертификатов, хотя этот сервис вовсе не публичный и доступен только на локальном петлевом интерфейсе. Многие системные администраторы совсем не против того, чтобы увеличить безопасность своих систем. Одна беда - сертификаты иногда стоят несоразмерно дорого для сервиса, которым пользуются несколько человек. До этого я пользовался бесплатными сертификатами, которые предоставлял удостоверяющий центр StartCom. Однако этот удостоверяющий центр сменил владельцев, которые теперь находятся в Китае.
Не исключаю предвзятости по отношению к этому удостоверяющему центру. Вполне возможно, что он и раньше был не безопасен, но это замалчивали, т.к. владельцы были израильскими, а у США и Израиля довольно доверительные отношения. Теперь же, когда сервис сменил владельца, его безопасностью начали интересоваться особо внимательно. Так или иначе, даже если с сервисом всё в порядке - ему не доверяют компании, разрабатывающие два самых влиятельных браузера, поэтому пользоваться такими сертификатами особого смысла нет, т.к. по качеству они мало чем отличаются от самозаверенных.

В последнее время на слуху новый удостоверяющий центр Let's Encrypt, который был создан как ответ на постоянные проблемы с безопасностью сервисов и высокую цену на сертификаты удостоверяющих центров. Первые новости о его публичной доступности появились ещё в конце 2015 года, до скандалов с StartCom:
[03.12.2015] Некоммерческий удостоверяющий центр Let's Encrypt начал выдачу сертификатов всем желающим.
Начал писать статью о настройке Jabber-сервера Prosody и в процессе написания раздела о настройке SSL решил попробовать новый удостоверяющий центр. Описал процесс получения сертификата, но потом решил, что описание этой процедуры имеет самостоятельную ценность и решил вынести в отдельную статью, которую вы сейчас и читаете.

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

У сервиса Let's Encrypt нет веб-интерфейса, как у других удостоверяющих центров. Для создания сертификата используется протокол ACME. Протокол этот реализован в боте CertBot, пакет с которым имеется в репозитории Debian Stretch. Установим бота:
# apt-get install certbot
После установки бота, запустим его от имени пользователя root:
# certbot certonly --manual
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):vladimir@stupin.su

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A
Здесь нас просят ознакомиться с лицензионным соглашением, которое размещается по ссылке https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf С вас как минимум требуется, чтобы вы получали сертификаты только для тех доменов, которыми владеете, а также требуется отзывать сертификаты, если у вас имеются подозрения о взломе ваших серверов или сертификатов. Нажимаем кнопку A, чтобы принять соглашение.
Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c'
to cancel):stupin.su
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for stupin.su

-------------------------------------------------------------------------------
NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot in manual mode on a machine that is not
your server, please ensure you're okay with that.

Are you OK with your IP being logged?
-------------------------------------------------------------------------------
(Y)es/(N)o: Y
Здесь вас предупреждают, что IP-адрес, с которого будет отправлен запрос на получение сертификата, будет сохранён в общедоступный журнал. Если вы запускаете бота не на своём сервере, то подтвердите, что получили на это разрешение владельца. Нажимаем кнопку Y, чтобы подтвердить отправку запроса на получение сертификата.
-------------------------------------------------------------------------------
Make sure your web server displays the following content at
http://stupin.su/.well-known/acme-challenge/VQaUp_Q225nyu_beedJzbDhRHmLt8y7W4dSBrZ4YIt4 before continuing:

VQaUp_Q225nyu_beedJzbDhRHmLt8y7W4dSBrZ4YIt4.AxZB-wyvXtEUAxRRJN5bDGyEo5uDO7aVvEgrJ7PVgoo

If you don't have HTTP server configured, you can run the following
command on the target server (as root):

mkdir -p /tmp/certbot/public_html/.well-known/acme-challenge
cd /tmp/certbot/public_html
printf "%s" VQaUp_Q225nyu_beedJzbDhRHmLt8y7W4dSBrZ4YIt4.AxZB-wyvXtEUAxRRJN5bDGyEo5uDO7aVvEgrJ7PVgoo > .well-known/acme-challenge/VQaUp_Q225nyu_beedJzbDhRHmLt8y7W4dSBrZ4YIt4
# run only once per server:
$(command -v python2 || command -v python2.7 || command -v python2.6) -c \
"import BaseHTTPServer, SimpleHTTPServer; \
s = BaseHTTPServer.HTTPServer(('', 80), SimpleHTTPServer.SimpleHTTPRequestHandler); \
s.serve_forever()" 
-------------------------------------------------------------------------------
Press Enter to Continue
Чтобы подтвердить владение доменом, нас просят разместить по адресу http://stupin.su/.well-known/acme-challenge/VQaUp_Q225nyu_beedJzbDhRHmLt8y7W4dSBrZ4YIt4 следующее содержимое:
VQaUp_Q225nyu_beedJzbDhRHmLt8y7W4dSBrZ4YIt4.AxZB-wyvXtEUAxRRJN5bDGyEo5uDO7aVvEgrJ7PVgoo
Перейдём в корневой каталог документов веб-сервера, создадим необходимые для подтверждения каталоги:
# cd /var/www/
# mkdir -p .well-known/acme-challenge
# cd .well-known/acme-challenge/
Теперь воспользуемся текстовым редактором, создав файл с именем VQaUp_Q225nyu_beedJzbDhRHmLt8y7W4dSBrZ4YIt4 и добавим в него указанное выше содержимое. Теперь нажимаем Enter, чтобы удостоверяющий центр проверил наличие файла и тем самым убедился во владении доменом.
Waiting for verification...
Cleaning up challenges
Generating key (2048 bits): /etc/letsencrypt/keys/0000_key-certbot.pem
Creating CSR: /etc/letsencrypt/csr/0000_csr-certbot.pem

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/stupin.su/fullchain.pem. Your cert will
   expire on 2017-11-04. To obtain a new or tweaked version of this
   certificate in the future, simply run certbot again. To
   non-interactively renew *all* of your certificates, run "certbot
   renew"
 - If you lose your account credentials, you can recover through
   e-mails sent to vladimir@stupin.su.
 - 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
Готовый сертификат лежит в файле /etc/letsencrypt/live/stupin.su/fullchain.pem и годен до 4 ноября. Если учётная запись будет утрачена, её можно будет восстановить через указанный вами ящик электронной почты. Если понадобится обновить все сертификаты, сделать это можно при помощи одной команды:
# certbot renew
Удалим более не нужные файлы, которые использовались для подтверждения владения доменом:
# cd /var/www/
# rm -R .well-known
Если нужно будет получить ещё один сертификат, это можно сделать точно таким же образом. Единственное отличие будет заключаться в том, что второй раз у вас не будут спрашивать адрес электронной почты.

Дополнительно я бы посоветовал сменить права доступа к приватному ключу сертификата. Лучше чтобы к нему имел доступ только пользователь root или тот пользователь, от имени которого будет работать использующая его программа. Отобрать права у прочих пользователей ко всем приватным ключам можно следующим образом:
# chmod o= /etc/letsencrypt/archive/*/privkey*.pem

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

Для беспроблемного дальнейшего обновления сертификатов добавим в файл /etc/letsencrypt/cli.ini следующие настройки:
manual-auth-hook /etc/letsencrypt/authenticator.sh
manual-cleanup-hook /etc/letsencrypt/cleanup.sh
manual-public-ip-logging-ok yes
Эти настройки указывают скрипты, при помощи которых в каталоге веб-сервера сначала размещаются файлы для проверки владения доменом, а затем, после проверки, удаляются из этого каталога. Третья настройка даёт согласие зарегистрировать IP-адрес вашего сервера в журнале удостоверяющего центра, где отмечается информация обо всех выданных сертификатах. В будущем имеется вероятность, что этот журнал станет общественно-доступным и в него можно будет заглянуть, чтобы узнать подробности о выданном кому-либо сертификате.

Первый скрипт /etc/letsencrypt/authenticator.sh содержит внутри себя следующие команды:
#!/bin/sh

mkdir -p /var/www/.well-known/acme-challenge
echo $CERTBOT_VALIDATION > /var/www/.well-known/acme-challenge/$CERTBOT_TOKEN
Второй скрипт /etc/letsencrypt/cleanup.sh содержит внутри себя следующие команды:
#!/bin/sh

rm -f /var/www/.well-known/acme-challenge/$CERTBOT_TOKEN
rmdir /var/www/.well-known/acme-challenge
rmdir /var/www/.well-known
Теперь для обновления сертификатов можно будет воспользоваться одной командой:
# certboot renew
Стоит однако учитывать, что эти скрипты размещают файлы для проверки всегда в одном и том же месте, вне зависимости от домена. Веб-сервер должен выдавать содержимое каталога /var/www/.well-known/acme-challenge/ при обращении по адресу домена к любому документу по ссылке http://<домен>/.well-known/acme-challenge/<имя_файла>