Справочное руководство включает в себя сведения о возможных допустимых параметрах конфигурации PC и сопуствующих компонентов.
Параметры кофигурации сервера PC
Установка параметров
Настройки PC Server устанавливаются путём добавления/изменения записей в БД модуля, в таблице pc_sys_property. Запись состоит из setting_name и setting_value. Параметры и значения для каждого сервреа перечислены для каждого сервера в соответствующих разделах ниже.
Примеры запросов для установки параметров
PostgreSQL
Добавление значения с помощью SQL-запроса (После выполнения запроса требуется перезапуск службы):
insert into pc_sys_property values (nextval('pc_setting_seq'), 'DEBUG_INFO', '1');
Oracle
insert into pc_sys_property values (PC_SETTING_SEQ.NEXTVAL, 'DEBUG_INFO', '1');
MS SQL
insert into pc_sys_property values (NEXT VALUE FOR PC_SETTING_SEQ, 'DEBUG_INFO', '1');
Пример запроса для изменения параметров
Изменение установленного ранее значения с помощью SQL-запроса (независимо от используемой СУБД):
update pc_sys_property set setting_value = '1' where setting_name='DEBUG_INFO';
Параметры конфигурации PC Server
setting_name | По умолчанию | Описание |
---|---|---|
REPORT_TEMPLATE | Путь к шаблону отчёта. Значение используется, если не задано значение в pc_system_params (с 3.6) или pc_system (до 3.6). |
|
KILT | 365 | Время жизни ключевой информации пользователя (в днях). Сокращение от "KEY_INFO_LIFE_TIME". Значение используется, если не задано значение в pc_system_params (с 3.6) или pc_system (до 3.6). |
BILL_PERIOD | 365 | Период биллинга (в днях) для постоплатной системы расчётов. Значение используется, если не задано значение в pc_system_params (с 3.6) или pc_system (до 3.6). |
DEBUG_INFO | 0 | Выводить отладочную информацию (0 – не выводить, 1 - выводить). |
CRYPTO_PROVIDER | BC | Криптопровайдер. Устаревший параметр. Значение только "BC" (сокращение от Bouncy Castle) |
T_AUTH_CODE | 180 | Интервал дискретизации для кода аутентификации (auth_code) (в секундах). |
T_CONFIRM_CODE | 180 | Интервал дискретизации для кода подтверждения (в секундах). |
KEY_QR_SIZE | 300 | Размер QR-кода ключа (в пикселях). |
TRANSACTION_QR_SIZE | 300 | Размер QR-кода транзакции (в пикселях). |
CLEAN_TRANSACTION | 1 | Очищать данные транзакции после подтверждения. |
DEFAULT_TRANSACTION_TTL | 0 | Время жизни транзакций по умолчанию в секундах. 0 – без ограничений. |
COLLECT_EVENTS | 0 c версии 3.6.367: 1 |
Включает сбор информации о событиях для сервера. |
COLLECT_DEVICE_INFORMATION | 0 c версии 3.6.367: 1 |
Включает сбор информации об устройстве для сервера. |
CHECK_HTTP_AUTH_HEADER | 1 | Включает проверку аутентификации HTTP запросов от МП по значению, передаваемому в HTTP заголовке. |
IOS_PUSH_PAYLOAD_TEMPLATE | Шаблон push-уведомлений для iOS. Используются только при отправке через PCInform. | |
ANDROID_PUSH_PAYLOAD_TEMPLATE | Шаблон push-уведомлений для Android. Используются только при отправке через PCInform. | |
c версии 3.6.355: | ||
KEYFLAG_WITH_FINGERPRINT | 0 | Установка параметра ключа "Обязательное использование Отпечатка устройства" по умолчанию. Допустимые значения '0' или '1'. |
KEYFLAG_COLLECT_EVENTS | 0 | Установка параметра ключа "Собирать события" по умолчанию. Допустимые значения '0' или '1'. |
KEYFLAG_COLLECT_DEVICEINFO | 0 | Установка параметра ключа "Собирать информацию об устройстве" по умолчанию. Требует включения сбора событий. Допустимые значения '0' или '1'. |
KEYFLAG_COLLECT_SIMINFO | 0 | Установка параметра ключа "Собирать информацию о телефоне (SIM-карте)" по умолчанию. Требует включения сбора информации об устройстве. В ОС Android будет выведен запрос на доступ к Телефону (либо потребуется предоставление этих прав при встраивании PC SDK в своё приложение). Допустимые значения '0' или '1'. |
KEYFLAG_COLLECT_LOCATION | 0 | Установка параметра ключа "Собирать информацию о местоположении (геолокации) устройства" по умолчанию. Требует включения сбора информации об устройстве. Будет выведен запрос на доступ к Местоположению устройства (либо потребуется предоставление этих прав при встраивании PC SDK в своё приложение). Допустимые значения '0' или '1'. |
KEYFLAG_PASS_POLICY | 0 | Установка параметра ключа "Требований к сложности пароля (пин-кода) для сохранения ключа на устройстве" по умолчанию. Доступны следующие варианты: — «0» – минимум 6 символов, пароль не обязателен (доступна кнопка "Без пароля"); — «1» – минимум 6 символов, пароль обязателен; — «2» – минимум 8 символов (обязательно использование A-Z и a-z) пароль обязателен; — «3» – минимум 8 символов (обязательно использование A-Z, a-z и 0-9) пароль обязателен. |
KEYFLAG_DENY_STORE_WITH_OS_PROTECTION | 0 | Установка параметра ключа "Запрет сохранения ключа на мобильном устройства, используя системный способ защиты, такой как Apple TouchID/FaceID или Google Imprint" по умолчанию. Допустимые значения '0' или '1'. |
KEYFLAG_DENY_RENEW_PUBKEY | 0 | Установка параметра ключа "Запрет перерегистрации открытого ключа на сервере" по умолчанию. Является особо рекомендуемым параметром, при подписании акта признания открытого ключа с владельцем ключа ЭП. Допустимые значения '0' или '1'. |
KEYFLAG_SCORING_ENABLED c версии 5.0 |
0 | Установка параметра ключа разрешающего "скоринг" устройства. |
KEYFLAG_AUTOSIGN_ENABLED c версии 5.0 |
0 | Установка параметра ключа разрешающего автоподтверждение транзакций на основании результатов скоринга. |
KEYFLAG_REMOTE_UPDATE_ENABLED c версии 5.2 |
1 | Установка параметра ключа разрешающего перевыпуск ключа по запросу мобильного устройства. |
KEYFLAG_NFC_POLICY c версии 5.3 |
0 | Установка параметра ключа разрешающего использование NFC-токена для хранения ключа ЭП и генерации ЭП с использованием хранящегося на карте ключа ЭП. Доступны следующие варианты: — «0» – Запрещено; — «1» – Разрешено; — «2» – Обязательно. |
c версии 3.6.368: | ||
NETWORK_TIMEOUT | 1000 | Количество миллисекунд, которое poster ожидает при установке соединения (при отправке коллбэка, событий, скоринге). |
c версии 3.8, но не выше версии 5.0: | ||
APP_ID_FOR_PUSHER | {"Android":"ru.safe-tech.PayControl.v3","iOS":"ru.safe-tech.PayControl.v3"} | Идентификатор приложения "по умолчанию" (app/bundle id) для отправки на него Push-уведомлений (актуально для приложений на базе PCSDKv1/PCSDKv2) |
c версии 5.0: | ||
QR_LOGO_LOCATION | c версии 5.2 /opt/pc/qr_logo.png |
Путь к файлу логотипа, располагающемуся на QR коде. Если не задан - ничего не выводится. Допустимо использование png/jpg. Рекомендуемый максимальный размер - не более 10% от площади QR-кода. Однако, чем ближе размер логотипа к этой цифре, тем чаще будет отображаться QR без него, т.к. будет срабатывать механизм защиты от ошибок. |
QR_COLOR | #066AB2 | Цвет QR-кода. Применяется только если задан путь к файлу логотипа, располагающемуся на QR-коде. |
CLEAN_LOGIN_TRANSACTION | 1 | Включение удаления данных (ext_pulp) использующихся для механизма входа по QR. |
c версии 5.1: | ||
LICENSE_FILE_LOCATION | — C:\wildfly\ — /opt/wildfly/ — C:\pc\ — /opt/pc/ |
Место поиска лицензионных файлов. При указании пути поиска файла лицензии для OC Windows, необходимо экранировать имеющиеся в пути слеши, например: C:\\custom_path\\ |
c версии 5.1.140: | ||
SET_APP_ID_FOR_TRANSACTION_CALLBACK | 0 | Передавать app_id в коллбэке о подтверждении транзакции (0 — не передавать, 1 — передавать) |
c версии 5.2: | ||
CHECK_HTTP_AUTH_HEADER_TIME_INTERVAL | 1 | Проверка значения времени при HTTP-авторизации (0 — не проверять, 1 — проверять) |
EXT_AUTH_FAIL_LIMIT | 5 | Количество неуспешных попыток использовать дополнительный метод аутентификации, после чего этот доп. метод будет отключён |
PKI_SETTINGS_PATH | /opt/pc/pki/pki-settings.properties | Путь к файлу настроек PKI-коннектора |
SERVER_SIGNER_PERS_URL | http://localhost:8080/pc-server-signer-api/personalize_async | Адрес для персонализации пользователя с серверной подписью |
PDF_SIGNATURE_SETTINGS | {"position": { "x": 0, "y": 0, "width": 220, "height": 65}, "frame_color": "#004D99", "pdf_permissions": 1} c версии 5.3: {"position": { "x": 0, "y": 0, "width": 220, "height": 65}, "frame_color": "#004D99", "pdf_permissions": 1, "visualize_signature": true, "image_uri":"/opt/pc/logo.svg"} |
Параметры визуализации PDF-подписи |
Параметры конфигурации PC Pusher
Описание возможностей и способа конфигурирования модуля приведено по ссылке.
Включение и конфигурирование HTTPS
Добавление сертификата
Для добавления/обновления сертификата необходимо выполнить следующие действия:
- Составить цепочку сертификатов. Из файлов сертификатов в формате PEM (Base64) составить цепочку путём соединения в новом файле с расширением crt, например fullchain.crt. Для этого в новый файл с помощью текстового редактора нужно добавить сертификат корневого УЦ, промежуточных, и собственно сертификат сервера.
Создать контейнер формата pkcs12:
openssl pkcs12 -export -in fullchain.crt -inkey private_key.key -out keycontainer.p12
при экспорте следует задать пароль
<password>
для приватного ключа.Создать JKS-контейнер из PKCS12:
keytool -importkeystore -srckeystore keycontainer.p12 \ -srcstoretype PKCS12 \ -destkeystore <container-name>.jks \ -deststoretype JKS
при импорте указать
<password>
, при экспорте указать пароль к контейнеру.Скопировать
<container-name>.jks
например в/opt/wildfly/standalone/configuration/
(для Linux), либо вC:\wildfly\standalone\configuration\
(для Windows).Имя файла-контейнера (относительный путь от директории
configuration
) и пароли указать в файле /opt/wildfly/standalone/configuration/standalone.xml (для Linux), либо в C:\wildfly\standalone\configuration\standalone.xml (для Windows), в объекте keystore (если АЛИАС не был задан, по умолчанию устанавливается значение "1"):<security-realm name="ApplicationRealm"> <server-identities> <ssl> <keystore path="ИМЯ ФАЙЛА-КОНТЕЙНЕРА.jks" relative-to="jboss.server.config.dir" keystore-password="ПАРОЛЬ К КОНТЕЙНЕРУ" alias="АЛИАС" key-password="ПАРОЛЬ К ПРИВАТНОМУ КЛЮЧУ" generate-self-signed-certificate-host="localhost"/> </ssl> </server-identities>
Перезапустить сервис WildFly.
Проверить подключение:
openssl s_client -connect <server-name>:8443
Verify Result должен быть 0.
Отключение HTTP порта (8080)
Для того, чтобы на сервере PC External отключить доступ к REST-интерфейсу по порту 8080 необходимо в файле /opt/wildfly/standalone/configuration/standalone.xml
(для Linux), либо в C:\wildfly\standalone\configuration\standalone.xml
(для Windows) (перед этим лучше сделать его резервную копию) в блоке <server name="default-server">
удалить строку
<http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>
В блоке <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
удалить строку:
<socket-binding name="http" port="${jboss.http.port:8080}"/>
В строке <http-connector name="http-remoting-connector" connector-ref="default" security-realm="ApplicationRealm"/>
поменять значение параметра connector-ref
с default
на https
:
<http-connector name="http-remoting-connector" connector-ref="https" security-realm="ApplicationRealm"/>
Добавление сертификатов корпоративных УЦ
Для валидации подключения к хостам, на которых используется сертификат, выпущенный на корпоративном УЦ, необходимо добавить все сертификаты из цепочки для валидации конечного хоста в хранилище доверенных в Java. Для этого необходимо использовать утилиту Java keytool.
sudo keytool -import -alias testCert -keystore $JAVA_HOME/jre/lib/security/cacerts -file example.cer
где
alias — alias for the certificate so have a meaningful name
file — exported .cer certificate from the browser
Пароль по умолчанию – changeit
.
Как минимум в CN сертификата должен быть адрес, по которому происходит обращение к серверу (DNS или IP). Если этого будет недостаточно, тогда добавить в SAN сертификата.
Параметры ключа
При создании запроса на генерацию ключевой информации пользователя, могут быть установлены параметры, перечисленные ниже.
Отпечаток устройства
withFingerPrint – указывает, осуществлять ли привязку устройства к Пользователю PC. В случае наличия в запросе на создание пользователя параметра «флаг привязки пользователя к устройству» со значением «true» при проверке кода подтверждения будет использован отпечаток устройства пользователя. Отпечаток устройства вносится в информацию о пользователе путем вызова метода «Сохранение отпечатка устройства».
Флаг не может быть использован одновременно с флагом указывающим, на тип пользователя "Серверная подпись".
Сбор событий
collectEvent – флаг, указывающий необходимость передачи мобильным приложением информации о событиях и сохранения её сервером в базе данных PC.
Информация об устройстве
collectDeviceInfo – флаг, указывающий необходимость сбора информации об устройстве в составе информации о событии. Учитывается только в случае, если установлен флаг collectEvent.
Информация о сим-карте
collectDeviceSIMInfo – флаг, указывающий необходимость сбора информации о телефоне (SIM-карте). При включении – мобильное устройство передаёт информацию, относящуюся к телефону и SIM-карте в составе информации об устройстве. Учитывается только если установлен флаг collectDeviceInfo. На Android-устройстве необходимо дополнительное разрешение приложению на доступ к информации о телефоне.
Информация о местоположении устройства
collectDeviceLocation – флаг, указывающий необходимость сбора информации о местоположении устройства. При включении – мобильное устройство передаёт координаты местоположения устройства в составе информации об устройстве. Учитывается только если установлен флаг collectDeviceInfo. На мобильном устройстве необходимо дополнительное разрешение на доступ к геолокации.
Запрет перерегистрации открытого ключа
denyRenewPublicKey – флаг, запрещающий перерегистарцию открытого ключа сервере, если открытый ключ уже был зарегистрирован ранее.
Параметры сохранения ключевой информации на устройстве
Запрет использования механизмов безопасности ОС
denyStoreWithOSProtection – флаг, запрещающий сохранение ключа с использованием механизмов безопасности операционной системы мобильного устройства (TouchID/FaceID, Google Key Store).
Требования к паролю
passPolicy указывает вариант требований к сложности пароля при сохранении ключевой информации на мобильном устройстве. Доступны следующие варианты:
- «0» – минимум 6 символов, пароль не обязателен;
- «1» – минимум 6 символов, пароль обязателен;
- «2» – минимум 8 символов (обязательно использование A-Z и a-z) пароль обязателен;
- «3» – минимум 8 символов (обязательно использование A-Z, a-z и 0-9) пароль обязателен.
Скоринг и автоподпись
Скоринг
scoring_enabled — разрешение "скоринга" устройства и поведенческого анализа с помощью дополнительного антифрод-модуля Secure Bank от Group IB. Лицензируется отдельно.
Автоподписание
autosign_enabled — разрешение автоподписи транзакций на основе результата скоринга устройства и поведенческого анализа. Для автоподписи используется дополнительная асимметричная ключевая пара.
Отложенный ввод в действие ключевой информации
delayed – флаг отложенного ввода в действие ключа. При его установке ключ, используемый для подтверждения транзакций и проверки кодов аутентификации, не заменяется. Сгенерированный новый ключ помечается как отложенный. Его ввод в действие выполняется одним из следующих способов:
- путем вызова метода Ввод отложенного ключа в действие;
- путем вызова одного из методов: Сохранение отпечатка устройства, Регистрация открытого ключа, Регистрация устройства для отправки PUSH-уведомлений с кодом аутентификации, сформированным на отложенном ключе. Выполнять обновление ключевой информации с флагом отложенного ввода можно неограниченное количество раз. При этом сформированная ранее отложенная ключевая информация будет заменена новой отложенной ключевой информацией. При выполнении обновления без данного флага вся отложенная ключевая информация далее считается недействительной и не может быть введена в действие.
Если значение опционального флага не указано, принимается значение равное «false».
Удалённый перевыпуск ключа
Если флаг установлен, то для ключа разрешена процедура перевыпуска ключевой инофрмации по инициативе мобильного приложения. Обязательным предусловием является действительность ключа на момент перевыпуска. Подробнее о процессе по ссылке.
Серверная подпись
Флаг, указывающий на то, что пользователь подлежит регистрации в модуле серверной подписи, а не в мобильном устройстве. При этом компонент серверной подписи (PCSS) должен быть развернут и настроен. Описание вызовов API для взаимодействия с компонентом доступно в описании API PC.
Флаг не может быть использован одновременно с флагом включения проверки отпечатка устройства.
Использование NFC-токенов
nfc_policy - флаг, определяющий политику использования NFC-токенов на мобильном устройстве для хранения ключа ЭП и генерации ЭП с использованием хранящегося на карте ключа ЭП. Доступны следующие варианты:
- «0» – использование NFC-карты, хранащей закрытый ключ, на мобильном устройстве запрещено. Для всех криптографических операций используется ключевая пара генерируемая на самом мобильном устройстве;
- «1» – использование NFC-карты, хранащей закрытый ключ, на мобильном устройстве опционально. В криптографических операциях может быть использована как ключевая пара, генерируемая на мобильном устройстве, так и ключевой контейнер, хранящийся на NFC-карте;
- «2» – использование NFC-карты, хранащей закрытый ключ, на мобильном устройстве обязательно. Для всех криптографических операций используется ключевая пара, хранящаяся в контейнере на NFC-карте;
Если опциональное значение nfc_policy не установлено, принимается значение равное «0».
Кодирование значений флагов в составе ключевой информации
В составе QR-кода, значения передаются в 7-ой строке данных (для версии сервера 3.x) или в параметре "key_flags" (для версии сервера 5 и выше), целым числом. Значения флагов вычисляются с помощью битовой маски.
KEYFLAG_WITH_FINGERPINT = (1 << 0);
KEYFLAG_COLLECT_EVENTS = (1 << 1);
KEYFLAG_COLLECT_DEVICEINFO = (1 << 2);
KEYFLAG_COLLECT_SIMINFO = (1 << 3);
KEYFLAG_COLLECT_LOCATION = (1 << 4);
KEYFLAG_PASS_POLICY_POS = (1 << 5); // password policy encoded by 2 bits (4 values)
KEYFLAG_PASS_POLICY_POS = (1 << 6); // password policy encoded by 2 bits (4 values)
KEYFLAG_DENY_STORE_WITH_OS_PROTECTION = (1 << 7);
KEYFLAG_DENY_RENEW_PUBKEY = (1 << 8);
KEYFLAG_SCORING_ENABLED = (1 << 9);
KEYFLAG_AUTOSIGN_ENABLED = (1 << 10);
KEYFLAG_REMOTE_UPDATE_ENABLED = (1 << 11);
KEYFLAG_SERVERSIGNER = (1 << 12);
KEYFLAG_NFC_ENABLED_POS = (1 << 13); // NFC policy encoded by 2 bits (3 values is used)
KEYFLAG_NFC_ENABLED_POS = (1 << 14); // NFC policy encoded by 2 bits (3 values is used)
События
Свойства записи о событии
Наименование свойства события | Описание |
---|---|
event_id | Идентификатор события в журнале аудита системы |
created_at | Время создания записи в журнале аудита системы |
user_id | Идентификатор пользователя |
transaction_id | Идентификатор транзакции |
session_id | Идентификатор сессии на мобильном устройстве |
device_event_id | Идентификатор события на мобильном устройстве |
device_time | Время события на мобильном устройстве |
auth_code | Код аутентификации запроса |
request_hash | Хэш-сумма запроса |
request_hmac | Код аутентификации тела запроса |
request_type | Тип запроса/события |
device_info | Информация об устройстве |
requester_ip_address | IP адрес источника запроса |
request_result | Результат выполнения запроса (0 - успех, другое |
operationid | Идентификатор операции |
c версии 5.3: | |
request_url | Адрес |
pc_version | Компонент PC, его версия и версия API |
system_id | Идентификатор прикладной системы |
connection_info | Данные о сетевом подключении, связанного с событием |
pc_instance_name | Название экземпляра PC |
Типы запросов/событий
Событие | Описание |
---|---|
decline_transaction | Отмена транзакции |
autoconfirm_transaction | Автоподтверждение транзакции |
confirm_transaction | Подтверждение транзакции |
create_transaction | Создание транзакции |
get_autoconfirm_list | Получение списка транзакций для автоподтверждения |
get_transactions | Получение списка транзакций |
get_transaction_info | Получение информации о транзакции |
get_transaction_data | Получение данных транзакции |
get_transaction_binary_data | Получение бинарных данных транзакции |
attempt_scoring_details | Детали скоринга попытки автоподтверждения |
change_user | Изменение пользователя |
create_user | Создание пользователя |
renew_key_challenge | Отправлен челлендж для подтверждения удалённого (по инициативе мобильного приложения) обновления ключевой информации |
renew_key_response | Получен ответ на челлендж для удалённого (по инициативе мобильного приложения) обновления ключевой информации |
export_user_key | Экспорт инициализационной ключевой информации |
update_user_key | Запрос на обновление ключа пользвателя |
remote_update_user_key | Запрос на обновление ключа пользвателя (QR-код + код активации, только через SOAP-API) |
delete_user | Удаление пользователя |
get_user_info | Получение информации о пользователе |
remote_update_set_template | Установка шаблона для удалённого восстановления ключа пользователя |
remote_update_get_available_template | Получение списка доступных шаблонов для удалённого восстановления ключа пользователя |
remote_update_get_requisites | Получение установленных параметров для удалённого восстановления ключевой информации |
get_scoring_settings | Получение параметров конфигурации скоринга |
register_system | Регистрация прикладной системы |
get_system_info | Получение информации о прикладной системе |
change_system | Изменение параметров прикладной системы |
remove_system | Удаление прикладной системы |
system_report | Получение функционального отчёта об использовании системы |
billing_close | Закрытие расчётного периода для постоплатной системы расчётов |
rks_events_data | Получение информации о событиях для указанного пользователя через АРМ РКС (или посредством API на эндпоинт РКС в составе API сервера PC Server) |
rks_transactions_data | Получение информации о транзакции через АРМ РКС (или посредством API на эндпоинт РКС в составе API PC Server) |
rks_check_confirmation | Проверка значения ЭП через АРМ РКС (или посредством API на эндпоинт РКС в составе API PC Server) |
rks_user_details | Получение информации о пользователе через АРМ РКС (или посредством API на эндпоинт РКС в составе API PC Server) |
key_deleted | Ключевая информация удалена с мобильного устройства |
root_detected | Обнаружен root/jailbreak на мобильном устройстве |
high_risk_apps_detected | Обнаружены потенциально вредоносные приложения |
password_incorrect | Введён некорректный пароль доступа к ключевой информации на мобильном устройстве |
c версии 5.2: | |
get_signed_pdf | Получение подписанного PDF |
reassemble_pdf | Добавление ране сформированной ЭП в оригинальный PDF файл |
create_operation | Создание операции |
update_operation | Изменение операции |
get_operation_info | Получение информации об операции |
get_operation_list | Получение списка операций |
get_operation_data_list | Получение данных операции |
operations_process | Обработка операций |
get_event_info | Получение подробной информации для указанного события |
create_certificate | Создание PKI сертификата пользователя Только в 5.2. С 5.3 изменено на create_certificate_request . |
get_certificate_status | Получение статуса сертификата пользователя |
revoke_certificate | Отзыв сертификата пользователя |
rks_check_cms | Проверка значения ЭП CMS через АРМ РКС (или посредством API на эндпоинт РКС в составе API PC Server) |
rks_check_pdf | Проверка значения ЭП PDF через АРМ РКС (или посредством API на эндпоинт РКС в составе API PC Server) |
c версии 5.3: | |
get_events | Получение событий с использованием фильтров при выполнении запроса |
clean_events | Очистка информации из записей о событиях, очищаются поля device_info , event_data , connection_info . |
password_correct | Событие ввода пароля |
password_changed | Событие изменения пароля |
create_certificate_request | Создание запроса на сертификат пользователя |
issue_certificate | Запрос на сертификат пользователя подписан. Выпуск сертификата |
gen_confirm_code | Генерация сервером кода подтверждения на симметричном ключе пользователя |
check_confirm_code | Проверка кода подтверждения выработанного на симметричном ключе пользователя для подтверждаемых без создания транзакции данных |
gen_common_confirm_code | Генерация сервером кода подтверждения на симметричном ключе сервера для подтверждаемых без создания транзакции данных |
check_common_confirm_code | Проверка кода подтверждения выработанного на симметричном ключе сервера для подтверждаемых без создания транзакции данных |
Информация о мобильном устройстве
Сбор информации об устройстве – это возможность, которую может использовать организация, выпустившая ключ.
Флаги, разрешающие сбор информации, устанавливаются для ключа при его выпуске (эта возможность должна быть реализована в прикладной системе).
Состав информации
Собираемую информацию об устройстве можно разбить на две группы:
- Информация, для сбора которой не требуется предоставление дополнительного разрешения приложению;
- Информация, для сбора которой приложению требуется запросить дополнительные разрешения.
Для iOS и Android производится попытка собрать всю доступную информацию. Поля для собираемой информации для обеих платформ одинаковы. В зависимости от того, какая платформа какую информацию отдаёт, они либо заполняются, либо остаются пустыми.
Информация не требующая дополнительных разрешений
При включении опции сбора информации собирается (при наличии технической возможности получения такой информации):
базовая об устройстве:
производитель, модель, версия ОС, часовой пояс, установленные значения языковых параметров устройства, а также сведения об аппаратных составляющих (марки процессора, дисплея и т.д.);
состояние памяти устройства:
установлена, либо нет карта памяти, её объём, объём ОЗУ и встроенной памяти устройства;
информация о приложении (собственно об экземпляре, отправляющем эту информацию):
Название, версия и идентификатор мобильного приложения (BundleID);
информация о Wi-Fi подключении:
название подключённой сети, IP и MAC адрес;
информация о физических сенсорах устройства:
вывод информации о доступных приложению данных физических сенсоров, таких как акселерометр, датчик освещённости и т.д.
Информация, требующая предоставление разрешения
При включении дополнительных двух опций можно включить сбор (при наличии технической возможности получения такой информации):
геоданных устройства (Android и iOS):
значение долготы и широты;
информации о телефоне и SIM-карте (iOS разрешение не запрашивает):
оператор сотовой связи, количество сим-карт, IMSI, IMEI
Пример
Для версий 5.0 - 5.2
{
"device_event_id": "e71426df-be90-408a-bef5-111ffe60c831",
"device_info": {
"app": {
"appName": "PayControl",
"packageName": "org.paycontrol.app",
"appVersionName": "5.0.135-Release",
"appVersionCode": 135
},
"wifi": {
"macAddress": "F6:32:A7:61:24:9D",
"localIp": "192.168.19.173",
"userAgent": "Mozilla\/5.0 (Linux; Android 10; SM-G970F Build\/QP1A.190711.020; wv) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/84.0.4147.125 Mobile Safari\/537.36__Dalvik\/2.1.0 (Linux; U; Android 10; SM-G970F Build\/QP1A.190711.020)",
"SSID": "SafeTech-2-5Ghz"
},
"memory": {
"totalExternalMemorySize": "118032510976",
"totalInternalMemorySize": "118053482496",
"hasExternalSDCard": 1,
"totalRAM": "5524932"
},
"sim": {
"networkCountryIso": "ru",
"phoneType": "GSM",
"simCount": 2,
"simCountryIso": "ru",
"roaming": 0,
"IMSI": "",
"simOperatorName": "Beeline",
"mmsUrl": "http:\/\/wap.samsungmobile.com\/uaprof\/SAMSUNGUAPROF.xml",
"imei": "",
"mmsAgent": "SAMSUNG-ANDROID-MMS\/SM-G970F",
"simSerial": "",
"networkOperatorName": "Beeline"
},
"sensor": {
"minDelay": 2000,
"vendor": "STM",
"name": "LSM6DSO Acceleration Sensor",
"maxRange": 78.453201293945,
"type": 1,
"version": 15932,
"resolution": 0.0023942016996443
},
"location": {
"latitude": "55,7888752",
"accuracy": "96,00",
"longitude": "37,5042244"
},
"device": {
"screenWidth": 1080,
"radioVersion": "G970FXXU8CTG4,G970FXXU8CTG4",
"locale": "ru",
"manufacturer": "samsung",
"buildHost": "21HHAD24",
"buildVersionCodeName": "REL",
"osVersion": "10",
"defaultBrowser": "com.android.chrome",
"bootloader": "G970FXXU8CTG4",
"root": 0,
"fingerprint": "samsung\/beyond0lteser\/beyond0:10\/QP1A.190711.020\/G970FXXU8CTG4:user\/release-keys",
"model": "SM-G970F",
"hardware": "exynos9820",
"product": "beyond0lteser",
"simulator": 0,
"buildBrand": "samsung",
"buildTime": 1594894183000,
"buildUser": "dpi",
"screenHeight": 2119,
"timeZone": "Europe\/Moscow",
"cpu": "BogoMIPS=52.00;CPU implementer=0x53;CPU architecture=8;CPU variant=0x1;CPU revision=0;Features=fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm dcpop;processor=7;CPU part=0x003",
"defaultSms": "com.samsung.android.messaging",
"deviceID": "a450af03e00db165",
"certificates": [
],
"serial": "unknown",
"displayVersion": "QP1A.190711.020.G970FXXU8CTG4",
"name": "SV-SGS10e",
"sdkVersion": 29,
"screenDensity": "xxhdpi",
"device": "beyond0",
"board": "exynos9820",
"releaseBuildVersion": "10"
}
},
"event_id": 8210,
"request_type": "get_transactions",
"user_id": "stage51-7dbe69b2-4bdf-4a4f-a004-58e90131dde2",
"request_hash": "562e21ae186ab3684011f70d23956549bb3af1fcf37d59503b34364749b94814",
"session_id": "e3ef6099-d700-45e0-9988-e77197107030",
"request_hmac": "ae5e6da7628bd95a81543013902bd0bdee25bc6aa64eb0f8c7b857d996dda3a9",
"request_result": 0,
"requester_ip_address": "31.173.87.93,192.168.117.19"
}
Для версии 5.3
Опционально, записи о событиях могут дополняться идентификатором экземпляра, который задаётся через установку параметра pc_instance_name
окружения Java, например -Dpc_instance_name=pcs-node-1
{
"transaction_id": "fc320b42-d6c0-4528-b2ae-f29389dbe8a6",
"request_type": "confirm_transaction",
"pc_instance_name": "pcs-node-1",
"session_id": "cf52588e-9e9b-4730-83bc-88733b314a7e",
"created_at": 1625599693574,
"request_url": "http:\/\/localhost:8080\/pc-api\/ext\/e55d3d79-327e-4c23-b152-967a57258d57\/users\/devapi4postpay-e6c89a0c-7ca5-4d71-a01c-5f1d4b200c16\/transactions\/fc320b42-d6c0-4528-b2ae-f29389dbe8a6\/confirm",
"requester_ip_address": "192.168.9.105, 192.168.8.52,172.19.0.3",
"request_result": 0,
"pc_version": {
"pc_version": "5.3.201-pgsql",
"product": "PC Server",
"pc_api_version": 4
},
"device_event_id": "b06c4b3d-ac42-4445-baf5-58bcb9bb767c",
"device_info": {
"app": {
"appName": "PayControl",
"packageName": "org.paycontrol.app",
"appVersionName": "5.2.197-Release",
"appVersionCode": 197
},
"wifi": {
"macAddress": "",
"localIp": "192.168.9.105",
"userAgent": "Mozilla\/5.0 (Linux; Android 11; SM-G970F Build\/RP1A.200720.012; wv) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/91.0.4472.120 Mobile Safari\/537.36__Dalvik\/2.1.0 (Linux; U; Android 11; SM-G970F Build\/RP1A.200720.012)",
"SSID": ""
},
"memory": {
"totalExternalMemorySize": "118032510976",
"totalInternalMemorySize": "118053482496",
"hasExternalSDCard": 1,
"totalRAM": "5546068"
},
"sim": {
"networkCountryIso": "ru",
"phoneType": "GSM",
"simCount": 2,
"simCountryIso": "ru",
"roaming": 0,
"IMSI": "",
"simOperatorName": "Beeline",
"mmsUrl": "http:\/\/wap.samsungmobile.com\/uaprof\/SAMSUNGUAPROF.xml",
"imei": "",
"mmsAgent": "SAMSUNG-ANDROID-MMS\/SM-G970F",
"simSerial": "",
"networkOperatorName": "Beeline"
},
"sensor": {
"minDelay": 2000,
"vendor": "STM",
"name": "LSM6DSO Acceleration Sensor",
"maxRange": 78.45320129394531,
"type": 1,
"version": 15932,
"resolution": 0.002394201699644327
},
"location": {
"latitude": "55.11000001",
"accuracy": "48.00",
"longitude": "37.2244004"
},
"device": {
"screenWidth": 1080,
"radioVersion": "G970FXXSBFUE6,G970FXXSBFUE6",
"locale": "en",
"manufacturer": "samsung",
"buildHost": "21DJ6552",
"buildVersionCodeName": "REL",
"osVersion": "11",
"defaultBrowser": "",
"bootloader": "G970FXXSBFUE6",
"root": 0,
"fingerprint": "samsung\/beyond0lteser\/beyond0:11\/RP1A.200720.012\/G970FXXSBFUE6:user\/release-keys",
"model": "SM-G970F",
"hardware": "exynos9820",
"product": "beyond0lteser",
"simulator": 0,
"buildBrand": "samsung",
"buildTime": 1621935403000,
"buildUser": "dpi",
"screenHeight": 2119,
"timeZone": "Europe\/Moscow",
"cpu": "BogoMIPS=52.00;CPU implementer=0x53;CPU architecture=8;CPU variant=0x1;CPU revision=0;Features=fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm dcpop;processor=7;CPU part=0x003",
"defaultSms": "com.samsung.android.messaging",
"deviceID": "a450af01e11db222",
"certificates": [],
"serial": "",
"displayVersion": "RP1A.200720.012.G970FXXSBFUE6",
"name": "My-SGS10e",
"sdkVersion": 30,
"screenDensity": "xxhdpi",
"device": "beyond0",
"board": "exynos9820",
"releaseBuildVersion": "11"
}
},
"event_id": 72895,
"system": "1f639fb8-8613-4461-8f14-61a73aced9c3",
"connection_info": {
"destination": {
"port": "8080",
"ip": "127.0.0.1",
"mac": ""
},
"remote": {
"port": "60598",
"ip": "127.0.0.1",
"mac": ""
}
},
"user_id": "stageapi4postpay-c0b9784f-4d21-410c-901d-1e151dea745b",
"request_hash": "8e5c46a112ab4bcfe4623462a08ab4ec7cf0434ba23c76efaccd3bf42fecea73",
"device_time": 1625599692934,
"request_hmac": "e1bf3050e2ca8b676073f4c13928bdac3fc29d759e82aeb905a0cda25d5c7026",
}
Коды ошибок сервисов
Код ошибки | Идентификатор ошибки | HTTP-код | Описание |
---|---|---|---|
0 | NORMAL | 200 | Ошибка отсутствует |
100 | JAVA_INTERNAL_ERROR | 500 | Внутренняя ошибка |
200 | SYSTEM_PROPERTY_ERROR | Ошибка в настройках ИС | |
201 | SYSTEM_ID_IS_NULL | ID системы не задан | |
202 | SYSTEM_ID_IS_WRONG | ID системы неверен | |
203 | SYSTEM_NOT_FOUND | Система не найдена | |
204 | SYSTEM_IS_DELETED | Система удалена | |
205 | SYSTEM_NAME_IS_NULL | Имя системы не задано | |
206 | USER_ID_IS_NULL | ID пользователя не задан | |
207 | USER_ID_PREF_IS_NULL | Префикс ID пользователя не задан | |
208 | USER_NOT_FOUND | Пользователь не найден | |
209 | USER_IS_DELETED | Пользователь удален | |
210 | DS_VERIFY_ERROR | ЭП не верна | |
211 | DS_STRUCT_ERROR | Структура ЭП не верна | |
212 | STORE_TYPE_IS_WRONG | Тип хранилища неверен | |
213 | KEY_CONTAINER_ALIAS_IS_NULL | Alias ключевого контейнера не задан | |
214 | KEY_CONTAINER_NOT_EXISTS | Ключевой контейнер не существует | |
215 | TRANSACTION_DATA_UID_ERROR | Неверные данные транзакции (User ID не совпадает) | |
216 | TRANSACTION_DATA_ERROR | Неверные данные транзакции | |
217 | TRANSACTION_DATA_IS_NULL | Данные транзакции не заданы | |
218 | REPORT_TPL_IS_NULL | Неверный шаблон отчета | |
219 | REQUEST_ERROR | Ошибка в запросе | |
220 | SYSTEM_ID_NOT_UNIQUE | ID системы не уникален | |
221 | REQUEST_SIGNATURE_NOT_VALID | Подпись запроса невалидна | |
222 | SYSTEM_NOT_VALID | Система не является доверенной | |
231 | TRANSACTION_IS_NULL | Транзакция не найдена | |
232 | TRANSACTION_CHECKED | Данные транзакции уже проверены | |
233 | ERROR_PARSE_REGISTER_SYSTEM_INFO | Невозможно распознать запрос на регистрацию системы | |
234 | INCORRECT_USER_TYPE | Некорректный тип пользователя | |
235 | COLLECTION_IS_EMPTY | Пустая коллекция | |
236 | NO_RESULT | Резльтатов нет | |
237 | PIN_IS_EMPTY | Pin-код не задан | |
238 | FPRINT_IS_EMPTY | Отпечаток пользователя не задан | |
239 | OTP_IS_NOT_VALID | Неверный OTP | |
240 | VALID_DATE_EXPIRED | Истек срок регистрации | |
241 | SYSTEM_TYPE_IS_WRONG | Неверный тип системы | |
242 | SPART_LENGTH_IS_WRONG | Неверно задана длина 2-й части ключевой информации | |
243 | DATA_TYPE_IS_WRONG | Неверно задан тип данных | |
244 | INVALID_HMAC | 401 | Код подтвержения неверен |
245 | KEY_INFO_NOT_FOUND | Нет активной ключевой информации | |
246 | WRONG_SYSTEM_TYPE | Неверный тип системы | |
247 | FPRINT_IS_NOT_EMPTY | Отпечаток уже установлен | |
248 | WRONG_AUTH_CODE | 401 | Неверный код аутентификации |
249 | CONFIRM_TYPE_IS_NULL | Не задан тип подтверждения | |
250 | STORE_TYPE_IS_NULL | Не задан тип хранилища | |
251 | DEVICE_TYPE_IS_NULL | Не задан тип устройства | |
252 | TRANSACTION_DATA_TYPE_IS_NULL | Не задан тип данных | |
253 | USER_ID_PREF_TOO_LONG | Префикс ID превышает допустимую длину | |
254 | CONFIRM_CODE_LENGTH_IS_WRONG | 401 | Неверно задана длина кода подтверждения |
255 | CONFIRM_CODE_IS_NULL | Код подтверждения не задан | |
256 | TRANSACTION_ID_IS_NULL | ID транзакции не задан | |
257 | STATUS_LIST_IS_EMPTY | Не задан список статусов | |
258 | DEVICE_ID_IS_NULL | ID устройства не задано | |
259 | DEVICE_TYPE_IS_INCORRECT | Тип устройства неправильный | |
261 | INVALID_OTP | Код подтвержения неверен | |
263 | INVALID_KDF | Неподдерживаемый формат параметра kdfFunc | |
264 | PIN_LENGTH_IS_WRONG | Неверно задана длина пин-кода | |
265 | PUSH_ID_IS_NULL | Идентификатор уведомления не задан | |
267 | TRANSACTION_STATUS_INVALID | Статус транзакции неверный | |
268 | AUTH_CODE_IS_NULL | Код аутентификации не задан | |
269 | STATUS_LIST_IS_INCORRECT | Ошибка в списке статусов | |
270 | DECLINE_REASON_IS_NULL | Причина отмены не передана | |
271 | TRANSACTION_IS_NOT_UNIQUE | Транзакция с таким id уже существует | |
272 | BILL_DATE_CORRUPTED | Дата закрытия биллингового периода сохранена неверно | |
273 | USER_BILL_DATE_CORRUPTED | Дата закрытия биллингового периода пользователя сохранена неверно | |
274 | TRANSACTION_IS_DELETED | Транзакция помечена как удаленная | |
275 | BILL_REQUEST_ALREADY_PROCESSED | Биллинг на данную дату уже закрыт | |
276 | PUBKEY_IS_EMPTY | Открытый ключ отсутствует | |
277 | PUBKEY_IS_NOT_EMPTY | Открытый ключ уже установлен | |
278 | SIGNATURE_IS_INVALID | Подпись неверна | |
279 | SIGNATURE_IS_NULL | Подпись не задана | |
280 | SIGNATURE_AND_CONFIRM_CODE_ARE_NULL | Подпись или код подтверждения должны быть заданы | |
281 | TRANSACTION_EXPIRED | Вышло время жизни транзакции | |
282 | JSON_SCHEME_NOT_SUPPORTED | Версия JSON-запроса не поддерживается | |
283 | JSON_REQUEST_INCORRECT | JSON-запрос не соответствует схеме | |
284 | LICENSE_UPDATE_ERROR | Ошибка загрузки лицензии | |
285 | LICENSE_EXPIRED | Срок действия лицензии истёк | |
286 | LICENSE_USER_COUNT_EXCEEDED | Количество пользователей в лицензии достигнуто | |
287 | BILLING_TYPE_CORRUPTED | Тип лицензирования был изменен | |
288 | HTTP_AUTH_CODE_INVALID | 401 | Авторизация по HTTP-заголовку неуспешна |
289 | NOT_SUPPORTED | 404 | Метод не поддерживается |
290 | EXT_AUTH_TEMPLATE_NOT_FOUND | 401 | Шаблон для дополнительной аутентификации не найден |
291 | EXT_AUTH_FAILED | 401 | Дополнительная аутентификация неуспешна |
292 | EXT_AUTH_TYPE_NOT_SUPPORTED | Тип дополнительной аутентификации не поддерживается | |
293 | EXT_AUTH_NEEDED | Необходима внешняя аутентификация | |
294 | USER_IS_BLOCKED | Пользователь заблокирован | |
295 | KEY_EXPIRED | Срок действия ключа истёк | |
296 | LICENSE_NOT_FOUND | Лицензия не найдена | |
297 | PUSH_NOT_FOUND | Идентификатор уведомления не найден | |
298 | SCORING_SETTINGS_IS_NULL | Данные для скоринга должны быть установлены | |
299 | AUTOSING_SIGNATURE_IS_INVALID | Подпись неверна | |
300 | SERVER_SCORING_SETTINGS_INCORRECT | Настройки скоринга сервера неверны | |
301 | SCORING_FAILED | Ошибка получения скоринга | |
302 | HIGH_SCORING_RISK_LEVEL | Уровень риска слишком высок | |
304 | AUTOSIGN_FAILED | Ошибка автоподписи | |
305 | AUTOSIGN_NOT_ALLOWED | Автоподпись запрещена | |
306 | ATTEMPT_ID_IS_NULL | ID попытки не задан | |
307 | FLEXIBLE_LICENSE_ERROR | Ошибка flexible лицензии | |
309 | LICENSE_ERROR | Ошибка flexible лицензии | |
308 | UNSUPPORTED_BILLING_TYPE | Неподдерживаемый тип биллинга | |
310 | OPERATION_NOT_EXISTS | Операция не существует | |
311 | TRANSACTION_IS_NOT_IN_OPERATION | Транзакция не включена в операцию | |
312 | OPERATION_STATUS_INVALID | Статус операции невалидный | |
313 | CREATE_OPERATION_ERROR | Ошибка при создании операции | |
314 | REMOTE_UPDATE_ERROR | Ошибка обновления ключей по дополнительной аутентификации | |
315 | REMOTE_UPDATE_ERROR_BLOCK | Ошибка обновления ключей по дополнительной аутентификации, лимит попыток исчерпан, пользователь заблокирован | |
316 | REMOTE_UPDATE_DISABLED | Обновление ключа по дополнительной аутентификации отключено | |
317 | OPERATION_EXPIRED | Ошибка при создании операции | |
318 | DN_IS_NULL | Объект Distinguished Name должен быть установлен | |
319 | CERT_REQUEST_PARAMS_IS_NULL | Объект Certificate Request должен быть установлен | |
320 | CERT_ISSUE_ERROR | Ошибка выпуска сертификата | |
321 | NO_CERT_REQUEST | Запрос на сертификат или сертификат отсутствует | |
322 | NO_CERT | Сертификат отсутствует | |
323 | NO_PKI_SETTINGS_DEFINED | Файл настроек PKI не задан | |
324 | CAN_NOT_USE_CERTIFICATE_CHAIN | Не удается построить цепочку сертификации | |
325 | CERT_STATUS_INVALID | Неверный статус сертификата | |
326 | CERT_REVOKE_ERROR | Ошибка отзыва сертификата | |
327 | CERT_DOES_NOT_MATCH | Сертификат не совпадает | |
328 | INCORRECT_TRANSACTION_TYPE | Некорректный тип транзакции | |
329 | INCORRECT_ACCESS_PERMISSIONS | Некорректные права доступа к файлу | |
330 | INCORRECT_PDF_DATA | Некорректный pdf-file | |
331 | PDF_DATA_NOT_COMPLIES_CMS | Двоичные данные pdf не соответствуют CMS транзакции | |
333 | URL_SCHEME_NOT_DEFINED | URL-схема не задана |
Темы оформления мобильного приложения
Структура архива темы
Файл темы оформления должен соответстововать идентификатору прикладной системы + расширение .zip
.
Состав файла:
- theme.json — Описание темы
- image_light.png — Кастомная картинка для светлого режима приложения
- image_dark.png — Кастомная картинка для тёмного режима приложения
Структура файла theme.json
{
"colors": {
"accentColor": {
"light": "#006BFF",
"dark": "#2F98FF"
},
"textButton": {
"light": "#006BFF",
"dark": "#2F98FF"
},
"accentText": {
"light": "#006BFF",
"dark": "#2F98FF"
},
"declineButton": {
"light": "#CFD4DE",
"dark": "#3C4048"
},
"barButton": {
"light": "#A0AABD",
"dark": "#6D7586"
},
"error": {
"light": "#E53D00",
"dark": "#F95E25"
},
"success": {
"light": "#006BFF",
"dark": "#2F98FF"
}
},
"icon": {
"light": "icon_light.png",
"dark": "icon_dark.png"
},
"image": {
"light": "icon_light.png",
"dark": "icon_dark.png"
},
"about": "https://safe-tech.ru/about",
"feedback": "info@safe-tech.ru"
}
Цвета (Colors)
Цвета описываются в формате #RRGGBB для светлой и тёмной темы по-отдельности.
Name | Где встречается |
---|---|
accentColor | Цвет всех основных кнопок, подсветка полей |
textButton | Цвет текстовых кнопок. Например, ссылки в информации о ключе |
accentText | Цвет статусов. Например, «доступно 2 операции» |
declineButton | Кнопка «Отклонить» |
barButton | Цвет иконок в AppBar'е / NavigationBar'е |
success | Цвет успешных статусов. Например, фон круга в модальном окне с надписью «Готово». |
Иконки/логотипы
В теме могут содержаться логотип или иконка. Необходимо указать название картинки для светлой и тёмной темы. Может использоваться всего одна картинка, указав одно и тоже название для light
и dark
.
В первую очередь приложение ищет большой логотип по ключу image
. Если её нет, то далее приложение ищет иконку по ключу icon
. Если и её нет — то будет использоваться дефолтная иконка.
Т.е. если будут указаны оба ключа, то приоритет у image
.
Если логотип в приложении не отображается, сверьте название картинки в архиве с тем, что указано в ключе.
Логотип
Если необходимо использование логотипа, то необходимо указать ключ image
с названием картинок для светлой и тёмной тем.
Область, которую будет занимать логотип, имеет динамическую ширину. Картинка будет размещена по центру и сжата по высоте.
Рекомендуемый размер логотипа — не менее 792x396
, соотношение сторон 2:1
Иконка
Если необходимо использование небольшой иконки, то необходимо указать ключ icon
с названием картинок для светлой и тёмной тем.
Иконка будет размещена в квадратной области.
Рекомендуемое разрешение 80x80
, соотношение сторон 1:1
.
"О приложении" и "Обратная связь"
В тему можно добавить дополнительные ключи — about
и feedback
. Они будут отображены как текстовые ссылки в информации о ключе.
Name | Где встречается |
---|---|
about | Ссылка на адрес сайта |
feedback | Адрес эл. почты для обратной связи |
WildFly
Настройка
Запуск CLI
Подключение к консоли:
sudo /opt/wildfly/bin/jboss-cli.sh --connect
Выполнение команд в неинтерактивном режиме:
sudo /opt/wildfly/bin/jboss-cli.sh --connect --commands=ls\ deployment
Удаление настроек по умолчанию
При конфигурировании Wildfly можно (при переводе системы в промышленную эксплуатацию — рекомендуется) удалить пример источника данных и страницу-приветствие.
С помощью CLI
data-source remove --name=ExampleDS
/subsystem=ee/service=default-bindings:remove()
reload
/subsystem=datasources/jdbc-driver=h2:remove
/subsystem=undertow/server=default-server/host=default-host/location=\/:remove()
/subsystem=undertow/configuration=handler:remove()
Путём конфигурирования файла standalone.xml
Вручную это можно сделать убрав (либо закомментировав) следующие объекты:
<datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
<connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
<driver>h2</driver>
<security>
<user-name>sa</user-name>
<password>sa</password>
</security>
</datasource>
<driver name="h2" module="com.h2database.h2">
<xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
</driver>
<default-bindings context-service="java:jboss/ee/concurrency/context/default" datasource="java:jboss/datasources/ExampleDS" managed-executor-service="java:jboss/ee/concurrency/executor/default" managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default" managed-thread-factory="java:jboss/ee/concurrency/factory/default"/>
<location name="/" handler="welcome-content"/>
<handlers>
<file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
</handlers>
Добавление источников данных (БД), на примере PostgreSQL
module add --name=org.postgresql --resources=/opt/paycontrol/postgresql-42.2.5.jar --dependencies=javax.api,javax.transaction.api,javax.servlet.api
/subsystem=datasources/jdbc-driver=postgres:add(driver-name="postgres",driver-module-name="org.postgresql",driver-class-name=org.postgresql.Driver)
data-source add --jndi-name=java:jboss/datasources/PayControlDS --name=PayControlDS --connection-url=jdbc:postgresql://localhost:5432/pcs --driver-name=postgres --user-name=pcuser --password=XXXXXXXX
data-source add --jndi-name=java:jboss/datasources/PayControlISDS --name=PayControlISDS --connection-url=jdbc:postgresql://localhost:5432/pcis --driver-name=postgres --user-name=pcuser --password=XXXXXXXX
Формат параметра Connection URL для разных типов СУБД
Datasource | Connection URL |
---|---|
IBM DB2 | jdbc:db2://SERVER_NAME:PORT/DATABASE_NAME |
MariaDB | jdbc:mariadb://SERVER_NAME:PORT/DATABASE_NAME |
Microsoft SQL Server | jdbc:sqlserver://SERVER_NAME:PORT;DatabaseName=DATABASE_NAME |
MySQL | jdbc:mysql://SERVER_NAME:PORT/DATABASE_NAME |
Oracle | jdbc:oracle:thin:@SERVER_NAME:PORT:ORACLE_SID |
PostgreSQL | jdbc:postgresql://SERVER_NAME:PORT/DATABASE_NAME |
Sybase | jdbc:sybase:Tds:SERVER_NAME:PORT/DATABASE_NAME |
Валидация подключения
PostgreSQL
<validation>
<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"></valid-connection-checker>
<exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"></exception-sorter>
</validation>
Oracle
<validation>
<check-valid-connection-sql>select 1 from dual</check-valid-connection-sql>
<validate-on-match>false</validate-on-match>
<background-validation>true</background-validation>
<background-validation-millis>10000</background-validation-millis>
</validation>
MS SQL
<validation>
<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker"></valid-connection-checker>
</validation>
Установка определённых стандартов защиты и алгоритмов
HTTPS
Для выбора стандарта защиты HTTPS, только, например, TLS 1.2, нужно в объект https-listener
объекта <subsystem xmlns="urn:jboss:domain:undertow:X.X">
добавить
enabled-protocols="TLSv1.2"
Для выбора определённых криптографических алгоритмов, необходимо их указать в объекте https-listener
объекта <subsystem xmlns="urn:jboss:domain:undertow:X.X">
. Например, для запрета режимов работы без использования алгоритмов Диффи-Хеллмана, нужно добавить
enabled-cipher-suites="ALL:!kRSA"
Пример:
<subsystem xmlns="urn:jboss:domain:undertow:1.2">
<server name="default-server">
<https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true" enabled-cipher-suites="ALL:!kRSA" enabled-protocols="TLSv1.2"/>
</server>
</subsystem>
https://security.stackexchange.com/questions/145855/how-to-enforce-perfect-forward-secrecy-using-jvm-properties
https://www.openssl.org/docs/manmaster/man1/ciphers.html
Включение дополнительных заголовков
Для включения дополнительных HTTP заголовков необходимо в файл
- Linux:
/opt/wildfly/standalone/configuration/standalone.xml
- Windows:
C:\wildfly\standalone\configuration\standalone.xml
добавить фильтры в раздел
<subsystem xmlns="urn:jboss:domain:undertow:X.X">
добавив блок (при его отсутствии)<filters></filters>
следующего содержания:<filters> <response-header name="transport-security" header-name="Strict-Transport-Security" header-value="max-age=31536000"/> <response-header name="x-frame-options" header-name="X-Frame-Options" header-value="DENY"/> <response-header name="x-content-type-options" header-name="X-Content-Type-Options" header-value="nosniff"/> <response-header name="Content-Security-Policy" header-name="Content-Security-Policy" header-value="default-src 'self'"/> </filters>
добавить ссылки на эти фильтры в раздел
<subsystem xmlns="urn:jboss:domain:undertow:X.X">
в<server name="default-server">
в<host name="default-host" alias="localhost">
включив следующие строки:<filter-ref name="transport-security"/> <filter-ref name="x-frame-options"/> <filter-ref name="x-content-type-options"/> <filter-ref name="Content-Security-Policy"/>
Пример:
<subsystem xmlns="urn:jboss:domain:undertow:11.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other">
<buffer-cache name="default"/>
<server name="default-server">
<http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>
<https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true" enabled-cipher-suites="ALL:!kRSA" enabled-protocols="TLSv1.2"/>
<host name="default-host" alias="localhost">
<http-invoker security-realm="ApplicationRealm"/>
<filter-ref name="transport-security"/>
<filter-ref name="x-frame-options"/>
<filter-ref name="x-content-type-options"/>
<filter-ref name="Content-Security-Policy"/>
</host>
</server>
<servlet-container name="default">
<jsp-config/>
<websockets/>
</servlet-container>
<filters>
<response-header name="transport-security" header-name="Strict-Transport-Security" header-value="max-age=31536000"/>
<response-header name="x-frame-options" header-name="X-Frame-Options" header-value="DENY"/>
<response-header name="x-content-type-options" header-name="X-Content-Type-Options" header-value="nosniff"/>
<response-header name="Content-Security-Policy" header-name="Content-Security-Policy" header-value="default-src 'self'"/>
</filters>
</subsystem>
Изменение номера порта
Для изменения номера порта необходимо в файле /opt/wildfly/standalone/configuration/standalone.xml (Linux) или в C:\wildfly\standalone\configuration\standalone.xml (Windows), в блоке
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
в нужном (для http, либо https) параметре
<socket-binding name="http" port="${jboss.http.port:8080}"/>
<socket-binding name="https" port="${jboss.https.port:8443}"/>
изменить номер используемого порта.
После изменения номера порта, службу WildFly необходимо перезапустить.
Приведённые ниже примеры описаны для протокола HTTP. При использовании HTTPS, необходимо также скорректировать название используемого протокола в адресе подключения.
Изменение порта PC Server
При изменении порта для подключения к PC Server, необходимо:
- установить новый порт для обращения к PC в настройках прикладной системы;
изменить номер порта в настройках PC External. Для изменения номера порта для обращения к PC Server, в настройках PC External в файле /opt/wildfly/bin/standalone.conf (Linux) или C:\opt\wildfly\bin\standalone.conf.bat (Windows), в строке
JAVA_OPTS="$JAVA_OPTS -Dpc_url=http[s]://<IP или DNS-имя>[:PORT]/pc-api/ -Duser.language=ru -Dpaycontrol.locale=ru"
в параметре
-Dpc_url=http[s]://<IP или DNS-имя>[:PORT]/pc-api/
установить новое значение[PORT]
.
Изменение порта PC Pusher
Для изменения порта для подключения к PC Pusher необходимо в БД PC Server выполнить следующий запрос:
update pc_system set pc_is_internal_url='http[s]://<IP или DNS-имя>[:PORT]/pc-pusher-api/' where systemid='XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX';
где
<HOSTNASME>
- имя хоста PC Pusher;<PORT>
новое значение порта;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
- UUID идентификатор прикладной системы.
Допускается выполнять запрос к БД PC Server на обновление адреса PC Pusher без указания systemid, в случае, если подключена только одна прикладная система, или необходимо обновить адрес PC Pusher для всех прикладных систем.
После изменения номера порта, службу wildfly необходимо перезапустить.
Изменение порта PC External
При изменении порта PC External необходимо в БД PC Server выполнить следующий запрос:
update pc_system set pc_is_external_url='http://<HOSTNASME>:<PORT>/PayControl-interaction-rest/' where systemid='XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX';
где
<HOSTNASME>
- имя хоста PC External, используемое мобильными устройствами для доступа к серверу PC;<PORT>
новое значение порта;X
XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX` - UUID идентификатор прикладной системы.
Допускается выполнять запрос к БД PC Server на обновление адреса PC External без указания systemid, в случае, если подключена только одна прикладная система, или необходимо обновить адрес PC External для всех прикладных систем.
После изменения номера порта, службу wildfly необходимо перезапустить.
Установка имени хоста для публикации WSDL-схемы
Актуально для версии PC v.3.x, в случае, если фактическое имя хоста, по которому доступна WSDL-схема отличается от определяемого WildFly'ем имени.
/subsystem=webservices:write-attribute\(name=wsdl-host,value=docker.loc\)
Журналирование
Доступ к данным журнала
Журнал работы сервера PC записываются общий лог функционирования Wildfly.
Файлы журналов за текущий день доступны по следующему пути:
Linux:
/opt/wildfly/standalone/log/server.log
Windows:
C:\wildfly\standalone\log\server.log
Для просмотра журнала за другие дни, нужно добавить к имени файла требуемую дату в формате server.log.YYYY-MM-DD
Направление логов Wildfly в Kafka
Исходник https://developer.jboss.org/docs/DOC-56423. Основное отличие - добавление <module name="com.fasterxml.jackson.core.jackson-databind"/>
в зависимости модуля org.apache.kafka.clients
.
Модули
Файлы модулей можно загрузить с https://mvnrepository.com/
org.apache.kafka.clients
Создать файл /opt/wildfly/modules/system/layers/base/org/apache/kafka/clients/main/module.xml
с содержанием
<?xml version="1.0" encoding="UTF-8"?>
<module name="org.apache.kafka.clients" xmlns="urn:jboss:module:1.8">
<resources>
<resource-root path="kafka-clients-2.6.0.jar"/>
<resource-root path="snappy-java-1.1.8.2.jar"/>
<resource-root path="lz4-java-1.7.1.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="org.slf4j"/>
<module name="com.fasterxml.jackson.core.jackson-databind"/>
</dependencies>
</module>
и добавить в директорию указанные в блоке resources
файлы.
org.apache.kafka.log4jappender
Создать файл /opt/wildfly/modules/system/layers/base/org/apache/kafka/log4jappender/main/module.xml
с содержанием
<?xml version="1.0" encoding="UTF-8"?>
<module name="org.apache.kafka.log4jappender" xmlns="urn:jboss:module:1.8">
<resources>
<resource-root path="kafka-log4j-appender-2.6.0.jar"/>
<resource-root path="slf4j-log4j12-1.7.30.jar"/>
</resources>
<dependencies>
<module name="org.slf4j"/>
<module name="org.apache.kafka.clients" />
<module name="org.jboss.log4j.logmanager" />
</dependencies>
</module>
и добавить в директорию указанные в блоке resources
файлы.
org.apache.log4j
Добавить модуль log4jappender в качестве зависимости в существующий org.apache.log4j модуль:
<module name="org.apache.log4j" xmlns="urn:jboss:module:1.6">
...
<dependencies>
...
<module name="org.apache.kafka.log4jappender" export="true"/>
</dependencies>
</module>
org.jboss.as.standalone
Указать в имеющемся модуле org.jboss.as.standalone в качестве зависимости модуль org.apache.kafka.clients.
<module name="org.jboss.as.standalone" xmlns="urn:jboss:module:1.6">
...
<dependencies>
...
<module name="org.apache.kafka.clients" />
</dependencies>
</module>
Хэндлеры
Необходимо добавить перечисленные ниже хэндлеры в файл standalone.xml в блок <subsystem xmlns="urn:jboss:domain:logging:8.0">
kafka
<custom-handler name="kafka" class="org.apache.kafka.log4jappender.KafkaLog4jAppender" module="org.apache.log4j">
<level name="INFO"/>
<formatter>
<named-formatter name="PATTERN"/>
</formatter>
<properties>
<property name="brokerList" value="localhost:9092"/>
<property name="topic" value="out-topic"/>
</properties>
</custom-handler>
async-kafka-wrapper
<async-handler name="async-kafka-wrapper">
<level name="ALL"/>
<queue-length value="1024"/>
<overflow-action value="block"/>
<subhandlers>
<handler name="kafka"/>
</subhandlers>
</async-handler>
Включение хэндлера
В блок <handlers>
добавить <handler name="async-kafka-wrapper"/>
Включение журналирования SOAP-вызовов
Актуально для версии PC v.3.x.
Для включения расширенного логирования необходимо:
- Остановить службу wildfly.
Добавить после блока
<extensions> ... </extensions>
в файл- Linux:
/opt/wildfly/standalone/configuration/standalone.xml
- Windows:
C:\wildfly\standalone\configuration\standalone.xml
блок:
<system-properties> <property name="org.apache.cxf.logging.enabled" value="pretty"/> </system-properties>
- Linux:
Запустить службу wildfly
Проблемы и способы их устранения
Очень медленный старт через standalone.sh (каждый этап скрипта запуска - с большими задержками). Система отправляет сигнал на остановку сервиса
Вероятная проблема - неверные настройки DNS сервера.
Решение:Необходимо скорректировать настройки DNS.
Проблема обнаружилась 2018-07-27 при развёртывании у заказчика.
Не происходит «биндинг» IP-адреса адаптера
Вероятная проблема - отсутствие PTR-записи на DNS-сервере, или неправильная работа службы DNS.
Решение: Добавить в файл opt/wildfly/bin/standalone.conf (Linux) или C:\opt\wildfly\bin\standalone.conf.bat (Windows), в переменную JAVA_OPTS параметр -Djboss.bind.address=0.0.0.0
Проблема проявилась на тестовом Windows-сервере
Частое появление WARNING в логе
Предупреждения в логе вида:
WARNING [org.apache.cxf.phase.PhaseInterceptorChain] (default task-1) Interceptor for {http://ws.safetech.ru/PayControlV3/}PayControlServiceV3 has thrown exception, unwinding now: org.apache.cxf.binding.soap.SoapFault: Error writing to XMLStreamWriter.
Caused by: com.ctc.wstx.exc.WstxIOException: UT010029: Stream is closed
Caused by: java.io.IOException: UT010029: Stream is closed
WARNING [org.apache.cxf.phase.PhaseInterceptorChain] (default task-1) Interceptor for {http://ws.safetech.ru/PayControlV3/}PayControlServiceV3 has thrown exception, unwinding now: org.apache.cxf.interceptor.Fault: Could not send Message.
Caused by: java.io.IOException: Broken pipe
Могут быть вызваны системой мониторинга, которая для проверки того, что сервер доступен, устанавливает соединение и обрывает его получив лишь только header.
Для отключения преждений о непредвиденном закрытии соединения необходимо в файл /opt/wildfly/standalone/configuration/standalone.xml в блок
<profile>
<subsystem xmlns="urn:jboss:domain:logging:X.X">
...
</subsystem>
</profile>
добавить:
<!-- to prevent warnings on unsuspicious connection close -->
<logger category="org.apache.cxf.phase.PhaseInterceptorChain">
<level name="ERROR"/>
</logger>
INFO: Disabling contextual LOB creation as createClob() method threw error
Иногда смущает появление в журнале события, из-за присутствия в его составе слова "error":
INFO [org.hibernate.engine.jdbc.env.internal.LobCreatorBuilderImpl] (ServerService Thread Pool -- 64) HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException
Для отключения этого сообщения необходимо установить hibernate.temp.use_jdbc_metadata_defaults=false
в файл persistence.xml, располагающийся внутри модуля сервера следующим образом:
<properties>
...
<property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"/>
...
</properties>