- Основные способы
- «криптопро dss»
- №1. самоподписанный сертификат
- Word и excel
- Как узнать срок действия эцп.
- Какую подпись можно проверить самостоятельно?
- Когда обновлять сертификат
- Криптоapm
- Кто такой “подписчик”
- Мультидоменные сертификаты (san)
- Настройка фильтра fail2ban для nextcloud
- Один аккаунт или несколько?
- Планирование изменений
- Предыстория проблемы
- Пример простой автоматизации letsencrypt
- Причины возникновения ошибок
- Проверка подписи в веб-сервисах
- Продление ssl сертификата
- Реализация сшивания ocsp (ocsp stapling)
- Стандартный срок действия сертификата – 1 год
- Хранение и повторное использование сертификатов и ключей
- Часто задаваемые вопросы
- Заключение
Основные способы
Проверить подлинность сертификата можно самостоятельно. Есть несколько способов:
- Верификация через PDF, MS Word. Можно проконтролировать только корректность ЭЦП. Чтобы получить полные данные, стоит выбрать другой вариант проверки.
- Специальные сервисы. ПО может быть десктопным (необходимо скачивать на ПК) или облачным (используется веб-интерфейс), платным и бесплатным.
- Портал «Госуслуги». Возможна проверка КЭП. Если подпись выдана неаккредитованным удостоверяющим центром, верифицировать подпись невозможно.
Перечисленные способы могут использоваться для проверки не только чужой ЭЦП, но и собственной. Например, у юридических лиц есть на это такие причины:
- соответствие ФЗ № 44 (определяет то, что в госзакупках могут участвовать только владельцы КЭП);
- соответствие ФЗ № 63 (регулирует содержание ЭЦП: в файле должны быть данные о владельце, организационно-правовой форме юридического лица, ИНН);
- срок действия (на момент заключения сделки подпись должна быть подлинной).
«криптопро dss»
Комплекс программ «КриптоПРО DSS» предназначен для защищенного хранения сертификатов, удаленного создания и проверки ЭП. ПО ориентировано на крупные компании с разветвленной сетью пользователей ЭП, но может применяться малым и средним бизнесом. Для предпринимателей софт «КриптоПРО DSS» удобен тем, что отсутствует необходимость внедрять ПО в свою инфраструктуру.
Программа предлагается в нескольких вариантах:
- «КриптоПРО DSS Lite» предназначена для работы через браузер, позволяет отказаться от дополнительных приложений и плагинов для разных форматов;
- «КриптоПРО myDSS» – приложение для телефона, работает с ОС Android и iOS, позволяет контролировать действия пользователя и заверять документы в системах ЭДО, онлайн-банкинга, на электронных торговых площадках и др.;
- ПАК «КриптоПРО DSS» – решение для развертывания на серверах в связке с «КриптоПРО HSM».
№1. самоподписанный сертификат
Ресурс Issuer будет выглядеть так:
apiVersion: cert-manager.io/v1alpha2
kind: Issuer
metadata:
name: selfsigned
spec:
selfSigned: {}А чтобы выпустить сертификат, необходимо описать ресурс
Certificate
, где указывается, как произвести выпуск (см. раздел
issuerRef
ниже) и где размещен приватный ключ (поле
secretName
). После этого в Ingress потребуется сослаться на этот ключ (см. раздел
tlsspec
Word и excel
Платный плагин «КриптоПро Office Signature» дает возможность создавать и проверять электронную подписи в стандартном интерфейсе Microsoft Office Word и Excel. Для этого необходимо установить программу и средство криптографической защиты информации КриптоПро CSP в соответствии с версией операционной системы.
Для проверки подписи получателю документа нужно убедиться, что версия программы, в которой создана подпись, совместима с версией, в которой подпись буду проверять. В противном случае корректно проверить подпись не получится. Проверить совместимости версий можно с помощью таблицы.
Чтобы проверить подпись в документе Word или Excel, нужно:
- Нажать на значок подписи в документе.
- Щелкнуть правой кнопкой мыши на строке подписи и выбрать пункт «Состав подписи».
При успешной проверке в сообщении будет указана информация о владельце подписи и действительности сертификата. Если сертификат недействителен или в документ после подписания вносили изменения, появится сообщение о том, что документ содержит недействительную подпись.
Как узнать срок действия эцп.
Запустите приложение «КриптоПро».
Перейдите на вкладку «Сервис».
Щелкните по кнопке «Просмотреть сертификат в контейнере…».
Откроется вкладка «Контейнер закрытого ключа», нажмите кнопку «Обзор».
Выберите имя контейнера, нажмите «ОК», потом «Далее».
После того, как будут проделаны описанные выше действия, станет доступно окно со всей информацией. В строке «Действителен по…» указан срок окончания действия сертификата.
Если сроки продления ЭЦП пропущены, воспользоваться подписью станет просто невозможно, программа не позволит сформировать ее в электронном документе.
Чтобы пройти продлении подписи нужно обратится к ответственному менеджеру для получения ссылки на продления сертификата, ссылка придет вам на почту.
Далее необходимо вставить Рутокен или сторонний флэш накопитель и перейти по ссылке продления сертификата.
Какую подпись можно проверить самостоятельно?
Самостоятельная проверка подписи нужна, когда участники электронного документооборота (далее — ЭДО) взаимодействуют друг с другом вне информационных систем, например:
- Работодатель получает трудовой договор от физического лица.
- Контрагенты заключают сделку в электронном виде вне системы ЭДО.
- Заказчик принимает котировочные заявки от участников тендера на почту, а не через электронную торговую площадку.
- Банк проверяет подпись инспектора ФНС на электронной выписке из ЕГРЮЛ и т.д.
В этих случаях получателю документа необходимо обратиться к специальным программам и сервисам, в которых есть возможность проверить электронную подпись. Проверить можно подписи, которые базируются на инфраструктуре закрытых и открытых ключей:
Получить электронную подпись
Закрытый ключ используется для создания подписи, а открытый — для проверки. Подробнее о видах подписи по федеральному закону от 06.04.2021 № 63-ФЗ «Об электронной подписи» можно прочитать в отдельной статье.
По своему типу усиленная электронная подпись может быть отсоединенной и присоединенной:
- При создании присоединенной подписи формируется один файл, который содержит и саму подпись, и документ, для которого она была создана. Проверять нужно этот единый файл.
- Отсоединенная подпись формируется в отдельном от подписываемого документа файле с расширением.sig. В этом случае нужно проверять оба документа: файл с электронной подписью и подписанный ею файл.
Успешная проверка подписи подтверждает следующее:
Какие средства проверки подписи использовать, участники ЭДО выбирают по своему усмотрению.
Когда обновлять сертификат
Мы рекомендуем настраивать автоматическое обновление сертификатов в последней трети их жизни. Для сертификатов Let’s Encrypt срок действия по-умолчанию 90 дней, таким образом, обновление необходимо выполнить спустя 60 дней после выпуска сертификата.
Если вы управляете сертификатами для более чем 10 000 доменных имён, мы рекомендуем выполнять обновление небольшими партиями, а не все сразу. Это снижает ваши риски: если сервисы Let’s Encrypt по какой-либо причине будут недоступны, или возникли проблемы в вашей инфраструктурой обновления – ущерб будет причинён небольшой части сертификатов, а не всему количеству. Кроме того, обновление по частям поможет лучше планировать загрузку оборудования.
Возможно, вы захотите массово выпустить сертификаты для всех доменов, что нормально. Но конкретные даты обновления сертификатов можно разнести на несколько дней – обновив сначала одну партию, на следующий день другую, и так далее.
Если вы настраиваете специальный скрипт обновления, то убедитесь, что его запуск выполняется в произвольно
выбираемый момент времени, а не в конкретный. Это гарантирует, что на серверах Let’s Encrypt не будет серьёзных
всплесков трафика. Т.к. нам необходимо обеспечить запас мощности для противодействия таким всплескам,
их снижение поможет уменьшить наши издержки.
Криптоapm
«КриптоAPM» – это специальное ПО для шифровки/дешифровки, выпуска и установления подлинности ЭЦП. Программа подходит для проверки и создания любого вида подписи, может работать с папками и архивами, что ускоряет электронный документооборот.
Программный продукт поставляется в нескольких сборках:
- «КриптоАРМ Старт». Тестовая версия с ограниченным сроком действия (14 дней). Чтобы зашифровать или проверить ЭП используются предустановленные криптопровайдеры.
- «Стандарт Плюс» – базовое ПО для заверения и шифрования цифровой подписи. Годовая лицензия стоит 950 руб., бессрочная – 1 900 руб.
- «КриптоПРО Терминал». Эта версия используется для установки на серверы. Стоимость бессрочной лицензии – 25 500 руб.
- МСКЗИ «КриптоАРМ-5» – комплексное решение. Бессрочная лицензия для одного рабочего места стоит 2 500 руб. (подходит для установки на ОС Windows). Для серверных операционных систем цена программы составляет 55 000 руб. (1 сервер).
Инструкция по проверке ЭЦП в «КриптоAPM»:
- Запустить ПО.
- Перейти во вкладку «Файл».
- Кликнуть по пункту «Проверить» (если подпись отсоединенная) или «Снять и проверить» (для присоединенной к документу).
- Указать путь к нужному файлу, выбрав «Добавить».
- Подтвердить действие («Готово»).
- Когда проверка будет закончена, появится либо зеленая галочка, либо красный крестик.
- Выбрать «Детали», если нужны точные данные, или «Закрыть», когда предоставленной информации достаточно.
Кто такой “подписчик”
В нашем Соглашении, под термином “Подписчик” мы понимаем любого владельца закрытого ключа для сертификата. Если вы – хостинг-провадер, то подписчиком являетесь вы, а не ваши клиенты. Если вы разрабатываете клиентское ПО, которое пользователь разворачивает и настраивает самостоятельно, то подписчиком будет пользователь, и т.д.
Адрес электронной почты, указываемый при создании аккаунта Let’s Encrypt (он же “регистрация”) должен принадлежать Подписчику. Мы используем этот адрес для отправки предупреждений об истечении срока действия сертификатов, и уведомлений об изменении нашей политики конфиденциальности.
Другими словами, если вы – хостинг-провайдер, вам не нужно передавать нам адреса электронной почты ваших клиентов, или ознакомлять их с политикой конфиденциальности. Вам достаточно выпустить сертификаты для доменов под вашим управлением, и тут же начать их использовать.
Мультидоменные сертификаты (san)
Наша политика выпуска сертификатов ограничивает число доменных имён для одного сертификата – не более 100. Использовать ли вам отдельный сертификат для каждого доменного имени, или сгруппировать доменные имена для нескольких сертификатов – мы оставляем на ваше усмотрение.
Выпуск уникальных сертификатов на каждое доменное имя упрощает добавление или удаление доменов, по мере необходимости. Кроме того, отдельные сертификаты имеют минимальный размер, что ускоряет этап “рукопожатия” между браузером клиента и web-сервером в сетях с низкой пропускной способностью.
С другой стороны, использование мультидоменных сертификатов уменьшает их общее число, что удобнее при их администрировании. Если вам требуется поддержка Windows XP, для которой не реализована технология TLS Server Name Indication (SNI), вам потребуется уникальный IP-адрес для каждого сертификата. Таким образом, чем больше доменных имён будет включено в сертификат, тем меньше уникальных IP-адресов вам потребуется.
Что касается безопасности, то сертификаты для одного доменного имени, и мультидоменные сертификаты – равнозначны.
Настройка фильтра fail2ban для nextcloud
Создадим лог-файл для Nextcloud:
sudo touch /var/log/nextcloud.log
sudo -u www-data chown www-data:www-data /var/log/nextcloud.logНастроим логирование в Nextcloud:
sudo -u www-data php occ log:file --file /var/log/nextcloud.log --rotate-size 20M --enable
sudo -u www-data php occ log:manage --level 2 --timezone Europe/MoscowЛибо правкой конфигурационного файла Nextcloud:
sudo nano /var/www/nextcloud/config/config.php 'logtimezone' => 'Europe/Moscow',
'log_type' => 'file',
'logfile' => '/var/log/nextcloud.log',
'log_rotate_size' => 20971520,
'loglevel' => '2',Теперь создадим фильтр для Fail2Ban:
sudo nano /etc/fail2ban/filter.d/nextcloud.confbefore = common.conf
_groupsre = (?:(?:,?s*"w ":(?:" "|w ))*)
failregex = ^{%(_groupsre)s,?s*"remoteAddr":"<HOST>"%(_groupsre)s,?s*"message":"Login failed:
datepattern = ,?s*"time"s*:s*"%%Y-%%m-%%d%%H:%%M:%%S(%%z)?"Где мы ищем вхождение по фразе «Login failed» и забираем IP адрес «<HOST>»
Подключим фильтр:
sudo nano /etc/fail2ban/jail.localОдин аккаунт или несколько?
Согласно протоколу ACME, для авторизации и выпуска сертификатов возможно использование как одного общего аккаунта для нескольких клиентов, так и индивидуальных аккаунтов для каждого клиента в отдельности. Это может быть полезным, например, для хостинг-провайдеров.
Тем не менее, для большинства хостинг-провайдеров мы рекомендуем использовать один общий аккаунт для всех клиентов, с хорошо охраняемым закрытым ключом для него. Это облегчит определение, кому именно принадлежит тот или иной сертификат, упростит актуализацию контактной информации и управление ограничениями, при необходимости. Мы не сможем эффективно корректировать ограничения в случае использования индивидуальных аккаунтов для ваших клиентов.
Планирование изменений
И Let’s Encrypt, и технология Web PKI продолжают развиваться. Нужно быть готовыми к необходимым обновлениям сервисов, которые использует Let’s Encrypt. Особое внимание уделяйте регулярному обновлению исходного кода ACME-клиентов.
Нами запланированы следующие изменения:
- корневой и промежуточный сертификаты, на основании которых выпускаются сертификаты
- алгоритм хэширования для подписи сертификатов
- типы ключей и проверок ключей, для подписи сертификатов
- и сам протокол ACME
Мы будем стараться предупреждать наших пользователей о грядущих изменениях заранее, насколько это возможно.
Тем не менее, в случае обнаружения критической уязвимости, мы будем вынуждены внести изменения в течение короткого времени,
или даже немедленно.
Аналогично, мы меняем URL ссылки на условия использования сервиса (terms of service, ToS) сразу после их обновления.
Избегайте явного указания URL для ToS в исходном коде ACME-клиентов, вместо этого используйте содержимое
заголовка Link: rel=”terms-of-service”
из ответа от серверов Let’s Encrypt.
Также потребуется поддерживать в актуальном состоянии TLS-конфигурацию, для противодействия вновь найденным уязвимостям в наборах шифров или версиях TLS-протокола.
Предыстория проблемы
Корни проблемы исходят из 2021 года, когда компания Let’s Encrypt была основана группой Internet Security Research Group (ISRG) и их партнерами. Поскольку могут потребоваться годы на то, чтобы все ОС и браузеры начали доверять их собственному сертификату, они подписали свои сертификаты перекрестно с доверенным корнем существующего ЦС (IdenTrust и их сертификатом DST Root X3), что является типичным поведением для новых центров сертификации.
Это позволило Let’s Encrypt немедленно начать выпуск сертификатов, которым можно было бы доверять в Интернете. Но перенесемся в наши дни: IdenTrust DST Root X3 приближается к дате истечения срока действия 30 сентября 2021 года.
Let’s Encrypt попыталась подготовиться к истечению срока действия, выпустив собственный корневой сертификат ISRG Root X1. К сожалению, у него пока нет того всеобъемлющего доверия, которое было у их корня IdenTrust, поэтому пользователи на некоторых старых платформах будут заблокированы от доступа к любому веб-сайту, который использует сертификат Let’s Encrypt SSL/TLS.
Пример простой автоматизации letsencrypt

Удостоверяющий центр «Let’s Encrypt» (далее просто letsencrypt) вышел из беты пару месяцев назад, пообтерся в реальных условиях, избавился от детских болезней и оброс различными клиентами. И к этому моменту выдал 5 миллионов сертификатов. Самое время внедрять, т.е. получать сертификаты на свои домены и обновлять их в автоматическом режиме. Но как внедрить так, чтобы приблизиться к любимому админскому «поставил и забыл»? Чтобы было просто получать новые сертификаты, а старые при этом обновлялись автоматом? Ну и как добавить немного безопасности в этот процесс?
Ответ под катом.
Как я уже сказал, letsencrypt оброс различными клиентами, которые позволяют получить сертификат. Этих самых клиентов, кстати, уже
десятки
под разные системы и языки программирования. В статье будет рассказано про реализацию клиента на bash от lukas2511,
letsencrypt.sh
. Это один скрипт на bash, который лежит в своей папке и для работы ему нужен только openssl. Запускаться он будет под отдельным пользователем. Конечно, при желании, всегда можно ещё сильнее закрутить гайки в плане безопасности — запускать в chroot и т.д.
Сначала нужно скачать и настроить скрипт.
Предположим, что ОС — linux, веб сервер — nginx, рабочая папка скрипта — /opt/letsencrypt, а пользователь — le.
Создадим системного пользователя, из под которого будет работать скрипт. При создании системного пользователя в debian/ubuntu, ему выставляется оболочка /bin/false и назначается группа nogroup, что нам вполне подходит.
$ sudo adduser --system --home /opt/letsencrypt leТеперь можно стать этим пользователем и все делать под ним (кроме настройки nginx).
Скачиваем скрипт и смотрим содержимое.
$ sudo -u le -s
$ git clone https://github.com/lukas2511/letsencrypt.sh.git /opt/letsencrypt/
$ ls -la /opt/letsencrypt/
total 84
drwxr-xr-x 4 le le 4096 Jun 25 15:56 .
drwxr-xr-x 3 root root 4096 Jun 25 15:53 ..
-rw-r--r-- 1 le le 1406 Jun 25 15:56 CHANGELOG
drwxr-xr-x 3 le le 4096 Jun 25 15:56 docs
drwxr-xr-x 8 le le 4096 Jun 25 15:56 .git
-rw-r--r-- 1 le le 108 Jun 25 15:56 .gitignore
-rwxr-xr-x 1 le le 37634 Jun 25 15:56 letsencrypt.sh
-rw-r--r-- 1 le le 1080 Jun 25 15:56 LICENSE
-rw-r--r-- 1 le le 3040 Jun 25 15:56 README.md
-rwxr-xr-x 1 le le 8048 Jun 25 15:56 test.sh
-rw-r--r-- 1 le le 107 Jun 25 15:56 .travis.yml
Для работы скрипту нужна папка, куда он будет складывать файлы для валидации доменов.
По умолчанию скрипт настроен использовать папку
/opt/letsencrypt/.acme-challenges
и будет падать с ошибкой, если такой папки нет.
Так же желательно создать конфиг с нужными параметрами. Параметры для работы скрипт пытается брать из файла
/opt/letsencrypt/config
. По умолчанию файла нет и скрипт использует значения по умолчанию, но есть хорошо документированный конфиг в папке с документацией, который можно взять за основу.
Создаем папку и копируем конфиг
$ mkdir /opt/letsencrypt/.acme-challenges
$ cp /opt/letsencrypt/docs/examples/config /opt/letsencrypt/config
Чтобы посмотреть, с какими значениями работает скрипт, его можно вызвать с ключем
--env
$ /opt/letsencrypt/letsencrypt.sh --env
# letsencrypt.sh configuration
#
# !! WARNING !! No main config file found, using default config!
#
declare -- CA="https://acme-v01.api.letsencrypt.org/directory"
declare -- LICENSE="https://letsencrypt.org/documents/LE-SA-v1.0.1-July-27-2021.pdf"
declare -- CERTDIR="/opt/letsencrypt/certs"
declare -- CHALLENGETYPE="http-01"
declare -- DOMAINS_TXT="/opt/letsencrypt/domains.txt"
declare -- HOOK=""
declare -- HOOK_CHAIN="no"
declare -- RENEW_DAYS="30"
declare -- ACCOUNT_KEY="/opt/letsencrypt/accounts/aHR0cHM6Ly9hY21lLXYwMS5hcGkubGV0c2VuY3J5cHQub3JnL2RpcmVjdG9yeQo/account_key.pem"
declare -- ACCOUNT_KEY_JSON="/opt/letsencrypt/accounts/aHR0cHM6Ly9hY21lLXYwMS5hcGkubGV0c2VuY3J5cHQub3JnL2RpcmVjdG9yeQo/registration_info.json"
declare -- KEYSIZE="4096"
declare -- WELLKNOWN="/opt/letsencrypt/.acme-challenges"
declare -- PRIVATE_KEY_RENEW="yes"
declare -- OPENSSL_CNF="/usr/lib/ssl/openssl.cnf"
declare -- CONTACT_EMAIL=""
declare -- LOCKFILE="/opt/letsencrypt/lock"
CA— какой удостоверяющий центр использовать. Их, как минимум два — боевой (по умолчанию) и
тестовый
. Дело в том, что у боевого есть
разные ограничения
по частоте запросов и количеству доменов. В эти ограничения легко упереться при тестировании. Поэтому я рекомендую для тестовых запусков указать тестовый центр. Он работает так же, как боевой, просто генерирует невалидные сертификаты.
Вот тестовый CA:
CA="https://acme-staging.api.letsencrypt.org/directory"CERTDIR
— папка для сертификатов. Внутри неё отельные папки по имени хоста. А в этих папках уже сертификаты для каждого хоста. Нужно будет настроить nginx читать сертификаты из этих папок (см. ниже).
DOMAINS_TXT — список доменов. Одна строчка — один сертификат. В одной строчке может быть несколько доменов, тогда создается один сертификат для них. Скрипт берет первый домен, как название сертификата, а остальные домены указывает, как дополнительные. Например, для такого файла, скрипт создаст два сертификата: some.domain.com и test.com.some.domain.com another.domain.net example.domain.org
test.com www.test.org ftp.test.netHOOK — скрипт, который запускается при различных действиях (при валидации доменов, при генерации сертификатов и т.д.).
Скрипту передаются разные параметры: название операции, пути к новым сертификатам и т.д.
Указание своего скрипта может помочь, если вам нужно выполнять чуть больше действий на каждом шаге.
Например, сертификат нужно разложить на несколько серверов, или нужно проводить валидацию домена через dns, а не через файл.
Скрипт, который ничего не делает, но содержит массу комментариев, лежит по адресу /opt/letsencrypt/docs/examples/hook.sh
RENEW_DAYS — через сколько дней обновлять сертификат. Максимум 90, по умолчанию 30.
CONTACT_EMAIL — рабочий email администратора.
Я рекомендую указать в конфиге свой email в
CONTACT_EMAIL
и на время тестов прописать тестовый
CA
.
Установка и первоначальная настройка скрипта на этом завершены. Теперь можно получать сертификаты.
Для начала получим сертифкат для одного домена: letest.lexore.net
В nginx для теста сделаем простой конфиг виртуального хоста, который будет выводить протокол, http или https.
server {
listen 80;
server_name letest.lexore.net;
location /.well-known/acme-challenge/ { alias /opt/letsencrypt/.acme-challenges/; }
location / {
default_type text/plain;
return 200 "scheme: $scheme";
}
}
Ключевой параметр:
location /.well-known/acme-challenge/
В папке
/opt/letsencrypt/.acme-challenges/
создаются файлы для подтверждения, что вы управляете сайтом.
Они должны быть доступны по адресу
имя_сайта/.well-known/acme-challenge/
, иначе сертификат не подпишут.
Названия файлов генерируются случайным образом, поэтому проще открыть доступ ко всей папке.
В конце скрипт удаляет созданный файл, так что папка не будет захламляться.
Перезагрузим nginx и проверим сайт:
$ curl -i letest.lexore.net
HTTP/1.1 200 OK
Server: nginx
Date: Sun, 26 Jun 2021 13:13:18 GMT
Content-Type: text/plain
Content-Length: 12
Connection: keep-alive
scheme: http
Теперь нужно прописать имя хоста в domains.txt и запустить сам скрипт
$ echo letest.lexore.net > /opt/letsencrypt/domains.txt
$ /opt/letsencrypt/letsencrypt.sh --cron
# INFO: Using main config file /opt/letsencrypt/config
Processing letest.lexore.net
Signing domains...
Creating new directory /opt/letsencrypt/certs/letest.lexore.net ...
Generating private key...
Generating signing request...
Requesting challenge for letest.lexore.net...
Responding to challenge for letest.lexore.net...
Challenge is valid!
Requesting certificate...
Checking certificate...
Done!
Creating fullchain.pem...
Done!
Сертификат готов, файлы сертификата и ключа лежат в папке “
/opt/letsencrypt/certs/letest.lexore.net
“.
Осталось добавить настройки в nginx. Нужно добавить следующие строки в конфиг виртуального хоста:
listen 443 ssl;
ssl_certificate /opt/letsencrypt/certs/letest.lexore.net/fullchain.pem;
ssl_certificate_key /opt/letsencrypt/certs/letest.lexore.net/privkey.pem;
После перезагрузки nginx, можно пробовать сайт в браузере.
Если в конфиге скрипта был указан тестовый CA, браузер заругается на сертификат.
Но это все равно значит, что скрипт и nginx настроены правильно.
Теперь нужно просто поменять CA в конфиге на боевое значание и запустить скрипт ещё раз, добавив параметр
--force
.
Без этого параметра скрипт не станет заново генерировать сертификат, т.к. ещё не подошел срок устаревания, указанный в конфиге.
le@endor:~$ /opt/letsencrypt/letsencrypt.sh --cron --force
# INFO: Using main config file /opt/letsencrypt/config
Processing letest.lexore.net
Checking domain name(s) of existing cert... unchanged.
Checking expire date of existing cert...
Valid till Sep 24 12:13:00 2021 GMT (Longer than 80 days). Ignoring because renew was forced!
Signing domains...
Generating private key...
Generating signing request...
Requesting challenge for letest.lexore.net...
Responding to challenge for letest.lexore.net...
Challenge is valid!
Requesting certificate...
Checking certificate...
Done!
Creating fullchain.pem...
Done!
После запуска скрипта и перезагрузки nginx у сайта появится правильный сертификат.
Сертификат готов, https работает.
Пару слов про несколько доменов.
Один сертификат может использоваться для нескольких доменов. Например, вот как это будет выглядеть, если добавить
subdomain.letest.lexore.net
.
Запуск скрипта:
$ /opt/letsencrypt/letsencrypt.sh --cron --force
# INFO: Using main config file /opt/letsencrypt/config
Processing letest.lexore.net with alternative names: subdomain.letest.lexore.net
Checking domain name(s) of existing cert... changed!
Domain name(s) are not matching!
Names in old certificate: letest.lexore.net
Configured names: letest.lexore.net subdomain.letest.lexore.net
Forcing renew.
Checking expire date of existing cert...
Valid till Sep 24 12:48:00 2021 GMT (Longer than 80 days). Ignoring because renew was forced!
Signing domains...
Generating private key...
Generating signing request...
Requesting challenge for letest.lexore.net...
Requesting challenge for subdomain.letest.lexore.net...
Responding to challenge for letest.lexore.net...
Challenge is valid!
Responding to challenge for subdomain.letest.lexore.net...
Challenge is valid!
Requesting certificate...
Checking certificate...
Done!
Creating fullchain.pem...
Done!
Правка конфига nginx, перезапуск, и вот новый сертификат работает уже на два домена.
Домены не обязаны быть как-то связаны, можно сделать один домен для domain.com и ftp.example.net.
Максимум можно указать
100 доменов
в одном сертификате.
Кому-то этого может хватить, чтобы обойтись одним сертификатом для всех сайтов на сервере.
Правда, этот сертификат придется пересоздавать на каждый новый домен в списке, и можно упереться в лимиты.
А теперь самое приятное — автоматизация.
Для того, чтобы скрипт сам обновлял все сертификаты из файла domains.txt и вы забыли про манипуляции руками, нужно добавить одну строчку в крон пользователя le:
0 1 * * * /opt/letsencrypt/letsencrypt.sh --cron
Таким образом, алгоритм перевода последующих сайтов на https:
Это не единственный способ автоматизации, многие клиенты letsencrypt позволяют свести всю работу к запуску одного скрипта по крону.
Данный скрипт мне понравился за простоту- всю работу делает один скрипт на bash.
А так же, за свои дополнительные возможности — кроме простой автоматизации, он из коробки поддерживает «сложную» автоматизацию, запуск своих скриптов и переопределение параметров.
Например, я уже упомянул про параметр HOOK в конфиге, который позволяет запускать свой скрипт.
Так же из коробки есть параметр CONFIG_D — папка, в которой будут запускаться все .sh скрипты для переопределения параметров основного конфига.
Плюс, поддержка разных «аккаунтов» через указание разных ACCOUNTDIR — папок с приватными ключами для подписи запросов.
Мне кажется, это позволит использовать скрипт в больших и сложных инфраструктурах.
Причины возникновения ошибок
При контроле достоверности могут возникнуть ошибки в ЭЦП. Чаще всего они связаны со следующими причинами:
Проверить работоспособность ЭЦП можно с КриптоПРО CSP. Для этого зайдите в приложение и выполните следующие действия:
После завершения процедуры появится отчет с указанием типов ошибок. Их можно скопировать и отправить в службу технической поддержки удостоверяющего центра.
Если у вас еще нет электронной подписи, Удостоверяющий Центр «Астрал-М» предлагает широкий выбор тарифных планов ЭЦП. У нас можно купить электронную подпись для решения любых рабочих задач, наши специалисты помогут вам выбрать подпись, отвечающую вашим потребностям. Чтобы её приобрести, заполните форму обратной связи.
Проверка подписи в веб-сервисах
Контур.Крипто — бесплатный сервис от Удостоверяющего центра СКБ Контур для создания и проверки подписи, шифрования и расшифрования электронных документов. Удобство сервиса в том, что его не нужно скачивать и устанавливать, легко разобраться, как в нем работать. Настройка компьютера для работы с электронной подписью проходит автоматически.
В сервисе можно бесплатно проверить отсоединенную подпись, выпущенную любым удостоверяющим центром. В программе можно работать с файлами любого вида весом до 100 Мб.
Проверка подписи проходит по простому алгоритму:
В результате проверки Контур.Крипто:
- Подтверждает, что подпись соответствует документу и он не был изменен. Укажет владельца подписи, дату подписания, наименование удостоверяющего центра.
- Или не подтверждает подпись. В этом случае он назовет причину, по которой подпись не подтверждена.
Проверить электронную подпись в Контур.Крипто
Продление ssl сертификата
Ранее я уже упоминал о том, что бесплатные SSL сертификаты “живут” только 90 дней, поэтому после их истечения необходимо будет запускать процедуру продления, благо это тоже бесплатно 🙂
Что же из себя представляет процесс продления?
Как утверждают в Let’s Encrypt, перед истечением, на почту, указанную при создании, приходит соответствующее письмо-уведомление о том, что пора бы продлить сертификат. Чтобы это сделать вручную достаточно запустить команду:
$ ./letsencrypt-autoИ следовать инструкциям на экране. Автоматическое же продление можно настроить используя конфигурационный файл и обычный crontab. Желательно настроить крон таким образом, чтобы продление происходило не чаще 1 раза в месяц.
Если вы работаете из под Windows, то letsencrypt можно развернуть, используя Vagrant или Docker. Правда в этом случае для правильной настройки веб-сервера необходимо будет вручную переместить все файлы на сервер.
Реализация сшивания ocsp (ocsp stapling)
Многие браузеры проверяют сертификат Let’s Encrypt с помощью OCSP, когда загружают сайт, что вызывает проблему производительности и безопасности. В идеале, подключение к вашему сайту не должно ожидать результата дополнительного подключения к Let’s Encrypt.
Кроме того, в запросах OCSP содержится информация о сайтах, которые посещают пользователи. Мы придерживаемся нашей политики конфиденциальности, и не сохраняем данные пользователей из OCSP-запросов, мы в принципе не нуждаемся в получении этих данных.
Настроив сшивание OCSP на ваших web-серверах, вы улучшите производительность ваших сайтов, обеспечите конфиденциальность для ваших пользователей, и поможете Let’s Encrypt эффективнее обслуживать как можно больше клиентов.
Стандартный срок действия сертификата – 1 год
По государственным стандартам действие электронной подписи продлевается на срок в 1 год. На всем протяжении этого периода подпись имеет действительный статус. По истечению срока ЭП перестает действовать, если не переоформить сертификат. В соответствии с законом № 63-ФЗ, ст. 14, п. 2 электронный документ содержит срок начала и окончания действия ключа.
Продление периода действия возможно через выпуск нового сертификата на УЦ. В большинстве случаев общая информация остается неизменной. Изменению подвергается только криптографическая составляющая. Таким образом, поддерживается безопасный уровень использования подписи.
Существует ряд условий, при которых срок ключа урезается, зависит это от проекта, в котором планируется применяться подпись. Бывают проекты, как регистрация физ лица в качестве ИП или ООО, где подпись требуется только на этапе регистрации – в этом случае её срок может урезаться до 5 дней (срок рассмотрения заявление в ФНС).
Принципиальной разницы в сроке действия ЭЦП для физических и юридических лиц нет. Электронный сертификат формируется по единому алгоритму. Разницу составляют объем информации и перечень предоставленных документов. В остальном подпись действует сроком от 3 дней до 12 месяцев.
Хранение и повторное использование сертификатов и ключей
Особая ценность Let’s Encrypt – автоматический выпуск сертификата для нового сайта. Однако, если ваша инфраструктура предполагает создание новых интерфейсов для одного и того же сайта, целесообразнее использовать сертификат и закрытый ключ из долговременнного хранилища.
Такой подход поможет Let’s Encrypt качественно предоставлять свои услуги как можно большему количеству клиентов. Вы же всегда сможете запустить свой новый сайт в любое удобное вам время, независимо от состояния сервисов Let’s Encrypt.
К примеру, всё чаще web-мастера используют Docker для создания новых инстансов для сайтов. Если вы настроите контейнеры Docker на выпуск сертификатов в момент старта, вместо использования сертификатов и ключей из долговременного хранилища, то, скорее всего, вы превысите ограничения на использование ресурсов Let’s Encrypt.
В худшем случае, при пересоздании всех ваши инстансов одновременно, вы окажетесь в ситуации, когда ни один из инстансов не сможет получить сертификат, и ваш сайт окажется недоступным в течение нескольких дней, пока ограничения не будут сняты. Та же проблема возникнет, если по каким-либо причинам сервисы Let’s Encrypt будут недоступны.
Некоторые подходы к развёртыванию сайтов проповедуют хранение закрытых ключей строго на тех компьютерах, на которых они были созданы. Эта модель также совместима с Let’s Encrypt до тех пор, пока вы обеспечиваете длительный аптайм ваших машин, данных в хранилище, и отслеживаете момент наступления ограничений.
Часто задаваемые вопросы
Типичные ошибки Континент-АП при установке связи с сервером доступа
1. Ошибка «Client cert not found»
Для решения данной проблемы необходимо:
· Проверить, запущен ли процесс eapsigner161.exe;
· Если процесс не запущен, зайти в папку с установленной программой и запустить процесс вручную.
2. Ошибка «Неизвестная ошибка импорта сертификатов»
Для решения данной проблемы необходимо:
· удалить все сертификаты с истекшим сроком действия из хранилища «Личные» локального хранилища сертификатов системы (для этого можно воспользоваться оснасткой «mmc» (выбрав в меню Файл -> Добавить или удалить оснастку -> Сертификаты -> Добавить -> Готово -> Ок) или воспользоваться функционалом браузера Internet Explorer (выбрать в меню Сервис -> Свойства браузера -> Содержание -> Сертификаты));
· удалить из хранилища «Личные» локального хранилища сертификатов системы все сертификаты, которые в своем составе, в поле «Субъект», содержат следующие символы: , ; “ ” « ».
3. Ошибка «Не совпадает подпись открытого эфемерного ключа»
Для решения данной ошибки необходимо при установке личного сертификата выбирать правильный контейнер закрытых ключей. Для этого можете воспользоваться функционалом оснастки КриптоПРО CSP, используя функцию «установить личный сертификат» во вкладке «сервис», которая в своем составе имеет возможность, путем проставления галочки, автоматического поиска соответствия между контейнером закрытых ключей (значением закрытого ключа) и значением открытого ключа, содержащегося в сертификате пользователя.
4. Ошибка «Сервер отказал в доступе пользователю не найден корневой сертификат»
Для решения данной ошибки необходимо:
· проверить издателя сертификата, который используется для установления соединения (сертификат для Континент-АП имеет в качестве издателя Корневой сертификат сервера доступа «ЦС СД Интернет», «4800-sd-01.roskazna.ru» или «4800-sd-02roskazna.ru»);
· проверить наличие в хранилище «Доверенные корневые центры сертификации» локального хранилища сертификатов системы сертификата Корневой сертификат сервера доступа «ЦС СД Интернет», «4800-sd-01.roskazna.ru» или «4800-sd-02roskazna.ru», в случае его отсутствия необходимо заново произвести установку сертификата пользователя.
5. Ошибка «Сервер доступа отказал пользователю в подключении. Причина отказа: Неизвестный клиент»
Для решения данной ошибки необходимо проверить правильность, указанных в Континент-АП, адресов серверов доступа. В УФК по Московской области используются следующие адреса серверов доступа:
4800-sd-01.roskazna.ru или 4800-sd-02.roskazna.ru.
Если в процессе подключения к одному из серверов доступа возникает подобная ошибка, необходимо произвести подключение на другой сервер доступа. В случае, если описанное выше не помогает решить проблему, необходимо позвонить в Управление Федерального казначейства по Московской области (по месту получения сертификата, необходимые контактные данные опубликованы на сайте mo.roskazna.ru в разделе ГИС > Удостоверяющий центр > Континент АП > Контакты).
6. Если после установки Континент-АП произошла потеря интернет соединения необходимо в настройках сетевого адаптера, который используется для выхода в интернет, снять галочку в пункте «Continent 3 MSE Filter».
7. Ошибка «Сервер отказал в доступе пользователю. Причина отказа: многократный вход пользователя запрещен»
Для решения данной ошибки необходимо обратится в УФК по Московской области по месту получения сертификата, необходимые контактные данные опубликованы на сайте mo.roskazna.ru в разделе ГИС > Удостоверяющий центр > Континент АП > Контакты).
8. Ошибка 721 либо 628
· Проверить, работает ли подключение к интернету на АРМ.
· Отключить МСЭ, брандмауэр либо другое ПО которое может блокировать служебные порты/протоколы Континент-АП.
· Исключить проблему в канале провайдера, попробовать использовать другого, к примеру, через 3-g модем. Если с другим провайдером работает – нужно обратиться к своему с запросом на открытие служебных портовпротоколов.
Заключение
Из этого руководства вы узнали, как обновить бесплатные SSL / TLS-сертификаты Let Encrypt для веб-сервера Nginx или Apache, работающего в системах, подобных Linux или Unix.
см. также:
🔐 Как автоматически продлевать сертификаты Let’s Encrypt
◀️ Настройка Jenkins за обратным прокси-сервером Nginx и SSL шифрованием Let’s Encrypt
Начало работы с acme.sh и клиентом Let’s Encrypt SSL
FreeBSD wget не может проверить сертификат, выданный Let’s Encrypt
🔐 Как настроить Let Encrypt SSL на Apache в Fedora
Настройка OpenConnect VPN Server (ocserv) на Ubuntu 16.04 / 17.10 с Let’s Encrypt
🔑 Убедитесь, что ваш домен не подвержен уязвимости Letsencrypt CAA Recheck
🐳 Настройка локального реджестри для Docker контейнеров с помощью Podman & Let’s Encrypt SSL
🔑 Как обезопасить Nginx с помощью Let’s Encrypt на CentOS 8
📧 Безопасный сервер iRedMail с SSL-сертификатом Let Encrypt
