- Введение
- Краткое введение в класс messagedigest:
- Выпуск тестовых сертификатов эп криптопро с любыми данными
- Генерация csr запроса на собственном сервере
- Запуск консоли
- Инструменты подписи
- Как получить тестовый сертификат криптопро (новый уц)
- Как посмотреть сертификат
- Код аутентификации сообщения (mac)
- Настройка email оповещений
- Настройка шифрованного подключения
- Не отображается сертификат, список причин и их решение #
- Низкоуровневое обнаружение (low level discovery, lld)
- Ошибки установки сертификата эцп на компьютер и способы их устранения | тендер медиа
- Преимущества pdf
- Применение электронной подписи pdf-документов
- Пример кода, несколько подписей pdf
- Проблемы и трудности сборки
- Просмотр сертификатов в оснастке mmc view certificates in the mmc snap-in
- Расширение криптографии java
- Типы ssl-сертификатов
- Управление сертификатами с помощью диспетчера сертификатов или certmgr.msc
- Установка zabbix agent на linux
- Установка zabbix агент на windows
- Установка сертификатов в хранилище java
- Шаг 4:
- Шаг 5:
Введение
С системой мониторинга Zabbix я знаком очень давно. Начинал использовать с версии 2.0 или 2.2, точно не помню. По моему мнению, на сегодняшний день это один из самых качественных open source проектов. Чтобы не быть голословным, перечислю его положительные стороны:
- Полнофункциональная бесплатная версия. Нет никаких ограничений. Платной версии просто не существует.
- Хорошая подробная документация на нескольких языках. Я очень часто её использую.
- Успешная финансовая модель, которая позволяет компании Zabbix стабильно развиваться и развивать продукт на протяжении многих лет.
- Организована система обучения и сертификации.
- Постоянно проводятся вебинары, конференции, выступления и т.д. То есть продукт живой и востребованный.
- Идет в ногу со временем. Новый функционал чаще всего удовлетворяет возникающие новые потребности.
Перечислил то, что замечаю и ценю лично я. Если у вас есть свое мнение на этот счет, с удовольствием с ним познакомлюсь. Среди систем мониторинга, как мне кажется, Zabbix самый качественный и популярный продукт. Причем, это именно полноценная система мониторинга со своей визуализацией, триггерами, оповещениями, авторизацией и т.д. К примеру, если взять Prometheus, то это только метрики.
Отличительной особенностью Zabbix является универсальность. Это система мониторинга общего назначения. Она не специализируется на чем-то одном — железо, сеть, микросервисы. Какие то узкие задачи она решает не так успешно, как специализированный софт.
Так или иначе Zabbix используют практически все крупные организации. Я смотрю выступления представителей различных ИТ компаний. Частенько там вижу хотя бы скольз упоминание о заббиксе или графики из него. Вот те компании, упоминание zabbix в которых я отметил — Сбертех, Магнит, 1С, Крок, Яндекс.Деньги.
Как я уже сказал выше, у Zabbix хорошая документация и обширное комьюнити. Очень много готовых кейсов и выступлений с описанием решения различных задач. Можно знакомиться и перенимать опыт. Не нужно гадать, как что-то сделать. Все уже сделано до нас.
Ну что же, в общих словах я описал Zabbix и свое отношение к нему. Приступим теперь к конкретике. Для начала разберу основные нововведения в Zabbix 5.0. На момент написания статьи еще не было русской версии нововведений, так что буду переводить с английского.
Краткое введение в класс messagedigest:
MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
В этом примере создается экземпляр MessageDigest, который использует внутренний алгоритм криптографического хэширования SHA-256 для вычисления дайджестов сообщений.
Чтобы вычислить дайджест сообщения некоторых данных, вы вызываете метод update() или digest(). Метод update() может вызываться несколько раз, а дайджест сообщения обновляется внутри объекта. Когда вы передали все данные, которые вы хотите включить в дайджест сообщения, вы вызываете digest() и извлекаете итоговые данные дайджеста сообщения.
Пример вызова update() несколько раз с последующим вызовом digest():
MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
byte[] data1 = "0123456789".getBytes("UTF-8");
byte[] data2 = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8");
messageDigest.update(data1);
messageDigest.update(data2);
byte[] digest = messageDigest.digest();
Вы также можете вызвать digest() один раз, передав все данные, чтобы вычислить дайджест сообщения. Пример:
MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
byte[] data1 = "0123456789".getBytes("UTF-8");
byte[] digest = messageDigest.digest(data1);
Выпуск тестовых сертификатов эп криптопро с любыми данными
По просьбам трудящихся публикую инструкцию «выпускаем себе тестовые сертификаты крипто-про как горячие пирожки!». Здесь описан процесс получение сертификата квалифицированной электронной подписи (КЭП) содержащего любые данные (OID) на тестовом удостоверяющем центре КриптоПро.
Изначально предполагается, что у нас уже установлен CryptoPro CSP и КриптоПро ЭЦП Browser plug-in, если нет, то идем качаем на официальный сайт. Все операции будут описаны относительно работы в ОС Linux. В MacOS и Windows, в принципе, не должно быть существенных отличий, кроме поправки на пути к исполняемым файлам.
Так же необходимо наличие действительного сертификата тестового УЦ КриптоПро в корневом хранилище сертификатов. Проверить его наличие можно командой
/opt/cprocsp/bin/amd64/certmgr -list -store uRoot
В выводе должно быть что-то вроде
Issuer : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
Subject : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
Serial : 0x37418882F539A5924AD44E3DE002EA3C
SHA1 Hash : 0xcd321b87fdabb503829f88db68d893b59a7c5dd3
SubjKeyID : 4e833e1469efec5d7a952b5f11fe37321649552b
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
PublicKey Algorithm : ГОСТ Р 34.10-2001 (512 bits)
Not valid before : 27/05/2021 07:24:26 UTC
Not valid after : 26/05/2024 07:34:05 UTC
PrivateKey Link : No
И если вдруг его нет, или истек срок действия (Not valid after), то нужно скачать свежий со страницы https://www.my-sertif.ru/certsrv/certcarc.asp, далее по ссылке Загрузка сертификата ЦС
и установить командой
sudo /opt/cprocsp/bin/amd64/certmgr -inst -store uRoot -file /tmp/certnew.cer
Идем на страницу https://aleksandr-ru.github.io/RusCryptoJS/cryptopro.html#Выпуск_сертификата и вводим нужный нам DN (в формате JSON объекта), например:
{
"CN": "ОАО ТЕСТ",
"2.5.4.4": "Иванов",
"2.5.4.42": "Иван",
"2.5.4.12": "Директор департамента",
"2.5.4.9": "ул. Ивановская 99",
"2.5.4.11": "Отдел маркетинга",
"O": "ОАО "Тест"",
"2.5.4.7": "г. Москва",
"2.5.4.8": "77 г. Москва",
"C": "RU",
"1.2.840.113549.1.9.1": "example@domain.ru",
"1.2.643.3.131.1.1": "2727020780",
"1.2.643.100.1": "1022700525363",
"1.2.643.100.3": "00000000052"
}
где в следующих OID должны быть корректные (проходящие по контрольной сумме) данные
1.2.643.3.131.1.1: ИНН 1.2.643.100.1: ОГРН 1.2.643.100.5: ОГРНИП 1.2.643.100.3: СНИЛС
Для КПП нет официального OID, но некоторые используют 1.2.643.100.4
. Другие ГОСТ-овые OID можно посмотреть, например, по ссылке или в документе ФОРМАТ СЕРТИФИКАТА.pdf
Далее жмем Создать запрос на сертификат
, соглашаемся со всем и следуем инструкциям от CSP. В результате мы получаем запрос на сертификат (CSR) закодированный в base-64, копируем его в буфер обмена.
Переходим на сайт тестового УЦ КриптоПро по ссылке https://www.my-sertif.ru/certsrv/certrqxt.asp, вставляем скопированный CSR в поле и жмем Выдать
.
На следующей странице обязательно выбираем Base64-шифрование
и жмем на ссылку Загрузить сертификат
.
Открываем полученный файл в любом редакторе и удаляем -----BEGIN CERTIFICATE-----
в начале и -----END CERTIFICATE-----
в конце, так чтоб осталось только тело сертификата между ними, и копируем его в буфер обмена.
Возвращаемся на страничку RusCryptoJS, где был создан CSR и вставляем скопированный сертификат в поле Certificate
и жмем Записать сертификат
. Параллельно можно поглядывать в консоль браузера, если интересно)
Дожидаемся сообщения об успехе, сертификат записан. Теперь сертификат со ссылкой на приватный ключ появится в выводе команды
/opt/cprocsp/bin/amd64/certmgr -list -store uMy
Полученным сертификатом можно полноценно пользоваться в тестовых целях, включая электронную подпись.
Генерация csr запроса на собственном сервере
Потребуется криптографический пакет с открытым исходным кодом – . Он входит в состав большинства UNIX-подобных операционных систем.
Во многих инструкциях рекомендуется генерировать закрытый ключ и CSR запрос на том же сервере, для которого выпускается сертификат. Однако, на самом деле, это не обязательно должен быть один и тот же сервер.
Подключитесь к серверу по SSH и перейдите в домашнюю директорию.
cd ~
Сгенерируйте закрытый ключ.
openssl genrsa -out private.key 4096
В команде выше:
- private.key – выходной файл, который будет содержать ключ;
- 4096 – размер ключа, резже 2048.
На запрос «Enter pass phrase for private.key» укажите пароль для защиты закрытого ключа, а затем «Verifying – Enter pass phrase for private.key» – подтвердите его, повторив ввод пароля еще раз.
Закрытый ключ будет создан и сохранен в файл под именем private.key.
Сохраните копию закрытого ключа на своем компьютере. При компрометации ключа или утрате пароля сертификат придется перевыпустить.
Далее сгенерируйте CSR запрос.
openssl req -new -key private.key -out domain.csr -sha256
В команде выше:
- private.key – созданный на предыдущем этапе закрытый ключ;
- domaine.csr – выходной файл с CSR запросом.
На запрос «Enter pass phrase for private.key» введите пароль от закрытого ключа.
Далее последовательно латинскими символами укажите следующие данные:
CSR запрос на сертификат будет сохранен в файле domain.csr в виде закодированного текста.
Проверить корректность введенных данных можно, выполнив следующую команду.
openssl req -noout -text -in domain.csr
Файлы закрытого ключа и CSR запроса или их содержимое потребуются далее. Вывести (чтобы затем скопировать) содержимое файла можно командой cat.
less private.key
или
less domain.csr
Для выхода нажмите клавишу Q.
Запуск консоли
Для запуска консоли выполните следующие действия:
- Выберите меню «Пуск» → «Выполнить» (или на клавиатуре одновременно нажмите на клавиши «Win R»).
- Введите mmc и нажать на кнопку «ОК».
- Выберите меню «Файл» → «Добавить или удалить оснастку».
- Выберите из списка оснастку «Сертификаты» и нажмите на кнопку «Добавить».
- В открывшемся окне выберите «Моей учетной записи пользователя» и нажмите на кнопку «Готово».
- Выберите из списка справа добавленную оснастку и нажмите на кнопку «ОК».
Инструменты подписи
Использовалась версия Java: «1.8.0_111» HotSpot(TM) 64-Bit Server VM (build 25.111-b14).
В качестве сертифицированного средства защиты информации от лицензированного разработчика применяем криптографический провайдер КриптоПро CSP v4.0 и КриптоПро JCP – v.2.0, с установкой модуля КриптоПро Java CSP v.4.0
Почему КриптоПро JCP – v.2.0, с модулем КриптоПро Java CSP v.4.0?
Потому, что провайдер КриптоПро JCP после длительного несертифицированного периода получил сертификат соответствия от регулятора до 31.12.2021, а дальше, по информации от разработчика, с сертификацией может вновь возникнуть неопределенность. Модуль КриптоПро Java CSP v.4.
0 не выполняет в себе криптографических преобразований и является по сути API к провайдеру КриптоПро CSP, с очередной сертификацией которого вопросов нет. Здесь нужно сказать, что действующий сертификат на СКЗИ не обязателен при условии использования криптографического провайдера исключительно для внутренних целей.
В соответствии со спецификацией Java Cryptography Architecture (JCA), в своем приложении я указываю и использую функции криптографического провайдера: JCSP. После установки КриптоПро, данный провайдер отображается в списке всех доступных в файле ../java/jdk1.8.x_xxx/jre/lib/security/java.security, где можно настраивать, который из них предпочтительнее для использования по умолчанию, если явно не указано в приложении: ## List of providers and their preference orders (see above):#security.provider.1=ru.CryptoPro.JCSP.JCSP
Не забываем, что должны быть сняты экспортные ограничения платформы Java, которые блокируют работу криптографических провайдеров с российскими алгоритмами шифрования.
Для этого в ../java/jdk1.8.x_xxx/jre/lib/security необходимо заменить файлы local_policy.jar и US_export_policy.jar на предоставленные по адресу: Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 8 Downloadи содержащие в default_local.policy и default_US_export.policy:
Как получить тестовый сертификат криптопро (новый уц)
Заходим в тестовый Удостоверяющий центр ООО «КРИПТО-ПРО» ГОСТ 2021 через IE.
Устанавливаем новый сертификат тестового УЦ (скачивается там же) в корневые УЦ.
Далее регистрируемся (подтверждать почту не надо) и, наконец, входим.
Создаем новый сертификат:
Далее стучим по клавиатуре, чтобы создать случайные данные.
Предлагается ввести пароль на подпись. Если оставить пустым — будет без пароля.
Наконец, появляется новый сертификат.
Перекидывает на страницу установки сертификата:
Сертификаты, полученные этим способом, и как тут, отличаются:
Как посмотреть сертификат
Просмотреть перечень сертификатов, скопировать их, удалить можно с использованием следующих инструментов;
При использовании браузера Internet Explorer выполните следующие действия:
После этого появится окошко, где будет перечислен весь перечень установленных на компьютере открытых сертификатов. Дополнительно будет указан список сторонних поставщиков ПО.
Преимущество использования браузера Internet Explorer — в возможности просмотра списка ключей, даже если нет прав администратора. Недостатком же будет невозможность удаления устаревших или ненужных уже сертификатов с жесткого диска компьютера.
При использовании панели управления OS Windows для просмотра открытых сертификатов, установленных на компьютере, выполните следующие действия с правами администратора:
Для просмотра перечня установленных ранее сертификатов на ПК с помощью приложения «КриптоПРО» достаточно выбрать раздел «Сертификаты». Использование данного ПО позволит при наличии прав администратора не только просматривать, но и копировать открытые сертификаты, удалять их.
В OS Windows есть стандартный менеджер Certmgr для работы с установленными ранее сертификатами. С его помощью можно увидеть информацию об открытых ключах, данные об УЦ. Для использования менеджера выполните следующие действия:
В итоге откроется окно со списком проверочных ключей. Специфика менеджера — в необходимости запуска с правами администратора. Важный минус сервиса — в некорректности отображения ЭЦП, что важно учитывать при просмотре.
Код аутентификации сообщения (mac)
Класс Java Mac используется для создания MAC(Message Authentication Code) из сообщения. MAC похож на дайджест сообщения, но использует дополнительный ключ для шифрования дайджеста сообщения. Только имея как исходные данные, так и ключ, вы можете проверить MAC.
Экземпляр Java Mac создается вызовом метода Mac.getInstance(), передавая в качестве параметра имя используемого алгоритма. Вот как это выглядит:
Mac mac = Mac.getInstance("HmacSHA256");
Прежде чем создать MAC из данных, вы должны инициализировать экземпляр Mac ключом. Вот пример инициализации экземпляра Mac ключом:
byte[] keyBytes = new byte[]{0,1,2,3,4,5,6,7,8 ,9,10,11,12,13,14,15};
String algorithm = "RawBytes";
SecretKeySpec key = new SecretKeySpec(keyBytes, algorithm);
mac.init(key);
После инициализации экземпляра Mac вы можете вычислить MAC из данных, вызвав методы update() и doFinal(). Если у вас есть все данные для расчета MAC, вы можете сразу вызвать метод doFinal(). Вот как это выглядит:
byte[] data = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8");
byte[] data2 = "0123456789".getBytes("UTF-8");
mac.update(data);
mac.update(data2);
byte[] macBytes = mac.doFinal();
Настройка email оповещений
Дальше нужно настроить очень важную часть системы мониторинга — уведомления на email. Без нее система мониторинга не выглядит целостной и полноценной. Zabbix сервер поддерживает отправку почты через сторонние smtp серверы. Настроим один из них. Для этого идем в раздел Администрирование ->
Покажу на примере настроек ящика в Яндексе.
Здесь же можете протестировать выбранный способ отправки.
Это мы настроили адрес отправки. Теперь нужно пользователю добавить адрес для получения оповещений. Для этого идем в Администрирование -> Пользователи, выбираем своего пользователя. Идем во вкладку Оповещения и жмем Добавить. Добавляйте свой ящик и нажимайте Обновить.
Дальше нужно активировать отправку уведомлений по событиям. Для этого идем в Настройка -> Действия и жмем на Деактивировано, чтобы стало Активировано.
Все, отправку уведомлений мы настроили, осталось подождать срабатывания триггера, чтобы проверить. Сделаем это позже, когда подключим хотя бы один хост к мониторингу.
Если вам нужны оповещения в telegram, то читайте отдельную статью на эту тему. Так же рекомендую ознакомиться с материалом на тему настройки повторяющихся уведомлений в заббиксе. Для многих триггеров может оказаться очень полезной возможностью. Например, можно каждый день напоминать об окончании времени делегирования домена, пока он не будет продлен.
Так же zabbix умеет звонить через asterisk для оповещения о событиях.
Настройка шифрованного подключения
Для полноты картины расскажу об еще одном важном моменте. Если данные от zabbix агентов поступают на сервер через интернет. И при этом не используется шифрованный vpn канал, я всегда настраиваю шифрованную передачу данных. Для этого использую наиболее простой вариант шифрования с применением pre-shared ключей.
Покажу на конкретном примере, как настроить подключение zabbix agent к серверу с использованием шифрования на основе pre-shared ключей. В качестве хоста будет выступать обычный linux сервер. Идем в его консоль и формируем 256-битный pre-shared key.
# openssl rand -hex 32 > /etc/zabbix/zabbix_agentd.psk
В конфигурацию zabbix_agent.conf добавляем следующие параметры.
TLSConnect=psk TLSAccept=psk TLSPSKFile=/etc/zabbix/zabbix_agentd.psk TLSPSKIdentity=PSK 001
В свойствах хоста на zabbix server в отдельной вкладке Шифрование, настраиваем PSK ключ.
Обращаю внимание на частую ошибку, с которой регулярно сталкиваюсь, а а потом долго не могу понять, в чем проблема шифрованного соединения. Почему ничего не работает. Иногда я забываю установить PSK в строке Подключения к узлу сети, так как машинально сразу ставлю галочку PSK в Соединения с узла сети. Обязательно должно быть указано PSK и там, и там.
Если все сделали правильно, то в информации о хосте на сервере мониторинга будет пометка о том, что соединение с агентом зашифровано.
Не отображается сертификат, список причин и их решение #
- Проверьте на компьютере верность указания даты, часового пояса и времени.
- Убедитесь в том что сертификат был установлен в хранилище «Личные». Если потребуется установите его, используя инструкцию.
- Проверьте срок действия сертификата, убедитесь что срок действия вашей ЭП не закончился.
- Включите режим представления совместимости в Internet Explorer (Кнопка«Сервис» или значок в виде «шестеренки» / Здесь «Параметры просмотра в режиме совместимости» / добавить этот веб-сайт).
- Попробуйте в других веб-браузерах (Mozilla Firefox, Яндекс Браузер, Google Chrome, Спутник), или на другом компьютере.
- Проверьте установку дополнительных компонентов, которые требуются для работы. Например, плагин для Портала Госуслуг, КриптоПро ЭЦП Browser plug-in, Компонент Ланит для сайта Госзакупок. При необходимости обновите их. Инструкция по установке плагинов.
- Посмотрите статус блокировки всплывающих окон. Необходимо отключить блокировку всплывающих окон. В браузере IE нажимаем на клавиатуре кнопку «Alt», потом кнопку«Сервис», в разделе «Блокирование всплывающих окон» выбираем «Выключить блокирование всплывающих окон».
- Проверьте срок действия лицензии КриптоПро. Нажимаем кнопку Пуск, переходим / Все программы / КриптоПро / . Нажимаем на КриптоПро CSP в открывшейся программе на вкладке «Общие» смотрим срок действия лицензии.
Это может быть полезно:
- Установка КриптоПро CSP
- Проверка сертификата Электронной Подписи
- Как подписать документ электронной подписью?
Низкоуровневое обнаружение (low level discovery, lld)
Низкоуровневое обнаружение позволяет автоматически ставить на мониторинг динамические экземпляры узлов. Например, файловые системы или сетевые интерфейсы, которые добавят администраторы, автоматически обнаружатся и появятся на мониторинге. Правила автоматического обнаружения настраиваются в рамках шаблона.
Ниже, в качестве примера, Discovery Rules (правила обнаружения) для шаблона Windows. Здесь их четыре для следующих сущностей:
- файловых систем,
- сетевых интерфейсов,
- физических дисков,
- сервисов.
Рассмотрим устройство правила обнаружения для файловых систем. В поле Key указан элемент данных vfs.fs.discovery, встроенный в Zabbix. Этот элемент возвращает список файловых систем, примонтированных к серверу. Другие встроенные элементы данных собраны на специальной странице производителя.
На вкладке Filters перечислены прототипы данных, которые в случае обнаружения новых элементов распознают их и записывают в БД.
В Zabbix возможно добавление собственных элементов данных, собственных фильтров и макросов.
Ошибки установки сертификата эцп на компьютер и способы их устранения | тендер медиа
Необходимо просмотреть кем выдан сертификат, и скачать корневой сертификат
Удостоверяющего Центра выдавшего данный ключ ЭЦП, для этого вы можете перейти на сайт
Для установки данного сертификата, необходимо зайти в его свойства (нажимаем правой клавишей на сертификате и жмем свойства) и нажимаем «Установить сертификат»
Далее повторно проверяем свойства сертификата, должно быть окно, примерно следующего вида.
Далее последовательно «ОК», «Далее» и «Готово». Ваш сертификат установлен.
Для дальнейшей работы необходимо установить программы для работы с ЭЦП, а так же настроить браузер Internet Explorer.Так же Вы можете ознакомиться:
Преимущества pdf
В качестве контейнера для хранения разнообразной информации в дружественном для человека представлении формат PDF по праву завоевал свою популярность. Его получится открыть в любой ОС. Документ PDF может содержать не только текстовые и табличные данные, но и аудио и видеозаписи, инженерную графику, трехмерные модели.
Инструменты Adobe Systems (разработчика формата PDF) поддерживают использование электронной подписи. В отличие от сообщений с присоединенной усиленной электронной подписью стандарта PKCS#7 и его усовершенствования CAdES, для просмотра документа PDF с подписью не требуется дополнительное специальное ПО. Кроме криптографического провайдера, который требуется во всех случаях.
Т.е. инструменты Adobe позволяют визуализировать электронную подпись в документе.
При подписании документа PDF можно задать параметры визуализации, указать номер страницы, размер блока с подписью, имя поля, куда ее поместить, добавить графическое изображение, например, логотип компании, скан собственноручной подписи руководителя и печати организации.
При просмотре таких документов, кроме визуализации в теле документа, программы Acrobat и Adobe Reader отображают вкладку «Подписи» с сопутствующей информацией: значок, показывающий статус проверки подписи, сведения о том, был ли изменен документ, результат проверки сертификата открытого ключа, время последней проверки, страницу и поле, содержащие электронную подпись.
Применение электронной подписи pdf-документов
На мой взгляд, подпись непосредственно в PDF формате является частным случаем. Такой штамп в самом файле предназначен скорее для визуализации ЭП с целью проверки ее глазами. Это удобно и эффектно, когда речь идет о небольшом количестве документов, где не требуется автоматизация, а роль проверяющего выполняет оператор.
С интенсивным процессом обмена большим количеством электронных документов, оператор не справится. В этом случае информационная система выполняет автоматизацию, и необходимость в красивой визуализации отпадает. Соответственно излишне тратить ресурсы информационной системы и электронных каналов, на передачу объемных PDF файлов и обработку изображений штампа.
Практичнее формировать электронную подпись в виде отдельного файла или оборачивать файл и подпись в один контейнер стандарта PKCS#7 (CAdES). Этот стандарт с присоединенной или отсоединенной подписью отлично подойдет для большого документооборота между информационными системами.
Тот же документ PDF можно подписать по стандарту CAdES отсоединенной подписью, в итоге будет два файла — сам PDF и контейнер с подписью.
Вспомним проблемы, с которыми пришлось столкнуться при подписании на Java. Вывод — формат PDF сейчас плохо поддерживается КриптоПро в части прикладного программного интерфейса для Java. Существующую библиотеку itextpdf пришлось править самостоятельно.
В сфере деятельности, связанной с разработкой коммерческого программного обеспечения со встроенными СКЗИ, такой подход недопустим, патчи, обновления и доработки должны выполняться организацией-лицензиатом. Поэтому приведенный в посте способ подписи PDF-документа можно применять с целью демонстрации возможностей и для внутреннего использования.
Пример кода, несколько подписей pdf
Пример использования КриптоПро и iTextpdf_5.1.3_patched_cryptopro_bc1.50 выглядит следующим образом:
/**
*
* @param aliases
* - имена контейнеров с ключами ЭП
* @param data
* - массив байтов с документом PDF
* @param pdfVersion
* - номер версии формата PDF
* @return
* @throws SignatureProcessorException
*/
public static byte[] samplePDFSignature(String[] aliases, byte[] data, char pdfVersion) throws SignatureProcessorException {
ByteArrayOutputStream bais = new ByteArrayOutputStream();
HashMap<X509Certificate, PrivateKey> currSignAttrMap = new HashMap<X509Certificate, PrivateKey>();
for (String alias : aliases) {
X509Certificate certificate = (X509Certificate) signAttributesMap1.get(alias)[0];
PrivateKey privateKey = (PrivateKey) signAttributesMap1.get(alias)[1];
currSignAttrMap.put(certificate, privateKey);
if (certificate == null) {
throw new SignatureProcessorException(PDF_SIGNATURE_ERROR CERTIFICATE_NOT_FOUND_BY_ALIAS);
}
if (privateKey == null) {
throw new SignatureProcessorException(PDF_SIGNATURE_ERROR PRIVATE_KEY_NOT_FOUND_BY_ALIAS);
}
}
try {
FileInputStream fis = new FileInputStream(new File(FILE_PATH));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int n = 0;
while ((n = fis.read(buf, 0, buf.length)) != -1) {
baos.write(buf, 0, n);
}
fis.close();
byte[] im = baos.toByteArray();
X509Certificate innerCA = obtainCertFromTrustStoreJKS(false, INNER_CA);
PdfStamper stp = null;
PdfReader reader = null;
int pageNumber = 1;
for (Entry<X509Certificate, PrivateKey> entry : currSignAttrMap.entrySet()) {
if (bais.toByteArray().length == 0) {
reader = new PdfReader(data);
} else {
reader = new PdfReader(bais.toByteArray());
bais = new ByteArrayOutputStream();
}
stp = PdfStamper.createSignature(reader, bais, pdfVersion); //''
Certificate[] certPath = new Certificate[] {entry.getKey(), innerCA};
PdfSignatureAppearance sap = stp.getSignatureAppearance();
sap.setProvider("JCSP"); //JCP
sap.setCrypto(entry.getValue(), certPath, null,
PdfSignatureAppearance.CRYPTOPRO_SIGNED);
Image image = Image.getInstance(im);
sap.setImage(image);
sap.setVisibleSignature(new Rectangle(150, 150), pageNumber, null);
pageNumber ;
stp.close();
bais.close();
reader.close();
}
} catch (RuntimeException e) {
throw new SignatureProcessorException(PDF_SIGNATURE_ERROR ExceptionUtils.getFullStackTrace(e));
} catch (IOException e) {
throw new SignatureProcessorException(PDF_SIGNATURE_ERROR ExceptionUtils.getFullStackTrace(e));
} catch (DocumentException e) {
throw new SignatureProcessorException(PDF_SIGNATURE_ERROR ExceptionUtils.getFullStackTrace(e));
} catch (CertificateEncodingException e) {
throw new SignatureProcessorException(PDF_SIGNATURE_ERROR ExceptionUtils.getFullStackTrace(e));
} catch (Exception e) {
throw new SignatureProcessorException(PDF_SIGNATURE_ERROR ExceptionUtils.getFullStackTrace(e));
}
return bais.toByteArray();
}
Метод принимает на вход список имен контейнеров с ключами электронной подписи, байты PDF-документа и номер версии формата PDF. Согласно указанным именам, ключи и сертификаты извлекаются из кэша. Подгружается изображение для визуализации подписи.
Создается объект с корневым сертификатом для формирования пути сертификации, который требуется методу setCrypto класса com.itextpdf.text.pdf.PdfSignatureAppearance.
В цикле выполняется подпись страниц PDF-документа ключами, имена которых были переданы в метод.
Для демонстрации выполнены две подписи — валидная и невалидная с недействительным сертификатом.
Вкладка «Подписи» выглядит следующим образом:
Проблемы и трудности сборки
После успешного обновления исходного кода itextpdf в нем появляются зависимости на пакеты ru.CryptoPro.JCP и ru.CryptoPro.reprov.x509.
Без них проект с исходным кодом itextpdf_5.1.3.gost не соберется.
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project itextpdf: Compilation failure: Compilation failure:[ERROR] githubiTextpdf_5.1.3_patched_cryptopro_bc1.50srcmainjavacomitextpdftextpdfPdfPKCS7.java:
[138,23] error: package ru.CryptoPro.JCP does not exist[ERROR] githubiTextpdf_5.1.3_patched_cryptopro_bc1.50srcmainjavacomitextpdftextpdfPdfPKCS7.java:[139,31] error: package ru.CryptoPro.reprov.x509 does not exist Нужно взять из поставки КриптоПро 2.0 файлы JCP.
Итак, библиотека собрана, подключаем ее в приложение. И тут возникает основная проблема. iTextpdf_5.1.3 содержит зависимость на Bouncy Castle версии 1.46 – библиотеку с открытым кодом, реализующую криптографический провайдер и поддержку ASN.1 структур.
Поставка КриптоПро JCP 2.0 в свою очередь имеет зависимости на Bouncy Castle версии 1.50 bcpkix-jdk15on-1.50 и bcprov-jdk15on-1.5, соответственно, они помещаются в jre/lib/ext при установке КриптоПро.
В итоге при запуске своего приложения и метода подписания PDF мы получаем ошибку:
https://www.youtube.com/watch?v=rIOEXCM4PJg
Exception in thread «main» java.lang.NoClassDefFoundError: org/bouncycastle/asn1/DEREncodableat com.itextpdf.text.pdf.PdfSigGenericPKCS.setSignInfo(PdfSigGenericPKCS.java:97)at com.itextpdf.text.pdf.PdfSignatureAppearance.preClose(PdfSignatureAppearance.java:1003)at com.itextpdf.text.pdf.
PdfSignatureAppearance.preClose(PdfSignatureAppearance.java:904)at com.itextpdf.text.pdf.PdfStamper.close(PdfStamper.java:194)at ru.alfabank.ccjava.trustcore.logic.SignatureProcessor.pdfSignature(SignatureProcessor.java:965)at ru.alfabank.ccjava.trustcore.logic.
SignatureProcessor.main(SignatureProcessor.java:1363)Caused by: java.lang.ClassNotFoundException: org.bouncycastle.asn1.DEREncodableat java.net.URLClassLoader.findClass(Unknown Source)at java.lang.ClassLoader.loadClass(Unknown Source)at sun.misc.
Launcher$AppClassLoader.loadClass(Unknown Source)at java.lang.ClassLoader.loadClass(Unknown Source)… 6 moreКаждый разработчик Java сталкивался с таким исключением в потоке main и знает, что можно потратить много времени на разбор проблемы, и как все исправить.
Что получается – библиотека iTextpdf_5.1.3 имеет зависимость от более старого провайдера Bouncy Castle, а для новых версий iTextpdf нет патча от КриптоПро.
Конкретно в поставке КриптоПро JCP 2.0 зависимости на новую версию Bouncy Castle имеет библиотека CAdES.jar. Если удалить из JRE эту библиотеку или вовсе отказаться от поддержки формирования CAdES подписей при установке КриптоПро JCP 2.0, то проблема будет решена.
Но что если поддержка CAdES должна остаться?
Чтобы избавиться от конфликта библиотек, необходимо предпринять следующие шаги:
Как итог, проект iTextpdf_5.1.3_patched_cryptopro_bc1.50 начинает собираться. Конфликт разрешен, КриптоПро и itextpdf ссылаются на одну версию org.bouncycastle 1.50.
Исходный код iTextpdf_5.1.3_patched_cryptopro_bc1.50 выложен в GitHub: iTextpdf_5.1.3_patched_cryptopro_bc1.50
Просмотр сертификатов в оснастке mmc view certificates in the mmc snap-in
В следующей процедуре показано, как проверить магазины на локальном устройстве, чтобы найти соответствующий сертификат: The following procedure demonstrates how to examine the stores on your local device to find an appropriate certificate:
В меню Пуск выберите пункт выполнить и введите MMC. Select Run from the Start menu, and then enter mmc.
Откроется консоль MMC. The MMC appears.
В меню файл выберите команду Добавить или удалить оснастку. From the File menu, select Add/Remove Snap In.
Откроется окно Добавление или удаление оснасток . The Add or Remove Snap-ins window appears.
В списке Доступные оснастки выберите Сертификаты, а затем щелкните добавить. From the Available snap-ins list, choose Certificates, then select Add.
В окне оснастки «сертификаты » выберите учетная запись компьютера, а затем нажмите кнопку Далее. In the Certificates snap-in window, select Computer account, and then select Next.
Расширение криптографии java
Java cryptography API предоставляется так называемым расширением Java Сryptography Extension(JCE). JCE уже давно является частью платформы Java. Изначально JCE был отделен от Java из-за того, что в США действовали экспортные ограничения на технологии шифрования.
Поэтому самые стойкие алгоритмы шифрования не были включены в стандартную платформу Java. Эти более надежные алгоритмы шифрования можно применять, если ваша компания находится в США, но в остальных случаях придется применять более слабые алгоритмы или реализовывать свои собственные алгоритмы шифрования и подключать их к JCE.
С 2021 года правила экспорта алгоритмов шифрования в США были значительно ослаблены и в большей части мира можно пользоваться международными стандартами шифрования через Java JCE.
Архитектура криптографии Java
Java Cryptography Architecture (JCA) — название внутреннего дизайна API криптографии в Java. JCA структурирован вокруг нескольких основных классов и интерфейсов общего назначения. Реальная функциональность этих интерфейсов обеспечивается поставщиками.
Также можно реализовать и подключить свои собственные провайдеры, но вы должны быть осторожны с этим. Правильно реализовать шифрование без дыр в безопасности сложно! Если вы не знаете, что делаете, вам, вероятно, лучше использовать встроенный поставщик Java или использовать надежного поставщика, такого как Bouncy Castle.
Типы ssl-сертификатов
Существует несколько типов SSL-сертификатов.
Сертификат с проверкой домена (Domain Validation), например, DomainSSL или AlphaSSL. Самый простой и дешевый тип SSL-сертификатов. Подтверждает только домен. Не содержит информации о владельце, поэтому не предназначен для оказания коммерческих услуг на сайте. Физические лица могут использовать только этот тип сертификатов, но он доступен и для юридических лиц.
Сертификат с проверкой домена и организации (Organization Validation), например, OrganizationSSL. Подтверждает не только домен, но и его принадлежность компании. Центр авторизации проверит ее существование, а пользователь сможет увидеть ее название на сайте в информации о сертификате, кликнув на «замок» рядом с адресной строкой браузера.
Сертификат с расширенной проверкой организации (Extended Validation) – например, ExtendedSSL. Считается самым надёжным и предназначен для крупных организаций. При его оформлении центр сертификации проведет расширенную проверку налоговой и коммерческой деятельности компании.
Еще один термин, который встретится при выборе сертификата – WildCard. Он означает поддержку поддоменов. Один SSL-сертификат с WildCard сможет работать и на основном домене, и на поддоменах без ограничений на их количество.
При заказе сертификатов Extended Validation или Organization Validation, центр сертификации может запросить следующие виды документов:
- Свидетельство ИНН / КПП;
- Свидетельство ОГРН;
- Приказ о назначении директора;
- Свидетельство о регистрации доменного имени;
- Устав организации (первые 3 и последние 3 страницы);
- Счета на оплату телефонных разговоров с номера компании за последние 3 месяца, с обязательным указанием в счетах названия и номера телефона организации и названия организации-поставщика услуг.
Документы нужно будет отправить по факсу или электронной почте. Заверять скан-копии не требуется. Центр сертификации может запросить и другие документы, не указанные в списке. Кроме того, с вами могут связаться по телефону для подтверждения телефонного номера организации и заказа сертификата.
Управление сертификатами с помощью диспетчера сертификатов или certmgr.msc
Консоль диспетчера сертификатов является частью консоли управления Microsoft в Windows 10/8/7. MMC содержит различные инструменты, которые можно использовать для функций управления и обслуживания. Как упоминалось ранее, используя certmgr.msc, вы можете просматривать свои сертификаты, а также изменять, импортировать, экспортировать, удалять или запрашивать новые.
Для управления сертификатами в меню WinX в Windows выберите «Выполнить». Введите certmgr.msc в поле «Выполнить» и нажмите Enter. Помните, что вам нужно будет войти в систему как администратор. Диспетчер сертификатов откроется.
Вы увидите, что все сертификаты хранятся в разных папках в разделе Сертификаты – текущий пользователь . Когда вы откроете любую папку сертификатов, вы увидите, что сертификаты отображаются на правой панели. На правой панели вы увидите такие столбцы, как «Выдан», «Выдан», «Срок действия», «Назначение», «Понятное имя», «Статус» и «Шаблон сертификата». В столбце «Предполагаемые цели» указано, для чего используется каждый сертификат.
Используя диспетчер сертификатов, вы можете запросить новый сертификат с тем же ключом или другим ключом. Вы также можете экспортировать или импортировать сертификат. Чтобы выполнить какое-либо действие, выберите сертификат, щелкните меню «Действие»>
Если вы хотите экспортировать или импортировать сертификаты , откроется простой в использовании мастер, который выполнит необходимые действия.
Следует отметить, что Certmgr.msc является оснасткой консоли управления Microsoft, тогда как Certmgr.exe является утилитой командной строки. Если вы хотите узнать о параметрах командной строки в certmgr.exe, вы можете посетить MSDN.
Прочтите это, если получите. Проблема с сертификатом безопасности этого веб-сайта в сообщении IE.
Установка zabbix agent на linux
Если вы хотите установить zabbix-agent на сам сервер мониторинга, то ничего делать не надо, кроме самой установки. Для других систем необходимо подключить репозитории заббикса, которые мы использовали во время установки сервера. Можете посмотреть их в соответствующих разделах для своей системы.
Установка zabbix agent в Centos:
# dnf install zabbix-agent
Тоже самое в Ubuntu/Debian:
# apt install zabbix-agent
Для работы с сервером, который установлен локально на этой же машине, больше никаких настроек не надо делать. Если же вы будете устанавливать zabbix agent на другую машину, то в файле конфигурации агента /etc/zabbix/zabbix_agentd.conf нужно будет задать следующие параметры:
Server=10.20.1.23 ServerActive=10.20.1.23 Hostname=srv10 Timeout=10
srv10 — имя вашего узла мониторинга, которое будет указано на сервере zabbix. Timeout рекомендую увеличивать для удобства. По умолчанию он всего 3 секунды и в некоторых проверках этого не хватает.
Запускаем агент и добавляем в автозагрузку:
# systemctl enable --now zabbix-agent
Проверяем лог файл /var/log/zabbix/zabbix_agentd.log.
# cat /var/log/zabbix/zabbix_agentd.log 8918:20200514:172338.583 Got signal [signal:15(SIGTERM),sender_pid:9110,sender_uid:989,reason:0]. Exiting … 8918:20200514:172338.584 Zabbix Agent stopped. Zabbix 5.0.0 (revision 9665d62db0). 9116:20200514:172338.595 Starting Zabbix Agent [Zabbix server]. Zabbix 5.0.0 (revision 9665d62db0). 9116:20200514:172338.595 **** Enabled features **** 9116:20200514:172338.595 IPv6 support: YES 9116:20200514:172338.595 TLS support: YES 9116:20200514:172338.595 9116:20200514:172338.595 using configuration file: /etc/zabbix/zabbix_agentd.conf 9116:20200514:172338.595 agent #0 started [main process] 9117:20200514:172338.596 agent #1 started [collector] 9118:20200514:172338.596 agent #2 started [listener #1] 9121:20200514:172338.596 agent #5 started [active checks #1] 9119:20200514:172338.597 agent #3 started [listener #2] 9120:20200514:172338.598 agent #4 started [listener #3]
Все в порядке. Идем в веб интерфейс и проверяем поступление данных. Для этого переходим в раздел Мониторинг -> Последние данные. Указываем в разделе Узлы сетиZabbix Server и ждем поступления первых данных. Они должны пойти через 2-3 минуты после запуска агента.
Теперь попробуем остановить агент и проверить, придет ли уведомление на почту. Идем в консоль и выключаем агента:
# systemctl stop zabbix-agent
Ждем минимум 3 минуты. Именно такой интервал указан по-умолчанию для срабатывания триггера на недоступность агента. Раньше, кстати, было 5 минут. После этого проверяем главную панель, виджет Проблемы.
Проверяйте email ящик. Туда должно прийти уведомление от заббикс сервера. Обращаем внимание на тему письма, шаблон которого мы отредактировали. В самом начале темы указано имя хоста, на котором сработал триггер.
Если использовать стандартный шаблон, этой информации не будет.
Установка zabbix агент на windows
В последних версиях Zabbix установка Windows агента значительно упростилась, так как появился готовый установщик. Во время его работы можно сразу указать адрес сервера мониторинга и имя хоста, на который устанавливается агент. В итоге, все делается автоматически, не надо ничего настраивать вручную .
Раньше все было сложнее, так как надо было вручную устанавливать службу, распаковав бинарники из архива. Так же потом нужно было руками править конфигурационный файл. Сейчас при дефолтных настройках ничего этого делать не надо.
Для установки Zabbix agent на Windows, идем на страницу загрузок официального сайта. Выбираем там Zabbix Agent и качаем подходящую версию.
На момент написания статьи еще не было инсталлятора для 5-го агента, но он наверняка появится в ближайшее время. Покажу на примере агента 4.4, который полностью совместим с более свежим сервером. Запускаем msi пакет и доходим до этапа, где надо указать адрес сервера и имя хоста. Делаем это.
Все остальное оставляем без изменений.
Не забываем создать разрешающее правило в Брандмауэре, если он у вас включен. Для этого идем в Панель управленияСистема и безопасностьБрандмауэр Windows — Дополнительные параметры — Правило для входящих подключений — Создать правило.
- Тип правила: Для порта;
- Протоколы и порты: Протокол TCP; Определенные локальные порты: 10050;
- Действие: Разрешить подключение;
- Профиль (ставим галочки): Доменный, Частный, Публичный;
- Имя: Zabbix Agent;
Чтобы работал мониторинг windows машины, нужно добавить на сервер мониторинга host с таким же Hostname, что мы указали во время установки агента. Для этого идем в web панель, открываем раздел Настройка -> Узлы сети и жмем Создать узел сети.
На первой вкладке указываем имя хоста, такое же, как на клиенте, добавляем в любую существующую группу и задаем ip адрес компьютера.
Переходим на вкладку Шаблоны и выбираем там шаблон Template OS Windows by Zabbix agent.
Добавляем новый хост на сервер мониторинга. Осталось подождать несколько минут поступления свежих данных. Проверить их можно там, где и раньше, в Последних данных, выбрав новый хост.
На этом установка и настройка мониторинга windows с помощью zabbix agent закончена. Можно добавлять новые компьютеры с разными версиями windows. Одна и та же версия агента подходит для всех, и десктопных, и серверных систем.
Установка сертификатов в хранилище java
У меня была задача добавить несколько корпоративных сертификатов (corp.cer, corp1.cer) в хранилище Java Signer CA в разделе System.
Импорт можно сделать только с помощью программы keytool.exe. Для этого открываем cmd.exe от имени администратора и вводим следующую команду (но предварительно нужно изменить параметры -alias и -keystore под себя):
«C:Program FilesJavajre6binkeytool.exe» -importcert -alias CorpIntCA01 -file «D:installCorpIntCA01.cer» -trustcacerts -keystore «C:Program FilesJavajre6libsecuritycacerts» -storepass changeit –noprompt
И так для каждого сертификата.
Понятно, что данный способ развертывания сертификатов Java использовать очень неудобно, поэтому пойдем другим путем. На одном ПК добавим все сертификаты, а потом файл, в котором они хранятся, перепишем на все ПК с помощью групповой политики (GPO), а точнее с помощью предпочтений групповой политики (GPP).
Файл с сертификатами называется cacerts и находится в каталоге — C:Program FilesJavajre6libsecurity.
Я использовал ту же групповую политику, что и для развертывания Java. Далее делаем так, как показано на скриншоте.
В поле Source указываем имя сервера, где будет лежать файл cacerts (\fileserverjava_settingscacerts), в поле Destination File указываем путь к конечному файлу — %ProgramFilesDir%Javajre6libsecuritycacerts.
Единственная проблема возникает при установке Java, т.к. файл скопируется быстрее, чем установится Java. А при установке Java сотрет уже имеющийся файл с нашими сертификатами, и на его место запишет свой файл с сертификатами по умолчанию. GPP отработает снова через некоторое время, файл заменится снова, но не сразу. К этому нужно быть готовым.
Если нужно развернуть сертификаты из раздела пользователя, то действуем по такому же принципу.
Шаг 4:
Добавьте сертификат в файл хранилища доверенных сертификатов.
01 02 03 04 05 06 07 08 09 10 11 12 13 14 |
|
Шаг 5:
Убедитесь, что сертификат был успешно добавлен в хранилище ключей.
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 |
|