<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://repo.paycontrol.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=A.bursakov</id>
	<title>PayControl Wiki - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://repo.paycontrol.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=A.bursakov"/>
	<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/A.bursakov"/>
	<updated>2026-06-03T15:49:43Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_PayControl_%D1%81_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_5_%D0%BD%D0%B0_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8E_6&amp;diff=884</id>
		<title>Обновление PayControl с версии 5 на версию 6</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_PayControl_%D1%81_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_5_%D0%BD%D0%B0_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8E_6&amp;diff=884"/>
		<updated>2026-04-29T13:38:21Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: /* Изменения в БД */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
= Обновление Java =&lt;br /&gt;
&lt;br /&gt;
Перед обновлением компонентов PC &#039;&#039;&#039;требуется&#039;&#039;&#039; остановить Wildfly и обновить Java до версии 17. Версия 11 больше не поддерживается.&lt;br /&gt;
&lt;br /&gt;
При установке Java новой версии, старая версия не удаляется, и PC может продолжить работать на версии 11, что приведёт к ошибкам. &lt;br /&gt;
&lt;br /&gt;
Для того чтобы компоненты работали под Java 17, необходимо либо удалить неактуальную версию Java, либо выбрать необходимую версию с помощью:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sudo update-alternatives --config java&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Изменения в БД =&lt;br /&gt;
&lt;br /&gt;
Перед обновлением настоятельно рекомендуем также выполнить резервное копирование баз данных PC.&lt;br /&gt;
&lt;br /&gt;
== Запрос на регистрацию и лицензия ==&lt;br /&gt;
&lt;br /&gt;
=== Получение нового запроса и лицензии ===&lt;br /&gt;
&lt;br /&gt;
Для получения нового запроса на регистрацию и лицензии обратитесь в компанию Сэйфтек.&lt;br /&gt;
&lt;br /&gt;
=== Замена запроса в БД ===&lt;br /&gt;
&lt;br /&gt;
В приведённом ниже запросе необходимо:&lt;br /&gt;
&lt;br /&gt;
* заменить &amp;lt;code&amp;gt;%SYSTEMID%&amp;lt;/code&amp;gt; на реальное значение systemid зарегистрированное для Вашей прикладной системы. Обратите внимание, что знаки процента &#039;&#039;&#039;нужно удалить&#039;&#039;&#039;;&lt;br /&gt;
* заменить &amp;lt;code&amp;gt;%REGISTERREQUEST%&amp;lt;/code&amp;gt; на реальные данные запроса, созданного для Вашей прикладной системы. Обратите внимание, что знаки процента &#039;&#039;&#039;нужно удалить&#039;&#039;&#039;;&lt;br /&gt;
** пример нужных данных запроса &amp;lt;code&amp;gt;eyJyZXF1ZXN0Ijp7InFyVVJMU2NoZW1lIjoiIiwiYmlsbGluZ1R5cGUiOjIsImludGVyYWN0aW9uRXh0ZXJuYWxVUkwiOiJodHRwczovL3BheWNvbnRyb2wuZXhhbXBsZS5jb20vcGMtY2xpZW50LWFwaS8iLCJpbnRlcmFjd----m1VRERpZndVU3VOS3BoYmV4emsifQ==&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
update pc_system_params set register_request=&#039;%REGISTERREQUEST%&#039; where systemid=&#039;%SYSTEMID%&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Замена лицензии(при наличии) в БД ===&lt;br /&gt;
&lt;br /&gt;
В приведённом ниже запросе необходимо:&lt;br /&gt;
&lt;br /&gt;
* заменить &amp;lt;code&amp;gt;%SYSTEMID%&amp;lt;/code&amp;gt; на реальное значение systemid зарегистрированное для Вашей прикладной системы. Обратите внимание, что знаки процента &#039;&#039;&#039;нужно удалить&#039;&#039;&#039;;&lt;br /&gt;
* заменить &amp;lt;code&amp;gt;%LICENSE%&amp;lt;/code&amp;gt; на реальные данные лицензии, созданной для Вашей прикладной системы. Обратите внимание, что знаки процента &#039;&#039;&#039;нужно удалить&#039;&#039;&#039;;&lt;br /&gt;
** пример нужных данных запроса &amp;lt;code&amp;gt;{&amp;quot;request&amp;quot;:{&amp;quot;systemId&amp;quot;:&amp;quot;99000000-e00e-0ad0-00ab-f00f0000a0b0&amp;quot;,&amp;quot;dateTime&amp;quot;:1700000000000,&amp;quot;usersCount&amp;quot;:100,&amp;quot;licenseID&amp;quot;:&amp;quot;0000e000-0000-0000-b0ec-c0f0000000f0&amp;quot;,&amp;quot;type&amp;quot;:2,&amp;quot;features&amp;quot;:{&amp;quot;gost_crypto&amp;quot;:false,&amp;quot;pki&amp;quot;:{&amp;quot;openssl&amp;quot;:false},&amp;quot;binary_data&amp;quot;:{&amp;quot;raw&amp;quot;:true,&amp;quot;pdf&amp;quot;:true},&amp;quot;server_signer&amp;quot;:false,&amp;quot;rks&amp;quot;:false}},&amp;quot;signature&amp;quot;:&amp;quot;MEYCIQDy7OUT6iiligbiugYcpK9fjkU/GDRIUiJtB+UcHppVwIhAKzS+EcktxyRikvqEThPyo1jHlPuAfgxW+EEo5gioW7Y&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
update pc_system_params set license=&#039;%LICENSE%&#039; where systemid=&#039;%SYSTEMID%&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Обновление модулей PC =&lt;br /&gt;
&lt;br /&gt;
Перед обновлением настоятельно рекомендуем также выполнить резервное копирование баз данных PC.&lt;br /&gt;
&lt;br /&gt;
Для установки PC 6-й версии воспользуйтесь инструкцией по ссылке - https://repo.paycontrol.org/server/doc/latest/pc-install-guide/ru/#перед-установкой&lt;br /&gt;
&lt;br /&gt;
После обновления &#039;&#039;&#039;необходимо&#039;&#039;&#039; отключить автозапуск Wildfly.&lt;br /&gt;
&lt;br /&gt;
= Документация по работе с PC 6-й версии =&lt;br /&gt;
&lt;br /&gt;
* Вся документация - https://repo.paycontrol.org/&lt;br /&gt;
&lt;br /&gt;
* Руководство администратора - https://repo.paycontrol.org/server/doc/latest/pc-admin-guide/ru/&lt;br /&gt;
&lt;br /&gt;
* Справочное руководство - https://repo.paycontrol.org/server/doc/latest/pc-reference-guide/ru/&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_PayControl_%D1%81_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_5_%D0%BD%D0%B0_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8E_6&amp;diff=883</id>
		<title>Обновление PayControl с версии 5 на версию 6</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_PayControl_%D1%81_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_5_%D0%BD%D0%B0_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8E_6&amp;diff=883"/>
		<updated>2026-04-29T13:38:13Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: /* Изменения в БД */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
= Обновление Java =&lt;br /&gt;
&lt;br /&gt;
Перед обновлением компонентов PC &#039;&#039;&#039;требуется&#039;&#039;&#039; остановить Wildfly и обновить Java до версии 17. Версия 11 больше не поддерживается.&lt;br /&gt;
&lt;br /&gt;
При установке Java новой версии, старая версия не удаляется, и PC может продолжить работать на версии 11, что приведёт к ошибкам. &lt;br /&gt;
&lt;br /&gt;
Для того чтобы компоненты работали под Java 17, необходимо либо удалить неактуальную версию Java, либо выбрать необходимую версию с помощью:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sudo update-alternatives --config java&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Изменения в БД =&lt;br /&gt;
&lt;br /&gt;
Перед обновлением настоятельно рекомендуем также выполнить резервное копирование баз данных PC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Запрос на регистрацию и лицензия ==&lt;br /&gt;
&lt;br /&gt;
=== Получение нового запроса и лицензии ===&lt;br /&gt;
&lt;br /&gt;
Для получения нового запроса на регистрацию и лицензии обратитесь в компанию Сэйфтек.&lt;br /&gt;
&lt;br /&gt;
=== Замена запроса в БД ===&lt;br /&gt;
&lt;br /&gt;
В приведённом ниже запросе необходимо:&lt;br /&gt;
&lt;br /&gt;
* заменить &amp;lt;code&amp;gt;%SYSTEMID%&amp;lt;/code&amp;gt; на реальное значение systemid зарегистрированное для Вашей прикладной системы. Обратите внимание, что знаки процента &#039;&#039;&#039;нужно удалить&#039;&#039;&#039;;&lt;br /&gt;
* заменить &amp;lt;code&amp;gt;%REGISTERREQUEST%&amp;lt;/code&amp;gt; на реальные данные запроса, созданного для Вашей прикладной системы. Обратите внимание, что знаки процента &#039;&#039;&#039;нужно удалить&#039;&#039;&#039;;&lt;br /&gt;
** пример нужных данных запроса &amp;lt;code&amp;gt;eyJyZXF1ZXN0Ijp7InFyVVJMU2NoZW1lIjoiIiwiYmlsbGluZ1R5cGUiOjIsImludGVyYWN0aW9uRXh0ZXJuYWxVUkwiOiJodHRwczovL3BheWNvbnRyb2wuZXhhbXBsZS5jb20vcGMtY2xpZW50LWFwaS8iLCJpbnRlcmFjd----m1VRERpZndVU3VOS3BoYmV4emsifQ==&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
update pc_system_params set register_request=&#039;%REGISTERREQUEST%&#039; where systemid=&#039;%SYSTEMID%&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Замена лицензии(при наличии) в БД ===&lt;br /&gt;
&lt;br /&gt;
В приведённом ниже запросе необходимо:&lt;br /&gt;
&lt;br /&gt;
* заменить &amp;lt;code&amp;gt;%SYSTEMID%&amp;lt;/code&amp;gt; на реальное значение systemid зарегистрированное для Вашей прикладной системы. Обратите внимание, что знаки процента &#039;&#039;&#039;нужно удалить&#039;&#039;&#039;;&lt;br /&gt;
* заменить &amp;lt;code&amp;gt;%LICENSE%&amp;lt;/code&amp;gt; на реальные данные лицензии, созданной для Вашей прикладной системы. Обратите внимание, что знаки процента &#039;&#039;&#039;нужно удалить&#039;&#039;&#039;;&lt;br /&gt;
** пример нужных данных запроса &amp;lt;code&amp;gt;{&amp;quot;request&amp;quot;:{&amp;quot;systemId&amp;quot;:&amp;quot;99000000-e00e-0ad0-00ab-f00f0000a0b0&amp;quot;,&amp;quot;dateTime&amp;quot;:1700000000000,&amp;quot;usersCount&amp;quot;:100,&amp;quot;licenseID&amp;quot;:&amp;quot;0000e000-0000-0000-b0ec-c0f0000000f0&amp;quot;,&amp;quot;type&amp;quot;:2,&amp;quot;features&amp;quot;:{&amp;quot;gost_crypto&amp;quot;:false,&amp;quot;pki&amp;quot;:{&amp;quot;openssl&amp;quot;:false},&amp;quot;binary_data&amp;quot;:{&amp;quot;raw&amp;quot;:true,&amp;quot;pdf&amp;quot;:true},&amp;quot;server_signer&amp;quot;:false,&amp;quot;rks&amp;quot;:false}},&amp;quot;signature&amp;quot;:&amp;quot;MEYCIQDy7OUT6iiligbiugYcpK9fjkU/GDRIUiJtB+UcHppVwIhAKzS+EcktxyRikvqEThPyo1jHlPuAfgxW+EEo5gioW7Y&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
update pc_system_params set license=&#039;%LICENSE%&#039; where systemid=&#039;%SYSTEMID%&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Обновление модулей PC =&lt;br /&gt;
&lt;br /&gt;
Перед обновлением настоятельно рекомендуем также выполнить резервное копирование баз данных PC.&lt;br /&gt;
&lt;br /&gt;
Для установки PC 6-й версии воспользуйтесь инструкцией по ссылке - https://repo.paycontrol.org/server/doc/latest/pc-install-guide/ru/#перед-установкой&lt;br /&gt;
&lt;br /&gt;
После обновления &#039;&#039;&#039;необходимо&#039;&#039;&#039; отключить автозапуск Wildfly.&lt;br /&gt;
&lt;br /&gt;
= Документация по работе с PC 6-й версии =&lt;br /&gt;
&lt;br /&gt;
* Вся документация - https://repo.paycontrol.org/&lt;br /&gt;
&lt;br /&gt;
* Руководство администратора - https://repo.paycontrol.org/server/doc/latest/pc-admin-guide/ru/&lt;br /&gt;
&lt;br /&gt;
* Справочное руководство - https://repo.paycontrol.org/server/doc/latest/pc-reference-guide/ru/&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B_%D0%BA%D0%BB%D1%8E%D1%87%D0%B0&amp;diff=882</id>
		<title>Параметры ключа</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B_%D0%BA%D0%BB%D1%8E%D1%87%D0%B0&amp;diff=882"/>
		<updated>2026-04-14T15:47:52Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: /* Флаги */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;При создании запроса на генерацию [[Ключевая информация|ключевой информации]] пользователя, могут быть установлены параметры, перечисленные ниже.&lt;br /&gt;
=Описание=&lt;br /&gt;
==Отпечаток устройства==&lt;br /&gt;
&#039;&#039;&#039;withFingerPrint&#039;&#039;&#039; – указывает, осуществлять ли привязку устройства к Пользователю PayControl. В случае наличия в запросе на создание пользователя параметра «флаг привязки пользователя к устройству» со значением «true» при проверке кода подтверждения будет использован отпечаток устройства пользователя. Отпечаток устройства вносится в информацию о пользователе путем вызова метода «Сохранение отпечатка устройства»;&lt;br /&gt;
&lt;br /&gt;
==Сбор событий==&lt;br /&gt;
&#039;&#039;&#039;collectEvent&#039;&#039;&#039; – флаг, указывающий необходимость передачи мобильным приложением информации о событиях и сохранения её сервером в базе данных PayControl;&lt;br /&gt;
===Информация об устройстве===&lt;br /&gt;
&#039;&#039;&#039;collectDeviceInfo&#039;&#039;&#039; – флаг, указывающий необходимость сбора информации об устройстве в составе информации о событии. Учитывается только в случае, если установлен флаг collectEvent;&lt;br /&gt;
====Информация о сим-карте====&lt;br /&gt;
&#039;&#039;&#039;collectDeviceSIMInfo&#039;&#039;&#039; – флаг, указывающий необходимость сбора информации о телефоне (SIM-карте). При включении – мобильное устройство передаёт информацию, относящуюся к телефону и SIM-карте в составе информации об устройстве. Учитывается только если установлен флаг collectDeviceInfo. На Android-устройстве необходимо дополнительное разрешение приложению на доступ к информации о телефоне;&lt;br /&gt;
&lt;br /&gt;
====Информация о местоположении устройства====&lt;br /&gt;
&#039;&#039;&#039;collectDeviceLocation&#039;&#039;&#039; – флаг, указывающий необходимость сбора информации о местоположении устройства. При включении – мобильное устройство передаёт координаты местоположения устройства в составе информации об устройстве. Учитывается только если установлен флаг collectDeviceInfo. На мобильном устройстве необходимо дополнительное разрешение на доступ к геолокации;&lt;br /&gt;
&lt;br /&gt;
==Запрет перерегистрации открытого ключа==&lt;br /&gt;
&#039;&#039;&#039;denyRenewPublicKey&#039;&#039;&#039; – флаг, запрещающий перерегистарцию открытого ключа сервере, если открытый ключ уже был зарегистрирован ранее;&lt;br /&gt;
&lt;br /&gt;
==Параметры сохранения ключевой информации на устройстве==&lt;br /&gt;
===Запрет использования механизмов безопасности ОС===&lt;br /&gt;
&#039;&#039;&#039;denyStoreWithOSProtection&#039;&#039;&#039; – флаг, запрещающий сохранение ключа с использованием механизмов безопасности операционной системы мобильного устройства (TouchID/FaceID, Google Key Store);&lt;br /&gt;
===Требования к паролю===&lt;br /&gt;
Также может быть указан вариант требований к сложности пароля при сохранении ключевой информации на мобильном устройстве, путём задания значения passPolicy. Доступны следующие варианты:&lt;br /&gt;
* «0» – минимум 6 символов, пароль не обязателен;&lt;br /&gt;
* «1» – минимум 6 символов, пароль обязателен;&lt;br /&gt;
* «2» – минимум 8 символов (обязательно использование A-Z и a-z) пароль обязателен;&lt;br /&gt;
* «3» – минимум 8 символов (обязательно использование A-Z, a-z и 0-9) пароль обязателен.&lt;br /&gt;
Если опциональное значение passPolicy не установлено, принимается значение равное «0».&lt;br /&gt;
==Скоринг и автоподпись==&lt;br /&gt;
===Скоринг===&lt;br /&gt;
&#039;&#039;&#039;scoring_enabled&#039;&#039;&#039; - разрешение &amp;quot;скоринга&amp;quot; устройства и поведенческого анализа с помощью дополнительного антифрод-модуля Secure Bank от Group IB. Лицензируется отдельно.&lt;br /&gt;
===Автоподписание===&lt;br /&gt;
&#039;&#039;&#039;autosign_enabled&#039;&#039;&#039; - разрешение автоподписи транзакций на основе результата скоринга устройства и поведенческого анализа. Для автоподписи используется дополнительная асимметричная ключевая пара.&lt;br /&gt;
==Отложенный ввод в действие ключевой информации==&lt;br /&gt;
&#039;&#039;&#039;delayed&#039;&#039;&#039; – флаг отложенного ввода в действие ключа. При его установке ключ, используемый для подтверждения транзакций и проверки кодов аутентификации, не заменяется. Сгенерированный новый ключ помечается как отложенный. Его ввод в действие выполняется одним из следующих способов:&lt;br /&gt;
*	путем вызова метода Ввод отложенного ключа в действие;&lt;br /&gt;
*	путем вызова одного из методов: Сохранение отпечатка устройства, Регистрация открытого ключа, Регистрация устройства для отправки PUSH-уведомлений с кодом аутентификации, сформированным на отложенном ключе.&lt;br /&gt;
Выполнять обновление ключевой информации с флагом отложенного ввода можно неограниченное количество раз. При этом сформированная ранее отложенная ключевая информация будет заменена новой отложенной ключевой информацией.&lt;br /&gt;
При выполнении обновления без данного флага вся отложенная ключевая информация далее считается недействительной и не может быть введена в действие.&lt;br /&gt;
Если значение опционального флага не указано, принимается значение равное «false».&lt;br /&gt;
==Параметры NFC==&lt;br /&gt;
&#039;&#039;&#039;nfc_policy&#039;&#039;&#039; - флаг, который определяет использования NFC на мобильном устройстве. Доступны следующие варианты:&lt;br /&gt;
* «0» – использование NFC-карты, хранащей закрытый ключ, на мобильном устройстве запрещено. Для всех криптографических операций используется ключевая пара генерируемая на самом мобильном устройстве;&lt;br /&gt;
* «1» – использование NFC-карты, хранащей закрытый ключ, на мобильном устройстве опционально. В криптографических операциях может быть использована как ключевая пара, генерируемая на мобильном устройстве, так и ключевой контейнер, хранящийся на NFC-карте;&lt;br /&gt;
* «2» – использование NFC-карты, хранащей закрытый ключ, на мобильном устройстве обязательно. Для всех криптографических операций используется ключевая пара, хранящаяся в контейнере на NFC-карте;&lt;br /&gt;
&lt;br /&gt;
Если опциональное значение nfc_policy не установлено, принимается значение равное «0».&lt;br /&gt;
=Флаги=&lt;br /&gt;
В составе QR-кода, значения передаются в 7-ой строке данных (для версии сервера 3.x) или в параметре &amp;quot;key_flags&amp;quot; (для версии сервера 5 и выше), целым числом. Значения флагов вычисляются с помощью битовой маски.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
KEYFLAG_WITH_FINGERPRINT = (1 &amp;lt;&amp;lt; 0);&lt;br /&gt;
KEYFLAG_COLLECT_EVENTS = (1 &amp;lt;&amp;lt; 1);&lt;br /&gt;
KEYFLAG_COLLECT_DEVICEINFO = (1 &amp;lt;&amp;lt; 2);&lt;br /&gt;
KEYFLAG_COLLECT_SIMINFO = (1 &amp;lt;&amp;lt; 3);&lt;br /&gt;
KEYFLAG_COLLECT_LOCATION = (1 &amp;lt;&amp;lt; 4);&lt;br /&gt;
KEYFLAG_PASS_POLICY_POS = (1 &amp;lt;&amp;lt; 5);    // password policy encoded by 2 bits (4 values)&lt;br /&gt;
KEYFLAG_PASS_POLICY_POS = (1 &amp;lt;&amp;lt; 6);    // password policy encoded by 2 bits (4 values)&lt;br /&gt;
KEYFLAG_DENY_STORE_WITH_OS_PROTECTION = (1 &amp;lt;&amp;lt; 7);&lt;br /&gt;
KEYFLAG_DENY_RENEW_PUBKEY = (1 &amp;lt;&amp;lt; 8);&lt;br /&gt;
KEYFLAG_SCORING_ENABLED = (1 &amp;lt;&amp;lt; 9);&lt;br /&gt;
KEYFLAG_AUTOSIGN_ENABLED = (1 &amp;lt;&amp;lt; 10);&lt;br /&gt;
KEYFLAG_REMOTE_UPDATE_ENABLED = (1 &amp;lt;&amp;lt; 11);&lt;br /&gt;
KEYFLAG_SERVERSIGNER = (1 &amp;lt;&amp;lt; 12);&lt;br /&gt;
KEYFLAG_NFC_POLICY_POS = (1 &amp;lt;&amp;lt; 13);  // nfc policy encoded by 2 bits (3 values)&lt;br /&gt;
KEYFLAG_NFC_POLICY_POS = (1 &amp;lt;&amp;lt; 14);  // nfc policy encoded by 2 bits (3 values)&lt;br /&gt;
KEYFLAG_TELEGRAM_ENABLED = (1 &amp;lt;&amp;lt; 15);&lt;br /&gt;
KEYFLAG_ONLINE_CREDENTIALS = (1 &amp;lt;&amp;lt; 16);&lt;br /&gt;
KEYFLAG_IS_WEB = (1 &amp;lt;&amp;lt; 17);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=PayControl_PKI&amp;diff=880</id>
		<title>PayControl PKI</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=PayControl_PKI&amp;diff=880"/>
		<updated>2026-02-19T13:28:34Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PC базово в своём составе имеет коннекторы к двум УЦ:&lt;br /&gt;
&lt;br /&gt;
* КриптоПро УЦ&lt;br /&gt;
* УЦ на базе OpenSSL&lt;br /&gt;
&lt;br /&gt;
= КриптоПро УЦ =&lt;br /&gt;
&lt;br /&gt;
С версии 6.9.0, PC может быть подключён к КриптоПро УЦ 2.0 (исполнение 15 и 16) для выпуска сертификатов пользователям PC.&lt;br /&gt;
&lt;br /&gt;
Коннектор к УЦ КриптоПро является модулем компонента PCS. Взаимодействие с УЦ КриптоПро ведётся через его компонент — центр регистрации.&lt;br /&gt;
&lt;br /&gt;
Для работы с УЦ КриптоПро необходимо включить коннектор, настроить его, добавить ключ для аутентификации запросов в центр регистрации (или два раздельных ключа, один для mTLS, второй для подписания запросов к ЦР), добавить корневой сертификат УЦ для проверки аутентичности сервера при подключении.&lt;br /&gt;
&lt;br /&gt;
== Конфигурирование PKI коннектора ==&lt;br /&gt;
&lt;br /&gt;
=== Указание пути к файлу конфигурации PKI коннектора ===&lt;br /&gt;
&lt;br /&gt;
Путь к файлу конфигурации устанавливается в настройках сервера PCS в параметре &amp;lt;code&amp;gt;PKI_SETTINGS_PATH&amp;lt;/code&amp;gt;. Значением по умолчанию является &amp;lt;code&amp;gt;/opt/pc/pki/pki-settings.properties&amp;lt;/code&amp;gt;. Способ установки описан в [https://repo.paycontrol.org/server/doc/latest/pc-reference-guide/ru/#установка-параметров|справочном руководстве].&lt;br /&gt;
&lt;br /&gt;
=== Состав файла конфигурации ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;# Connector type selection (MUST not be changed to use this connector)&lt;br /&gt;
# Указание типа коннектора (не подлежит изменению при использовании этого коннектора)&lt;br /&gt;
caType=CPCA20&lt;br /&gt;
&lt;br /&gt;
# Alias of the Operator&#039;s private key and certificate stored in HDImage&lt;br /&gt;
# Алиас закрытого ключа и сертификата оператора в HDImage хранилище (используется для установки mTLS и подписи запросов к УЦ)&lt;br /&gt;
cpca20OperatorKeyAlias=Operator-1&lt;br /&gt;
&lt;br /&gt;
# Password to the Operator&#039;s private key container&lt;br /&gt;
# Пароль закрытого ключа оператора&lt;br /&gt;
cpca20OperatorKeyPassword=&lt;br /&gt;
&lt;br /&gt;
# Trusted certificates in PEM for establishing TLS connection with CA&lt;br /&gt;
# Путь к файлу с доверенными сертификатами&lt;br /&gt;
cpca20TrustedCertificatesPath=/opt/pc/cp_ca/etc/904C46A177CC4BAA6B683AD47E4BF625FADD166B.pem&lt;br /&gt;
&lt;br /&gt;
# URL for the CA 2.0 instance&lt;br /&gt;
# Адрес центра регистрации УЦ КриптоПро для взаимодействия&lt;br /&gt;
cpca20InteractionUrl=https://cpca.loc&lt;br /&gt;
&lt;br /&gt;
# URL for the CA 2.0 distribution point&lt;br /&gt;
# Адрес распространения списков отзывов сертификатов&lt;br /&gt;
cpca20CrlDp=http://cpca.loc/cdp/904C46A177CC4BAA6B683AD47E4BF625FADD166B.crl&lt;br /&gt;
&lt;br /&gt;
# OID for the custom component in subject&#039;s DN (UnstructuredName)&lt;br /&gt;
# OID для поля UnstructuredName&lt;br /&gt;
cacp20UserNameOID=1.2.840.113549.1.9.2&lt;br /&gt;
&lt;br /&gt;
# OID for the certificate template to be included in the extensions of certificate requests&lt;br /&gt;
# OID шаблона сертификата для включения в расширение в запросе сертификата&lt;br /&gt;
cacp20CertTemplateOID=1.2.643.2.999.1.1.1&lt;br /&gt;
&lt;br /&gt;
# Folder to be used when creating users at RA&lt;br /&gt;
# Папка, в которой создаются сертификаты пользователей в ЦР УЦ КриптоПро&lt;br /&gt;
cacp20RegistrationFolder=Ra&lt;br /&gt;
&lt;br /&gt;
# Whether to use specified CRL DP for certificate checking (useful when CRL DP is not included into certificate extensions)&lt;br /&gt;
# Флаг разрешающий использование установленного в cpca20CrlDp адреса для получения списка отзыва сертификатов (для случаев, если в сертификате не указана точка распространения списка отзывов)&lt;br /&gt;
cacp20UseCrlDpForCertificateValidation=true&lt;br /&gt;
&lt;br /&gt;
# Timeout in milliseconds for establishing connection with CA&lt;br /&gt;
# Время ожидания установки TCP соединения с УЦ в мс&lt;br /&gt;
cacp20ConnectionTimeout=2000&lt;br /&gt;
&lt;br /&gt;
# Timeout in milliseconds for requesting connection from the connection manager&lt;br /&gt;
# Время ожидания готовности сервера принять запрос в мс&lt;br /&gt;
cacp20ConnectionRequestTimeout=2000&lt;br /&gt;
&lt;br /&gt;
# Timeout in milliseconds for getting response from CA&lt;br /&gt;
# Время ожидания ответа от УЦ в мс&lt;br /&gt;
cacp20ResponseTimeout=2000&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сертификат УЦ ===&lt;br /&gt;
&lt;br /&gt;
Сертификат УЦ необходимо разместить в доступном для сервиса месте (например в &amp;lt;code&amp;gt;/opt/pc/cp_ca/etc/&amp;lt;/code&amp;gt;), и указать путь к этому файлу в параметре &amp;lt;code&amp;gt;cpca20TrustedCertificatesPath&amp;lt;/code&amp;gt; конфигурационного файла.&lt;br /&gt;
&lt;br /&gt;
== Размещение ключей ==&lt;br /&gt;
&lt;br /&gt;
Файлы ключа и сертификата оператора в формате КриптоПро CSP HDImage необходимо разместить по по пути  &amp;lt;code&amp;gt;/var/opt/cprocsp/keys/ProcessUsername/OperatorKeyAlias&amp;lt;/code&amp;gt;, где вместо значений:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ProcessUsername&amp;lt;/code&amp;gt; должено быть указано имя пользователя, под которым запущен процесс PCS;&lt;br /&gt;
* &amp;lt;code&amp;gt;OperatorKeyAlias&amp;lt;/code&amp;gt; должен быть указан алиас оператора (для приведённого примера файла конфигурации это будет &amp;lt;code&amp;gt;Operator-1&amp;lt;/code&amp;gt; и путь будет следующий &amp;lt;code&amp;gt;/var/opt/cprocsp/keys/user/Operator-1&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Владельцем директорий &amp;lt;code&amp;gt;ProcessUsername/OperatorKeyAlias&amp;lt;/code&amp;gt; и файлов ключей должен быть пользователь, под которым запущен процесс PCS. Если эти директории принадлежат другому пользователю, необходимо скорректировать принадлежность, например, с помощью &amp;lt;code&amp;gt;chown&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= OpenSSL =&lt;br /&gt;
&lt;br /&gt;
== Конфигурирование PKI коннектора ==&lt;br /&gt;
&lt;br /&gt;
=== Путь к конфигурационному файлу коннектора ===&lt;br /&gt;
&lt;br /&gt;
Настройку необходимо внести в pc_sys_property БД PCS.&lt;br /&gt;
&lt;br /&gt;
PKI_SETTINGS_PATH      | /opt/pc/pki/pki-settings.properties&lt;br /&gt;
&lt;br /&gt;
Пример для PostgreSQL:&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;insert into pc_sys_property values (nextval(&#039;pc_setting_seq&#039;), &#039;PKI_SETTINGS_PATH&#039;, &#039;/opt/pc/pki/pki-settings.properties&#039;);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Пример конфигурационного файла ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# check certificate&#039;s expiration, cert path and other constrains during each cert use&lt;br /&gt;
checkCertificates=true&lt;br /&gt;
&lt;br /&gt;
# check certificate revocation status, to use checkCertificates must be true&lt;br /&gt;
checkRevocation=true&lt;br /&gt;
useCRL=true&lt;br /&gt;
useOCSP=false&lt;br /&gt;
&lt;br /&gt;
# -- OpenSSL Settings&lt;br /&gt;
caType=OpenSSL&lt;br /&gt;
issueCertificateCmd=/opt/pc/pki/issue_cert.sh&lt;br /&gt;
revokeCertificateCmd=/opt/pc/pki/revoke_cert.sh&lt;br /&gt;
&lt;br /&gt;
# files prefixes must contain path where tmp files will be stored&lt;br /&gt;
csrTmpFilePrefix=pc-openssl-connector-csr-&lt;br /&gt;
certTmpFilePrefix=pc-openssl-connector-cert-&lt;br /&gt;
&lt;br /&gt;
# certificate chain in PEM-format&lt;br /&gt;
#    the first certificate must be CA (self-signed), second - 1st intermediate, third - 2nd intermediate and so on&lt;br /&gt;
#    if checkRevocation is true, then each of intermediate certificates must contain OCSP url or CRL Distribution point&lt;br /&gt;
caChainFileName=/opt/pc/pki/Intermediate_CA/certs/intermediate.chain.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Пример файла выпуска сертификата ==&lt;br /&gt;
&lt;br /&gt;
=== ECDSA ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CA_DIR=/opt/pc/pki/Intermediate_CA&lt;br /&gt;
KEY_PASS=secretpassword&lt;br /&gt;
&lt;br /&gt;
DER_CSR_FILE_NAME=$1&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;$(basename -- $DER_CSR_FILE_NAME)&amp;quot;&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;${DER_CSR_BASE_FILE_NAME%.*}&amp;quot;&lt;br /&gt;
PEM_CSR_FILE_NAME=csr/$DER_CSR_BASE_FILE_NAME.pem&lt;br /&gt;
PEM_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.pem&lt;br /&gt;
DER_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.der&lt;br /&gt;
&lt;br /&gt;
DEST_CERT_FILE_NAME=$2&lt;br /&gt;
&lt;br /&gt;
cd $CA_DIR&lt;br /&gt;
openssl req -inform DER -in $DER_CSR_FILE_NAME -out $PEM_CSR_FILE_NAME&lt;br /&gt;
openssl ca -config openssl.cnf -extensions usr_cert -days 375 -notext -md sha256 -in $PEM_CSR_FILE_NAME -out $PEM_CERT_FILE_NAME -passin pass:$KEY_PASS -batch&lt;br /&gt;
openssl x509 -outform der -in $PEM_CERT_FILE_NAME -out $DER_CERT_FILE_NAME&lt;br /&gt;
&lt;br /&gt;
cp $DER_CERT_FILE_NAME $DEST_CERT_FILE_NAME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ГОСТ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CA_DIR=/opt/pc/pki/Intermediate_CA&lt;br /&gt;
KEY_PASS=secretpassword&lt;br /&gt;
&lt;br /&gt;
DER_CSR_FILE_NAME=$1&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;$(basename -- $DER_CSR_FILE_NAME)&amp;quot;&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;${DER_CSR_BASE_FILE_NAME%.*}&amp;quot;&lt;br /&gt;
PEM_CSR_FILE_NAME=csr/$DER_CSR_BASE_FILE_NAME.pem&lt;br /&gt;
PEM_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.pem&lt;br /&gt;
DER_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.der&lt;br /&gt;
&lt;br /&gt;
DEST_CERT_FILE_NAME=$2&lt;br /&gt;
&lt;br /&gt;
cd $CA_DIR&lt;br /&gt;
openssl req -inform DER -in $DER_CSR_FILE_NAME -out $PEM_CSR_FILE_NAME&lt;br /&gt;
openssl ca -config openssl.cnf -extensions usr_cert -days 375 -notext -md gost12_256 -in $PEM_CSR_FILE_NAME -out $PEM_CERT_FILE_NAME -passin pass:$KEY_PASS -batch&lt;br /&gt;
openssl x509 -outform der -in $PEM_CERT_FILE_NAME -out $DER_CERT_FILE_NAME&lt;br /&gt;
&lt;br /&gt;
cp $DER_CERT_FILE_NAME $DEST_CERT_FILE_NAME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Пример файла отзыва сертификата ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CERT_FILE_NAME=$1&lt;br /&gt;
KEY_PASS=secretpassword&lt;br /&gt;
CA_DIR=/opt/pc/pki/Intermediate_CA&lt;br /&gt;
INTERMEDIATE_CRL_LOCATION=crl/intermediate.crl&lt;br /&gt;
&lt;br /&gt;
cd $CA_DIR&lt;br /&gt;
&lt;br /&gt;
#revoke&lt;br /&gt;
openssl ca -config openssl.cnf -revoke $CERT_FILE_NAME -passin pass:$KEY_PASS&lt;br /&gt;
#publish CRL&lt;br /&gt;
openssl ca -config openssl.cnf -gencrl -out $INTERMEDIATE_CRL_LOCATION -passin pass:$KEY_PASS&lt;br /&gt;
cp -v $INTERMEDIATE_CRL_LOCATION /opt/pc/pki/pub/crl/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Пример файла скрипта публикации списка отзыва корневого УЦ ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
openssl ca \&lt;br /&gt;
-config /opt/pc/pki/Root_CA/openssl_host.cnf \&lt;br /&gt;
-gencrl \&lt;br /&gt;
-out /opt/pc/pki/Root_CA/crl/root.crl \&lt;br /&gt;
-passin pass:secretpassword&lt;br /&gt;
cp /opt/pc/pki/Root_CA/crl/root.crl /opt/pc/pki/pub/crl/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Пример файла скрипта публикации списка отзыва промежуточного УЦ ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
openssl ca \&lt;br /&gt;
-config /opt/pc/pki/Intermediate_CA/openssl_host.cnf \&lt;br /&gt;
-gencrl \&lt;br /&gt;
-out /opt/pc/pki/Intermediate_CA/crl/intermediate.crl \&lt;br /&gt;
-passin pass:secretpassword&lt;br /&gt;
cp /opt/pc/pki/Intermediate_CA/crl/intermediate.crl /opt/pc/pki/pub/crl/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Включение ГОСТ в OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== Установка модуля ГОСТ ===&lt;br /&gt;
&lt;br /&gt;
Для работы OpenSSL с криптоалгоритмами ГОСТ необходимо установить криптографическую библиотеку и настроить работу с этой библиотекой в конфигурационном файле, для этого:&lt;br /&gt;
&lt;br /&gt;
* Установите пакет &amp;lt;code&amp;gt;openssl-gost-engine&amp;lt;/code&amp;gt;, либо, если его нет в репозитории Вашего дистрибутива, скачайте по ссылке https://repo.paycontrol.org/cdn/artefacts/gost-engine/engine/gost.so (sha256sum: &amp;lt;code&amp;gt;435a0dee3273d924458c14ad57ac44b0711aa37fb3df9f2ba987a118f2339b1f  gost.so&amp;lt;/code&amp;gt;) и разместите скаченный файл криптобиблиотеки в директории модулей OpenSSL (в зависимости от дистрибутива это может быть &amp;lt;code&amp;gt;/usr/lib/engines-3/&amp;lt;/code&amp;gt;, или, например &amp;lt;code&amp;gt;/usr/lib64/engines-3/&amp;lt;/code&amp;gt;).&lt;br /&gt;
* В кофигурационный файл OpenSSL добавьте:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;openssl_conf = openssl_def&lt;br /&gt;
&lt;br /&gt;
[openssl_def]&lt;br /&gt;
engines = engine_section&lt;br /&gt;
&lt;br /&gt;
[engine_section]&lt;br /&gt;
gost = gost_section&lt;br /&gt;
&lt;br /&gt;
[gost_section]&lt;br /&gt;
engine_id = gost&lt;br /&gt;
dynamic_path = /usr/lib/engines-3/gost.so&lt;br /&gt;
default_algorithms = ALL &amp;lt;/syntaxhighlight&amp;gt;, где в качестве значения &amp;lt;code&amp;gt;dynamic_path&amp;lt;/code&amp;gt; должен быть указан путь к библиотеке &amp;lt;code&amp;gt;gost.so&amp;lt;/code&amp;gt;.&lt;br /&gt;
* В кофигурационном файле OpenSSL параметру &amp;lt;code&amp;gt;default_md&amp;lt;/code&amp;gt; необходимо установить значение &amp;lt;code&amp;gt;md_gost12_256&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример команд для создания корневого и промежуточного ГОСТ-УЦ в OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== Создание корневого сертификата ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
openssl genpkey -config openssl_intermediate.cnf -pass pass:$KEY_PASS -algorithm gost2012_256 -pkeyopt paramset:A -out private/root.key.pem&lt;br /&gt;
openssl req -config openssl_intermediate.cnf -key private/root.key.pem -passin pass:${PKI_KEY_PASS} -new -x509 -days 7300 -md_gost12_256 -extensions v3_ca -subj &amp;quot;${PKI_ROOT_SUBJECT}&amp;quot; -out certs/root.cert.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключа и запроса для промежуточного УЦ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
openssl genpkey -config openssl_root.cnf -pass pass:$KEY_PASS -algorithm gost2012_256 -pkeyopt paramset:A -out private/intermediate.key.pem&lt;br /&gt;
openssl req -config openssl_root.cnf -key private/intermediate.key.pem -passin pass:${PKI_KEY_PASS} -new -md_gost12_256 -subj &amp;quot;${PKI_INTERMEDIATE_SUBJECT}&amp;quot; -out csr/intermediate.csr.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Выпуск сертификата для промежуточного УЦ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
openssl ca -config openssl_intermediate.cnf -extensions v3_intermediate_ca -passin pass:${PKI_KEY_PASS} -days 3650 -notext -md gost12_256 -in ../Intermediate_CA/csr/intermediate.csr.pem -out ../Intermediate_CA/certs/intermediate.cert.pem -out certs/intermediate.cert.pem -batch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:OpenSSL]]&lt;br /&gt;
[[Категория:PKI]]&lt;br /&gt;
[[Категория:Сертификаты]]&lt;br /&gt;
[[Категория:КриптоПро УЦ]]&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=PayControl_PKI&amp;diff=879</id>
		<title>PayControl PKI</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=PayControl_PKI&amp;diff=879"/>
		<updated>2026-02-16T15:50:20Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= КриптоПро УЦ =&lt;br /&gt;
&lt;br /&gt;
С версии 6.9.0, PC может быть подключён к КриптоПро УЦ 2.0 (исполнение 15 и 16) для выпуска сертификатов пользователям PC.&lt;br /&gt;
&lt;br /&gt;
Коннектор к УЦ КриптоПро является модулем компонента PCS. Взаимодействие с УЦ КриптоПро ведётся через его компонент — центр регистрации.&lt;br /&gt;
&lt;br /&gt;
Для работы с УЦ КриптоПро необходимо включить коннектор, настроить его, добавить ключ для аутентификации запросов в центр регистрации (или два раздельных ключа, один для mTLS, второй для подписания запросов к ЦР), добавить корневой сертификат УЦ для проверки аутентичности сервера при подключении.&lt;br /&gt;
&lt;br /&gt;
== Конфигурирование PKI коннектора ==&lt;br /&gt;
&lt;br /&gt;
=== Указание пути к файлу конфигурации PKI коннектора ===&lt;br /&gt;
&lt;br /&gt;
Путь к файлу конфигурации устанавливается в настройках сервера PCS в параметре &amp;lt;code&amp;gt;PKI_SETTINGS_PATH&amp;lt;/code&amp;gt;. Значением по умолчанию является &amp;lt;code&amp;gt;/opt/pc/pki/pki-settings.properties&amp;lt;/code&amp;gt;. Способ установки описан в [https://repo.paycontrol.org/server/doc/latest/pc-reference-guide/ru/#установка-параметров|справочном руководстве].&lt;br /&gt;
&lt;br /&gt;
=== Состав файла конфигурации ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;# Connector type selection (MUST not be changed to use this connector)&lt;br /&gt;
# Указание типа коннектора (не подлежит изменению при использовании этого коннектора)&lt;br /&gt;
caType=CPCA20&lt;br /&gt;
&lt;br /&gt;
# Alias of the Operator&#039;s private key and certificate stored in HDImage&lt;br /&gt;
# Алиас закрытого ключа и сертификата оператора в HDImage хранилище (используется для установки mTLS и подписи запросов к УЦ)&lt;br /&gt;
cpca20OperatorKeyAlias=Operator-1&lt;br /&gt;
&lt;br /&gt;
# Password to the Operator&#039;s private key container&lt;br /&gt;
# Пароль закрытого ключа оператора&lt;br /&gt;
cpca20OperatorKeyPassword=&lt;br /&gt;
&lt;br /&gt;
# Trusted certificates in PEM for establishing TLS connection with CA&lt;br /&gt;
# Путь к файлу с доверенными сертификатами&lt;br /&gt;
cpca20TrustedCertificatesPath=/opt/pc/cp_ca/etc/904C46A177CC4BAA6B683AD47E4BF625FADD166B.pem&lt;br /&gt;
&lt;br /&gt;
# URL for the CA 2.0 instance&lt;br /&gt;
# Адрес центра регистрации УЦ КриптоПро для взаимодействия&lt;br /&gt;
cpca20InteractionUrl=https://cpca.loc&lt;br /&gt;
&lt;br /&gt;
# URL for the CA 2.0 distribution point&lt;br /&gt;
# Адрес распространения списков отзывов сертификатов&lt;br /&gt;
cpca20CrlDp=http://cpca.loc/cdp/904C46A177CC4BAA6B683AD47E4BF625FADD166B.crl&lt;br /&gt;
&lt;br /&gt;
# OID for the custom component in subject&#039;s DN (UnstructuredName)&lt;br /&gt;
# OID для поля UnstructuredName&lt;br /&gt;
cacp20UserNameOID=1.2.840.113549.1.9.2&lt;br /&gt;
&lt;br /&gt;
# OID for the certificate template to be included in the extensions of certificate requests&lt;br /&gt;
# OID шаблона сертификата для включения в расширение в запросе сертификата&lt;br /&gt;
cacp20CertTemplateOID=1.2.643.2.999.1.1.1&lt;br /&gt;
&lt;br /&gt;
# Folder to be used when creating users at RA&lt;br /&gt;
# Папка, в которой создаются сертификаты пользователей в ЦР УЦ КриптоПро&lt;br /&gt;
cacp20RegistrationFolder=Ra&lt;br /&gt;
&lt;br /&gt;
# Whether to use specified CRL DP for certificate checking (useful when CRL DP is not included into certificate extensions)&lt;br /&gt;
# Флаг разрешающий использование установленного в cpca20CrlDp адреса для получения списка отзыва сертификатов (для случаев, если в сертификате не указана точка распространения списка отзывов)&lt;br /&gt;
cacp20UseCrlDpForCertificateValidation=true&lt;br /&gt;
&lt;br /&gt;
# Timeout in milliseconds for establishing connection with CA&lt;br /&gt;
# Время ожидания установки TCP соединения с УЦ в мс&lt;br /&gt;
cacp20ConnectionTimeout=2000&lt;br /&gt;
&lt;br /&gt;
# Timeout in milliseconds for requesting connection from the connection manager&lt;br /&gt;
# Время ожидания готовности сервера принять запрос в мс&lt;br /&gt;
cacp20ConnectionRequestTimeout=2000&lt;br /&gt;
&lt;br /&gt;
# Timeout in milliseconds for getting response from CA&lt;br /&gt;
# Время ожидания ответа от УЦ в мс&lt;br /&gt;
cacp20ResponseTimeout=2000&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сертификат УЦ ===&lt;br /&gt;
&lt;br /&gt;
Сертификат УЦ необходимо разместить в доступном для сервиса месте (например в &amp;lt;code&amp;gt;/opt/pc/cp_ca/etc/&amp;lt;/code&amp;gt;), и указать путь к этому файлу в параметре &amp;lt;code&amp;gt;cpca20TrustedCertificatesPath&amp;lt;/code&amp;gt; конфигурационного файла.&lt;br /&gt;
&lt;br /&gt;
== Размещение ключей ==&lt;br /&gt;
&lt;br /&gt;
Файлы ключа и сертификата оператора в формате КриптоПро CSP HDImage необходимо разместить по по пути  &amp;lt;code&amp;gt;/var/opt/cprocsp/keys/ProcessUsername/OperatorKeyAlias&amp;lt;/code&amp;gt;, где вместо значений:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ProcessUsername&amp;lt;/code&amp;gt; должено быть указано имя пользователя, под которым запущен процесс PCS;&lt;br /&gt;
* &amp;lt;code&amp;gt;OperatorKeyAlias&amp;lt;/code&amp;gt; должен быть указан алиас оператора (для приведённого примера файла конфигурации это будет &amp;lt;code&amp;gt;Operator-1&amp;lt;/code&amp;gt; и путь будет следующий &amp;lt;code&amp;gt;/var/opt/cprocsp/keys/user/Operator-1&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Владельцем директорий &amp;lt;code&amp;gt;ProcessUsername/OperatorKeyAlias&amp;lt;/code&amp;gt; и файлов ключей должен быть пользователь, под которым запущен процесс PCS. Если эти директории принадлежат другому пользователю, необходимо скорректировать принадлежность, например, с помощью &amp;lt;code&amp;gt;chown&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= OpenSSL =&lt;br /&gt;
&lt;br /&gt;
== Конфигурирование PKI коннектора ==&lt;br /&gt;
&lt;br /&gt;
=== Путь к конфигурационному файлу коннектора ===&lt;br /&gt;
&lt;br /&gt;
Настройку необходимо внести в pc_sys_property БД PCS.&lt;br /&gt;
&lt;br /&gt;
PKI_SETTINGS_PATH      | /opt/pc/pki/pki-settings.properties&lt;br /&gt;
&lt;br /&gt;
Пример для PostgreSQL:&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;insert into pc_sys_property values (nextval(&#039;pc_setting_seq&#039;), &#039;PKI_SETTINGS_PATH&#039;, &#039;/opt/pc/pki/pki-settings.properties&#039;);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Пример конфигурационного файла ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# check certificate&#039;s expiration, cert path and other constrains during each cert use&lt;br /&gt;
checkCertificates=true&lt;br /&gt;
&lt;br /&gt;
# check certificate revocation status, to use checkCertificates must be true&lt;br /&gt;
checkRevocation=true&lt;br /&gt;
useCRL=true&lt;br /&gt;
useOCSP=false&lt;br /&gt;
&lt;br /&gt;
# -- OpenSSL Settings&lt;br /&gt;
caType=OpenSSL&lt;br /&gt;
issueCertificateCmd=/opt/pc/pki/issue_cert.sh&lt;br /&gt;
revokeCertificateCmd=/opt/pc/pki/revoke_cert.sh&lt;br /&gt;
&lt;br /&gt;
# files prefixes must contain path where tmp files will be stored&lt;br /&gt;
csrTmpFilePrefix=pc-openssl-connector-csr-&lt;br /&gt;
certTmpFilePrefix=pc-openssl-connector-cert-&lt;br /&gt;
&lt;br /&gt;
# certificate chain in PEM-format&lt;br /&gt;
#    the first certificate must be CA (self-signed), second - 1st intermediate, third - 2nd intermediate and so on&lt;br /&gt;
#    if checkRevocation is true, then each of intermediate certificates must contain OCSP url or CRL Distribution point&lt;br /&gt;
caChainFileName=/opt/pc/pki/Intermediate_CA/certs/intermediate.chain.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Пример файла выпуска сертификата ==&lt;br /&gt;
&lt;br /&gt;
=== ECDSA ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CA_DIR=/opt/pc/pki/Intermediate_CA&lt;br /&gt;
KEY_PASS=secretpassword&lt;br /&gt;
&lt;br /&gt;
DER_CSR_FILE_NAME=$1&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;$(basename -- $DER_CSR_FILE_NAME)&amp;quot;&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;${DER_CSR_BASE_FILE_NAME%.*}&amp;quot;&lt;br /&gt;
PEM_CSR_FILE_NAME=csr/$DER_CSR_BASE_FILE_NAME.pem&lt;br /&gt;
PEM_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.pem&lt;br /&gt;
DER_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.der&lt;br /&gt;
&lt;br /&gt;
DEST_CERT_FILE_NAME=$2&lt;br /&gt;
&lt;br /&gt;
cd $CA_DIR&lt;br /&gt;
openssl req -inform DER -in $DER_CSR_FILE_NAME -out $PEM_CSR_FILE_NAME&lt;br /&gt;
openssl ca -config openssl.cnf -extensions usr_cert -days 375 -notext -md sha256 -in $PEM_CSR_FILE_NAME -out $PEM_CERT_FILE_NAME -passin pass:$KEY_PASS -batch&lt;br /&gt;
openssl x509 -outform der -in $PEM_CERT_FILE_NAME -out $DER_CERT_FILE_NAME&lt;br /&gt;
&lt;br /&gt;
cp $DER_CERT_FILE_NAME $DEST_CERT_FILE_NAME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ГОСТ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CA_DIR=/opt/pc/pki/Intermediate_CA&lt;br /&gt;
KEY_PASS=secretpassword&lt;br /&gt;
&lt;br /&gt;
DER_CSR_FILE_NAME=$1&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;$(basename -- $DER_CSR_FILE_NAME)&amp;quot;&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;${DER_CSR_BASE_FILE_NAME%.*}&amp;quot;&lt;br /&gt;
PEM_CSR_FILE_NAME=csr/$DER_CSR_BASE_FILE_NAME.pem&lt;br /&gt;
PEM_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.pem&lt;br /&gt;
DER_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.der&lt;br /&gt;
&lt;br /&gt;
DEST_CERT_FILE_NAME=$2&lt;br /&gt;
&lt;br /&gt;
cd $CA_DIR&lt;br /&gt;
openssl req -inform DER -in $DER_CSR_FILE_NAME -out $PEM_CSR_FILE_NAME&lt;br /&gt;
openssl ca -config openssl.cnf -extensions usr_cert -days 375 -notext -md gost12_256 -in $PEM_CSR_FILE_NAME -out $PEM_CERT_FILE_NAME -passin pass:$KEY_PASS -batch&lt;br /&gt;
openssl x509 -outform der -in $PEM_CERT_FILE_NAME -out $DER_CERT_FILE_NAME&lt;br /&gt;
&lt;br /&gt;
cp $DER_CERT_FILE_NAME $DEST_CERT_FILE_NAME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Пример файла отзыва сертификата ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CERT_FILE_NAME=$1&lt;br /&gt;
KEY_PASS=secretpassword&lt;br /&gt;
CA_DIR=/opt/pc/pki/Intermediate_CA&lt;br /&gt;
INTERMEDIATE_CRL_LOCATION=crl/intermediate.crl&lt;br /&gt;
&lt;br /&gt;
cd $CA_DIR&lt;br /&gt;
&lt;br /&gt;
#revoke&lt;br /&gt;
openssl ca -config openssl.cnf -revoke $CERT_FILE_NAME -passin pass:$KEY_PASS&lt;br /&gt;
#publish CRL&lt;br /&gt;
openssl ca -config openssl.cnf -gencrl -out $INTERMEDIATE_CRL_LOCATION -passin pass:$KEY_PASS&lt;br /&gt;
cp -v $INTERMEDIATE_CRL_LOCATION /opt/pc/pki/pub/crl/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Пример файла скрипта публикации списка отзыва корневого УЦ ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
openssl ca \&lt;br /&gt;
-config /opt/pc/pki/Root_CA/openssl_host.cnf \&lt;br /&gt;
-gencrl \&lt;br /&gt;
-out /opt/pc/pki/Root_CA/crl/root.crl \&lt;br /&gt;
-passin pass:secretpassword&lt;br /&gt;
cp /opt/pc/pki/Root_CA/crl/root.crl /opt/pc/pki/pub/crl/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Пример файла скрипта публикации списка отзыва промежуточного УЦ ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
openssl ca \&lt;br /&gt;
-config /opt/pc/pki/Intermediate_CA/openssl_host.cnf \&lt;br /&gt;
-gencrl \&lt;br /&gt;
-out /opt/pc/pki/Intermediate_CA/crl/intermediate.crl \&lt;br /&gt;
-passin pass:secretpassword&lt;br /&gt;
cp /opt/pc/pki/Intermediate_CA/crl/intermediate.crl /opt/pc/pki/pub/crl/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Включение ГОСТ в OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== Установка модуля ГОСТ ===&lt;br /&gt;
&lt;br /&gt;
Для работы OpenSSL с криптоалгоритмами ГОСТ необходимо установить криптографическую библиотеку и настроить работу с этой библиотекой в конфигурационном файле, для этого:&lt;br /&gt;
&lt;br /&gt;
* Установите пакет &amp;lt;code&amp;gt;openssl-gost-engine&amp;lt;/code&amp;gt;, либо, если его нет в репозитории Вашего дистрибутива, скачайте по ссылке https://repo.paycontrol.org/cdn/artefacts/gost-engine/engine/gost.so (sha256sum: &amp;lt;code&amp;gt;435a0dee3273d924458c14ad57ac44b0711aa37fb3df9f2ba987a118f2339b1f  gost.so&amp;lt;/code&amp;gt;) и разместите скаченный файл криптобиблиотеки в директории модулей OpenSSL (в зависимости от дистрибутива это может быть &amp;lt;code&amp;gt;/usr/lib/engines-3/&amp;lt;/code&amp;gt;, или, например &amp;lt;code&amp;gt;/usr/lib64/engines-3/&amp;lt;/code&amp;gt;).&lt;br /&gt;
* В кофигурационный файл OpenSSL добавьте:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;openssl_conf = openssl_def&lt;br /&gt;
&lt;br /&gt;
[openssl_def]&lt;br /&gt;
engines = engine_section&lt;br /&gt;
&lt;br /&gt;
[engine_section]&lt;br /&gt;
gost = gost_section&lt;br /&gt;
&lt;br /&gt;
[gost_section]&lt;br /&gt;
engine_id = gost&lt;br /&gt;
dynamic_path = /usr/lib/engines-3/gost.so&lt;br /&gt;
default_algorithms = ALL &amp;lt;/syntaxhighlight&amp;gt;, где в качестве значения &amp;lt;code&amp;gt;dynamic_path&amp;lt;/code&amp;gt; должен быть указан путь к библиотеке &amp;lt;code&amp;gt;gost.so&amp;lt;/code&amp;gt;.&lt;br /&gt;
* В кофигурационном файле OpenSSL параметру &amp;lt;code&amp;gt;default_md&amp;lt;/code&amp;gt; необходимо установить значение &amp;lt;code&amp;gt;md_gost12_256&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример команд для создания корневого и промежуточного ГОСТ-УЦ в OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== Создание корневого сертификата ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
openssl genpkey -config openssl_intermediate.cnf -pass pass:$KEY_PASS -algorithm gost2012_256 -pkeyopt paramset:A -out private/root.key.pem&lt;br /&gt;
openssl req -config openssl_intermediate.cnf -key private/root.key.pem -passin pass:${PKI_KEY_PASS} -new -x509 -days 7300 -md_gost12_256 -extensions v3_ca -subj &amp;quot;${PKI_ROOT_SUBJECT}&amp;quot; -out certs/root.cert.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключа и запроса для промежуточного УЦ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
openssl genpkey -config openssl_root.cnf -pass pass:$KEY_PASS -algorithm gost2012_256 -pkeyopt paramset:A -out private/intermediate.key.pem&lt;br /&gt;
openssl req -config openssl_root.cnf -key private/intermediate.key.pem -passin pass:${PKI_KEY_PASS} -new -md_gost12_256 -subj &amp;quot;${PKI_INTERMEDIATE_SUBJECT}&amp;quot; -out csr/intermediate.csr.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Выпуск сертификата для промежуточного УЦ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
openssl ca -config openssl_intermediate.cnf -extensions v3_intermediate_ca -passin pass:${PKI_KEY_PASS} -days 3650 -notext -md gost12_256 -in ../Intermediate_CA/csr/intermediate.csr.pem -out ../Intermediate_CA/certs/intermediate.cert.pem -out certs/intermediate.cert.pem -batch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:OpenSSL]]&lt;br /&gt;
[[Категория:PKI]]&lt;br /&gt;
[[Категория:Сертификаты]]&lt;br /&gt;
[[Категория:КриптоПро УЦ]]&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=PayControl_PKI&amp;diff=878</id>
		<title>PayControl PKI</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=PayControl_PKI&amp;diff=878"/>
		<updated>2026-02-16T15:49:31Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: /* Размещение ключей */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= КриптоПро УЦ =&lt;br /&gt;
&lt;br /&gt;
С версии 6.9.0, PC может быть подключён к КриптоПро УЦ 2.0 (исполнение 15 и 16) для выпуска сертификатов пользователям PC.&lt;br /&gt;
&lt;br /&gt;
Коннектор к УЦ КриптоПро является модулем компонента PCS. Взаимодействие с УЦ КриптоПро ведётся через его компонент — центр регистрации.&lt;br /&gt;
&lt;br /&gt;
Для работы с УЦ КриптоПро необходимо включить коннектор, настроить его, добавить ключ для аутентификации запросов в центр регистрации (или два раздельных ключа, один для mTLS, второй для подписания запросов к ЦР), добавить корневой сертификат УЦ для проверки аутентичности сервера при подключении.&lt;br /&gt;
&lt;br /&gt;
== Конфигурирование PKI коннектора ==&lt;br /&gt;
&lt;br /&gt;
=== Указание пути к файлу конфигурации PKI коннектора ===&lt;br /&gt;
&lt;br /&gt;
Путь к файлу конфигурации устанавливается в настройках сервера PCS в параметре &amp;lt;code&amp;gt;PKI_SETTINGS_PATH&amp;lt;/code&amp;gt;. Значением по умолчанию является &amp;lt;code&amp;gt;/opt/pc/pki/pki-settings.properties&amp;lt;/code&amp;gt;. Способ установки описан в [https://repo.paycontrol.org/server/doc/latest/pc-reference-guide/ru/#установка-параметров|справочном руководстве].&lt;br /&gt;
&lt;br /&gt;
=== Состав файла конфигурации ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;# Connector type selection (MUST not be changed to use this connector)&lt;br /&gt;
# Указание типа коннектора (не подлежит изменению при использовании этого коннектора)&lt;br /&gt;
caType=CPCA20&lt;br /&gt;
&lt;br /&gt;
# Alias of the Operator&#039;s private key and certificate stored in HDImage&lt;br /&gt;
# Алиас закрытого ключа и сертификата оператора в HDImage хранилище (используется для установки mTLS и подписи запросов к УЦ)&lt;br /&gt;
cpca20OperatorKeyAlias=Operator-1&lt;br /&gt;
&lt;br /&gt;
# Password to the Operator&#039;s private key container&lt;br /&gt;
# Пароль закрытого ключа оператора&lt;br /&gt;
cpca20OperatorKeyPassword=&lt;br /&gt;
&lt;br /&gt;
# Trusted certificates in PEM for establishing TLS connection with CA&lt;br /&gt;
# Путь к файлу с доверенными сертификатами&lt;br /&gt;
cpca20TrustedCertificatesPath=/opt/pc/cp_ca/etc/904C46A177CC4BAA6B683AD47E4BF625FADD166B.pem&lt;br /&gt;
&lt;br /&gt;
# URL for the CA 2.0 instance&lt;br /&gt;
# Адрес центра регистрации УЦ КриптоПро для взаимодействия&lt;br /&gt;
cpca20InteractionUrl=https://cpca.loc&lt;br /&gt;
&lt;br /&gt;
# URL for the CA 2.0 distribution point&lt;br /&gt;
# Адрес распространения списков отзывов сертификатов&lt;br /&gt;
cpca20CrlDp=http://cpca.loc/cdp/904C46A177CC4BAA6B683AD47E4BF625FADD166B.crl&lt;br /&gt;
&lt;br /&gt;
# OID for the custom component in subject&#039;s DN (UnstructuredName)&lt;br /&gt;
# OID для поля UnstructuredName&lt;br /&gt;
cacp20UserNameOID=1.2.840.113549.1.9.2&lt;br /&gt;
&lt;br /&gt;
# OID for the certificate template to be included in the extensions of certificate requests&lt;br /&gt;
# OID шаблона сертификата для включения в расширение в запросе сертификата&lt;br /&gt;
cacp20CertTemplateOID=1.2.643.2.999.1.1.1&lt;br /&gt;
&lt;br /&gt;
# Folder to be used when creating users at RA&lt;br /&gt;
# Папка, в которой создаются сертификаты пользователей в ЦР УЦ КриптоПро&lt;br /&gt;
cacp20RegistrationFolder=Ra&lt;br /&gt;
&lt;br /&gt;
# Whether to use specified CRL DP for certificate checking (useful when CRL DP is not included into certificate extensions)&lt;br /&gt;
# Флаг разрешающий использование установленного в cpca20CrlDp адреса для получения списка отзыва сертификатов (для случаев, если в сертификате не указана точка распространения списка отзывов)&lt;br /&gt;
cacp20UseCrlDpForCertificateValidation=true&lt;br /&gt;
&lt;br /&gt;
# Timeout in milliseconds for establishing connection with CA&lt;br /&gt;
# Время ожидания установки TCP соединения с УЦ в мс&lt;br /&gt;
cacp20ConnectionTimeout=2000&lt;br /&gt;
&lt;br /&gt;
# Timeout in milliseconds for requesting connection from the connection manager&lt;br /&gt;
# Время ожидания готовности сервера принять запрос в мс&lt;br /&gt;
cacp20ConnectionRequestTimeout=2000&lt;br /&gt;
&lt;br /&gt;
# Timeout in milliseconds for getting response from CA&lt;br /&gt;
# Время ожидания ответа от УЦ в мс&lt;br /&gt;
cacp20ResponseTimeout=2000&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сертификат УЦ ===&lt;br /&gt;
&lt;br /&gt;
Сертификат УЦ необходимо разместить в доступном для сервиса месте (например в &amp;lt;code&amp;gt;/opt/pc/cp_ca/etc/&amp;lt;/code&amp;gt;), и указать путь к этому файлу в параметре &amp;lt;code&amp;gt;cpca20TrustedCertificatesPath&amp;lt;/code&amp;gt; конфигурационного файла.&lt;br /&gt;
&lt;br /&gt;
== Размещение ключей ==&lt;br /&gt;
&lt;br /&gt;
Файлы ключа и сертификата оператора в формате КриптоПро CSP HDImage необходимо разместить по по пути  &amp;lt;code&amp;gt;/var/opt/cprocsp/keys/ProcessUsername/OperatorKeyAlias&amp;lt;/code&amp;gt;, где вместо значений:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ProcessUsername&amp;lt;/code&amp;gt; должено быть указано имя пользователя, под которым запущен процесс PCS;&lt;br /&gt;
* &amp;lt;code&amp;gt;OperatorKeyAlias&amp;lt;/code&amp;gt; должен быть указан алиас оператора (для приведённого примера файла конфигурации это будет &amp;lt;code&amp;gt;Operator-1&amp;lt;/code&amp;gt; и путь будет следующий &amp;lt;code&amp;gt;/var/opt/cprocsp/keys/user/Operator-1&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Владельцем директорий &amp;lt;code&amp;gt;ProcessUsername/OperatorKeyAlias&amp;lt;/code&amp;gt; и файлов ключей должен быть пользователь, под которым запущен процесс PCS. Если эти директории принадлежат другому пользователю, необходимо скорректировать принадлежность, например, с помощью `chown`.&lt;br /&gt;
&lt;br /&gt;
= OpenSSL =&lt;br /&gt;
&lt;br /&gt;
== Конфигурирование PKI коннектора ==&lt;br /&gt;
&lt;br /&gt;
=== Путь к конфигурационному файлу коннектора ===&lt;br /&gt;
&lt;br /&gt;
Настройку необходимо внести в pc_sys_property БД PCS.&lt;br /&gt;
&lt;br /&gt;
PKI_SETTINGS_PATH      | /opt/pc/pki/pki-settings.properties&lt;br /&gt;
&lt;br /&gt;
Пример для PostgreSQL:&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;insert into pc_sys_property values (nextval(&#039;pc_setting_seq&#039;), &#039;PKI_SETTINGS_PATH&#039;, &#039;/opt/pc/pki/pki-settings.properties&#039;);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Пример конфигурационного файла ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# check certificate&#039;s expiration, cert path and other constrains during each cert use&lt;br /&gt;
checkCertificates=true&lt;br /&gt;
&lt;br /&gt;
# check certificate revocation status, to use checkCertificates must be true&lt;br /&gt;
checkRevocation=true&lt;br /&gt;
useCRL=true&lt;br /&gt;
useOCSP=false&lt;br /&gt;
&lt;br /&gt;
# -- OpenSSL Settings&lt;br /&gt;
caType=OpenSSL&lt;br /&gt;
issueCertificateCmd=/opt/pc/pki/issue_cert.sh&lt;br /&gt;
revokeCertificateCmd=/opt/pc/pki/revoke_cert.sh&lt;br /&gt;
&lt;br /&gt;
# files prefixes must contain path where tmp files will be stored&lt;br /&gt;
csrTmpFilePrefix=pc-openssl-connector-csr-&lt;br /&gt;
certTmpFilePrefix=pc-openssl-connector-cert-&lt;br /&gt;
&lt;br /&gt;
# certificate chain in PEM-format&lt;br /&gt;
#    the first certificate must be CA (self-signed), second - 1st intermediate, third - 2nd intermediate and so on&lt;br /&gt;
#    if checkRevocation is true, then each of intermediate certificates must contain OCSP url or CRL Distribution point&lt;br /&gt;
caChainFileName=/opt/pc/pki/Intermediate_CA/certs/intermediate.chain.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Пример файла выпуска сертификата ==&lt;br /&gt;
&lt;br /&gt;
=== ECDSA ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CA_DIR=/opt/pc/pki/Intermediate_CA&lt;br /&gt;
KEY_PASS=secretpassword&lt;br /&gt;
&lt;br /&gt;
DER_CSR_FILE_NAME=$1&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;$(basename -- $DER_CSR_FILE_NAME)&amp;quot;&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;${DER_CSR_BASE_FILE_NAME%.*}&amp;quot;&lt;br /&gt;
PEM_CSR_FILE_NAME=csr/$DER_CSR_BASE_FILE_NAME.pem&lt;br /&gt;
PEM_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.pem&lt;br /&gt;
DER_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.der&lt;br /&gt;
&lt;br /&gt;
DEST_CERT_FILE_NAME=$2&lt;br /&gt;
&lt;br /&gt;
cd $CA_DIR&lt;br /&gt;
openssl req -inform DER -in $DER_CSR_FILE_NAME -out $PEM_CSR_FILE_NAME&lt;br /&gt;
openssl ca -config openssl.cnf -extensions usr_cert -days 375 -notext -md sha256 -in $PEM_CSR_FILE_NAME -out $PEM_CERT_FILE_NAME -passin pass:$KEY_PASS -batch&lt;br /&gt;
openssl x509 -outform der -in $PEM_CERT_FILE_NAME -out $DER_CERT_FILE_NAME&lt;br /&gt;
&lt;br /&gt;
cp $DER_CERT_FILE_NAME $DEST_CERT_FILE_NAME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ГОСТ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CA_DIR=/opt/pc/pki/Intermediate_CA&lt;br /&gt;
KEY_PASS=secretpassword&lt;br /&gt;
&lt;br /&gt;
DER_CSR_FILE_NAME=$1&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;$(basename -- $DER_CSR_FILE_NAME)&amp;quot;&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;${DER_CSR_BASE_FILE_NAME%.*}&amp;quot;&lt;br /&gt;
PEM_CSR_FILE_NAME=csr/$DER_CSR_BASE_FILE_NAME.pem&lt;br /&gt;
PEM_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.pem&lt;br /&gt;
DER_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.der&lt;br /&gt;
&lt;br /&gt;
DEST_CERT_FILE_NAME=$2&lt;br /&gt;
&lt;br /&gt;
cd $CA_DIR&lt;br /&gt;
openssl req -inform DER -in $DER_CSR_FILE_NAME -out $PEM_CSR_FILE_NAME&lt;br /&gt;
openssl ca -config openssl.cnf -extensions usr_cert -days 375 -notext -md gost12_256 -in $PEM_CSR_FILE_NAME -out $PEM_CERT_FILE_NAME -passin pass:$KEY_PASS -batch&lt;br /&gt;
openssl x509 -outform der -in $PEM_CERT_FILE_NAME -out $DER_CERT_FILE_NAME&lt;br /&gt;
&lt;br /&gt;
cp $DER_CERT_FILE_NAME $DEST_CERT_FILE_NAME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Пример файла отзыва сертификата ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CERT_FILE_NAME=$1&lt;br /&gt;
KEY_PASS=secretpassword&lt;br /&gt;
CA_DIR=/opt/pc/pki/Intermediate_CA&lt;br /&gt;
INTERMEDIATE_CRL_LOCATION=crl/intermediate.crl&lt;br /&gt;
&lt;br /&gt;
cd $CA_DIR&lt;br /&gt;
&lt;br /&gt;
#revoke&lt;br /&gt;
openssl ca -config openssl.cnf -revoke $CERT_FILE_NAME -passin pass:$KEY_PASS&lt;br /&gt;
#publish CRL&lt;br /&gt;
openssl ca -config openssl.cnf -gencrl -out $INTERMEDIATE_CRL_LOCATION -passin pass:$KEY_PASS&lt;br /&gt;
cp -v $INTERMEDIATE_CRL_LOCATION /opt/pc/pki/pub/crl/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Пример файла скрипта публикации списка отзыва корневого УЦ ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
openssl ca \&lt;br /&gt;
-config /opt/pc/pki/Root_CA/openssl_host.cnf \&lt;br /&gt;
-gencrl \&lt;br /&gt;
-out /opt/pc/pki/Root_CA/crl/root.crl \&lt;br /&gt;
-passin pass:secretpassword&lt;br /&gt;
cp /opt/pc/pki/Root_CA/crl/root.crl /opt/pc/pki/pub/crl/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Пример файла скрипта публикации списка отзыва промежуточного УЦ ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
openssl ca \&lt;br /&gt;
-config /opt/pc/pki/Intermediate_CA/openssl_host.cnf \&lt;br /&gt;
-gencrl \&lt;br /&gt;
-out /opt/pc/pki/Intermediate_CA/crl/intermediate.crl \&lt;br /&gt;
-passin pass:secretpassword&lt;br /&gt;
cp /opt/pc/pki/Intermediate_CA/crl/intermediate.crl /opt/pc/pki/pub/crl/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Включение ГОСТ в OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== Установка модуля ГОСТ ===&lt;br /&gt;
&lt;br /&gt;
Для работы OpenSSL с криптоалгоритмами ГОСТ необходимо установить криптографическую библиотеку и настроить работу с этой библиотекой в конфигурационном файле, для этого:&lt;br /&gt;
&lt;br /&gt;
* Установите пакет &amp;lt;code&amp;gt;openssl-gost-engine&amp;lt;/code&amp;gt;, либо, если его нет в репозитории Вашего дистрибутива, скачайте по ссылке https://repo.paycontrol.org/cdn/artefacts/gost-engine/engine/gost.so (sha256sum: &amp;lt;code&amp;gt;435a0dee3273d924458c14ad57ac44b0711aa37fb3df9f2ba987a118f2339b1f  gost.so&amp;lt;/code&amp;gt;) и разместите скаченный файл криптобиблиотеки в директории модулей OpenSSL (в зависимости от дистрибутива это может быть &amp;lt;code&amp;gt;/usr/lib/engines-3/&amp;lt;/code&amp;gt;, или, например &amp;lt;code&amp;gt;/usr/lib64/engines-3/&amp;lt;/code&amp;gt;).&lt;br /&gt;
* В кофигурационный файл OpenSSL добавьте:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;openssl_conf = openssl_def&lt;br /&gt;
&lt;br /&gt;
[openssl_def]&lt;br /&gt;
engines = engine_section&lt;br /&gt;
&lt;br /&gt;
[engine_section]&lt;br /&gt;
gost = gost_section&lt;br /&gt;
&lt;br /&gt;
[gost_section]&lt;br /&gt;
engine_id = gost&lt;br /&gt;
dynamic_path = /usr/lib/engines-3/gost.so&lt;br /&gt;
default_algorithms = ALL &amp;lt;/syntaxhighlight&amp;gt;, где в качестве значения &amp;lt;code&amp;gt;dynamic_path&amp;lt;/code&amp;gt; должен быть указан путь к библиотеке &amp;lt;code&amp;gt;gost.so&amp;lt;/code&amp;gt;.&lt;br /&gt;
* В кофигурационном файле OpenSSL параметру &amp;lt;code&amp;gt;default_md&amp;lt;/code&amp;gt; необходимо установить значение &amp;lt;code&amp;gt;md_gost12_256&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример команд для создания корневого и промежуточного ГОСТ-УЦ в OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== Создание корневого сертификата ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
openssl genpkey -config openssl_intermediate.cnf -pass pass:$KEY_PASS -algorithm gost2012_256 -pkeyopt paramset:A -out private/root.key.pem&lt;br /&gt;
openssl req -config openssl_intermediate.cnf -key private/root.key.pem -passin pass:${PKI_KEY_PASS} -new -x509 -days 7300 -md_gost12_256 -extensions v3_ca -subj &amp;quot;${PKI_ROOT_SUBJECT}&amp;quot; -out certs/root.cert.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключа и запроса для промежуточного УЦ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
openssl genpkey -config openssl_root.cnf -pass pass:$KEY_PASS -algorithm gost2012_256 -pkeyopt paramset:A -out private/intermediate.key.pem&lt;br /&gt;
openssl req -config openssl_root.cnf -key private/intermediate.key.pem -passin pass:${PKI_KEY_PASS} -new -md_gost12_256 -subj &amp;quot;${PKI_INTERMEDIATE_SUBJECT}&amp;quot; -out csr/intermediate.csr.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Выпуск сертификата для промежуточного УЦ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
openssl ca -config openssl_intermediate.cnf -extensions v3_intermediate_ca -passin pass:${PKI_KEY_PASS} -days 3650 -notext -md gost12_256 -in ../Intermediate_CA/csr/intermediate.csr.pem -out ../Intermediate_CA/certs/intermediate.cert.pem -out certs/intermediate.cert.pem -batch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:OpenSSL]]&lt;br /&gt;
[[Категория:PKI]]&lt;br /&gt;
[[Категория:Сертификаты]]&lt;br /&gt;
[[Категория:КриптоПро УЦ]]&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=PayControl_PKI&amp;diff=877</id>
		<title>PayControl PKI</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=PayControl_PKI&amp;diff=877"/>
		<updated>2026-02-16T15:43:44Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: /* Размещение ключей */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= КриптоПро УЦ =&lt;br /&gt;
&lt;br /&gt;
С версии 6.9.0, PC может быть подключён к КриптоПро УЦ 2.0 (исполнение 15 и 16) для выпуска сертификатов пользователям PC.&lt;br /&gt;
&lt;br /&gt;
Коннектор к УЦ КриптоПро является модулем компонента PCS. Взаимодействие с УЦ КриптоПро ведётся через его компонент — центр регистрации.&lt;br /&gt;
&lt;br /&gt;
Для работы с УЦ КриптоПро необходимо включить коннектор, настроить его, добавить ключ для аутентификации запросов в центр регистрации (или два раздельных ключа, один для mTLS, второй для подписания запросов к ЦР), добавить корневой сертификат УЦ для проверки аутентичности сервера при подключении.&lt;br /&gt;
&lt;br /&gt;
== Конфигурирование PKI коннектора ==&lt;br /&gt;
&lt;br /&gt;
=== Указание пути к файлу конфигурации PKI коннектора ===&lt;br /&gt;
&lt;br /&gt;
Путь к файлу конфигурации устанавливается в настройках сервера PCS в параметре &amp;lt;code&amp;gt;PKI_SETTINGS_PATH&amp;lt;/code&amp;gt;. Значением по умолчанию является &amp;lt;code&amp;gt;/opt/pc/pki/pki-settings.properties&amp;lt;/code&amp;gt;. Способ установки описан в [https://repo.paycontrol.org/server/doc/latest/pc-reference-guide/ru/#установка-параметров|справочном руководстве].&lt;br /&gt;
&lt;br /&gt;
=== Состав файла конфигурации ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;# Connector type selection (MUST not be changed to use this connector)&lt;br /&gt;
# Указание типа коннектора (не подлежит изменению при использовании этого коннектора)&lt;br /&gt;
caType=CPCA20&lt;br /&gt;
&lt;br /&gt;
# Alias of the Operator&#039;s private key and certificate stored in HDImage&lt;br /&gt;
# Алиас закрытого ключа и сертификата оператора в HDImage хранилище (используется для установки mTLS и подписи запросов к УЦ)&lt;br /&gt;
cpca20OperatorKeyAlias=Operator-1&lt;br /&gt;
&lt;br /&gt;
# Password to the Operator&#039;s private key container&lt;br /&gt;
# Пароль закрытого ключа оператора&lt;br /&gt;
cpca20OperatorKeyPassword=&lt;br /&gt;
&lt;br /&gt;
# Trusted certificates in PEM for establishing TLS connection with CA&lt;br /&gt;
# Путь к файлу с доверенными сертификатами&lt;br /&gt;
cpca20TrustedCertificatesPath=/opt/pc/cp_ca/etc/904C46A177CC4BAA6B683AD47E4BF625FADD166B.pem&lt;br /&gt;
&lt;br /&gt;
# URL for the CA 2.0 instance&lt;br /&gt;
# Адрес центра регистрации УЦ КриптоПро для взаимодействия&lt;br /&gt;
cpca20InteractionUrl=https://cpca.loc&lt;br /&gt;
&lt;br /&gt;
# URL for the CA 2.0 distribution point&lt;br /&gt;
# Адрес распространения списков отзывов сертификатов&lt;br /&gt;
cpca20CrlDp=http://cpca.loc/cdp/904C46A177CC4BAA6B683AD47E4BF625FADD166B.crl&lt;br /&gt;
&lt;br /&gt;
# OID for the custom component in subject&#039;s DN (UnstructuredName)&lt;br /&gt;
# OID для поля UnstructuredName&lt;br /&gt;
cacp20UserNameOID=1.2.840.113549.1.9.2&lt;br /&gt;
&lt;br /&gt;
# OID for the certificate template to be included in the extensions of certificate requests&lt;br /&gt;
# OID шаблона сертификата для включения в расширение в запросе сертификата&lt;br /&gt;
cacp20CertTemplateOID=1.2.643.2.999.1.1.1&lt;br /&gt;
&lt;br /&gt;
# Folder to be used when creating users at RA&lt;br /&gt;
# Папка, в которой создаются сертификаты пользователей в ЦР УЦ КриптоПро&lt;br /&gt;
cacp20RegistrationFolder=Ra&lt;br /&gt;
&lt;br /&gt;
# Whether to use specified CRL DP for certificate checking (useful when CRL DP is not included into certificate extensions)&lt;br /&gt;
# Флаг разрешающий использование установленного в cpca20CrlDp адреса для получения списка отзыва сертификатов (для случаев, если в сертификате не указана точка распространения списка отзывов)&lt;br /&gt;
cacp20UseCrlDpForCertificateValidation=true&lt;br /&gt;
&lt;br /&gt;
# Timeout in milliseconds for establishing connection with CA&lt;br /&gt;
# Время ожидания установки TCP соединения с УЦ в мс&lt;br /&gt;
cacp20ConnectionTimeout=2000&lt;br /&gt;
&lt;br /&gt;
# Timeout in milliseconds for requesting connection from the connection manager&lt;br /&gt;
# Время ожидания готовности сервера принять запрос в мс&lt;br /&gt;
cacp20ConnectionRequestTimeout=2000&lt;br /&gt;
&lt;br /&gt;
# Timeout in milliseconds for getting response from CA&lt;br /&gt;
# Время ожидания ответа от УЦ в мс&lt;br /&gt;
cacp20ResponseTimeout=2000&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сертификат УЦ ===&lt;br /&gt;
&lt;br /&gt;
Сертификат УЦ необходимо разместить в доступном для сервиса месте (например в &amp;lt;code&amp;gt;/opt/pc/cp_ca/etc/&amp;lt;/code&amp;gt;), и указать путь к этому файлу в параметре &amp;lt;code&amp;gt;cpca20TrustedCertificatesPath&amp;lt;/code&amp;gt; конфигурационного файла.&lt;br /&gt;
&lt;br /&gt;
== Размещение ключей ==&lt;br /&gt;
&lt;br /&gt;
Файлы ключа и сертификата оператора в формате КриптоПро CSP HDImage необходимо разместить по по пути  &amp;lt;code&amp;gt;/var/opt/cprocsp/keys/ProcessUsername/OperatorKeyAlias&amp;lt;/code&amp;gt;, где вместо значений:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ProcessUsername&amp;lt;/code&amp;gt; должено быть указано имя пользователя, под которым запущен процесс PCS;&lt;br /&gt;
* &amp;lt;code&amp;gt;OperatorKeyAlias&amp;lt;/code&amp;gt; должен быть указан алиас оператора (для приведённого примера файла конфигурации это будет &amp;lt;code&amp;gt;Operator-1&amp;lt;/code&amp;gt; и путь будет следующий &amp;lt;code&amp;gt;/var/opt/cprocsp/keys/user/Operator-1&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Владельцем директорий &amp;lt;code&amp;gt;ProcessUsername/OperatorKeyAlias&amp;lt;/code&amp;gt; и файлов ключей должен быть пользователь, под которым запущен процесс PCS.&lt;br /&gt;
&lt;br /&gt;
= OpenSSL =&lt;br /&gt;
&lt;br /&gt;
== Конфигурирование PKI коннектора ==&lt;br /&gt;
&lt;br /&gt;
=== Путь к конфигурационному файлу коннектора ===&lt;br /&gt;
&lt;br /&gt;
Настройку необходимо внести в pc_sys_property БД PCS.&lt;br /&gt;
&lt;br /&gt;
PKI_SETTINGS_PATH      | /opt/pc/pki/pki-settings.properties&lt;br /&gt;
&lt;br /&gt;
Пример для PostgreSQL:&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;insert into pc_sys_property values (nextval(&#039;pc_setting_seq&#039;), &#039;PKI_SETTINGS_PATH&#039;, &#039;/opt/pc/pki/pki-settings.properties&#039;);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Пример конфигурационного файла ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# check certificate&#039;s expiration, cert path and other constrains during each cert use&lt;br /&gt;
checkCertificates=true&lt;br /&gt;
&lt;br /&gt;
# check certificate revocation status, to use checkCertificates must be true&lt;br /&gt;
checkRevocation=true&lt;br /&gt;
useCRL=true&lt;br /&gt;
useOCSP=false&lt;br /&gt;
&lt;br /&gt;
# -- OpenSSL Settings&lt;br /&gt;
caType=OpenSSL&lt;br /&gt;
issueCertificateCmd=/opt/pc/pki/issue_cert.sh&lt;br /&gt;
revokeCertificateCmd=/opt/pc/pki/revoke_cert.sh&lt;br /&gt;
&lt;br /&gt;
# files prefixes must contain path where tmp files will be stored&lt;br /&gt;
csrTmpFilePrefix=pc-openssl-connector-csr-&lt;br /&gt;
certTmpFilePrefix=pc-openssl-connector-cert-&lt;br /&gt;
&lt;br /&gt;
# certificate chain in PEM-format&lt;br /&gt;
#    the first certificate must be CA (self-signed), second - 1st intermediate, third - 2nd intermediate and so on&lt;br /&gt;
#    if checkRevocation is true, then each of intermediate certificates must contain OCSP url or CRL Distribution point&lt;br /&gt;
caChainFileName=/opt/pc/pki/Intermediate_CA/certs/intermediate.chain.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Пример файла выпуска сертификата ==&lt;br /&gt;
&lt;br /&gt;
=== ECDSA ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CA_DIR=/opt/pc/pki/Intermediate_CA&lt;br /&gt;
KEY_PASS=secretpassword&lt;br /&gt;
&lt;br /&gt;
DER_CSR_FILE_NAME=$1&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;$(basename -- $DER_CSR_FILE_NAME)&amp;quot;&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;${DER_CSR_BASE_FILE_NAME%.*}&amp;quot;&lt;br /&gt;
PEM_CSR_FILE_NAME=csr/$DER_CSR_BASE_FILE_NAME.pem&lt;br /&gt;
PEM_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.pem&lt;br /&gt;
DER_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.der&lt;br /&gt;
&lt;br /&gt;
DEST_CERT_FILE_NAME=$2&lt;br /&gt;
&lt;br /&gt;
cd $CA_DIR&lt;br /&gt;
openssl req -inform DER -in $DER_CSR_FILE_NAME -out $PEM_CSR_FILE_NAME&lt;br /&gt;
openssl ca -config openssl.cnf -extensions usr_cert -days 375 -notext -md sha256 -in $PEM_CSR_FILE_NAME -out $PEM_CERT_FILE_NAME -passin pass:$KEY_PASS -batch&lt;br /&gt;
openssl x509 -outform der -in $PEM_CERT_FILE_NAME -out $DER_CERT_FILE_NAME&lt;br /&gt;
&lt;br /&gt;
cp $DER_CERT_FILE_NAME $DEST_CERT_FILE_NAME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ГОСТ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CA_DIR=/opt/pc/pki/Intermediate_CA&lt;br /&gt;
KEY_PASS=secretpassword&lt;br /&gt;
&lt;br /&gt;
DER_CSR_FILE_NAME=$1&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;$(basename -- $DER_CSR_FILE_NAME)&amp;quot;&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;${DER_CSR_BASE_FILE_NAME%.*}&amp;quot;&lt;br /&gt;
PEM_CSR_FILE_NAME=csr/$DER_CSR_BASE_FILE_NAME.pem&lt;br /&gt;
PEM_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.pem&lt;br /&gt;
DER_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.der&lt;br /&gt;
&lt;br /&gt;
DEST_CERT_FILE_NAME=$2&lt;br /&gt;
&lt;br /&gt;
cd $CA_DIR&lt;br /&gt;
openssl req -inform DER -in $DER_CSR_FILE_NAME -out $PEM_CSR_FILE_NAME&lt;br /&gt;
openssl ca -config openssl.cnf -extensions usr_cert -days 375 -notext -md gost12_256 -in $PEM_CSR_FILE_NAME -out $PEM_CERT_FILE_NAME -passin pass:$KEY_PASS -batch&lt;br /&gt;
openssl x509 -outform der -in $PEM_CERT_FILE_NAME -out $DER_CERT_FILE_NAME&lt;br /&gt;
&lt;br /&gt;
cp $DER_CERT_FILE_NAME $DEST_CERT_FILE_NAME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Пример файла отзыва сертификата ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CERT_FILE_NAME=$1&lt;br /&gt;
KEY_PASS=secretpassword&lt;br /&gt;
CA_DIR=/opt/pc/pki/Intermediate_CA&lt;br /&gt;
INTERMEDIATE_CRL_LOCATION=crl/intermediate.crl&lt;br /&gt;
&lt;br /&gt;
cd $CA_DIR&lt;br /&gt;
&lt;br /&gt;
#revoke&lt;br /&gt;
openssl ca -config openssl.cnf -revoke $CERT_FILE_NAME -passin pass:$KEY_PASS&lt;br /&gt;
#publish CRL&lt;br /&gt;
openssl ca -config openssl.cnf -gencrl -out $INTERMEDIATE_CRL_LOCATION -passin pass:$KEY_PASS&lt;br /&gt;
cp -v $INTERMEDIATE_CRL_LOCATION /opt/pc/pki/pub/crl/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Пример файла скрипта публикации списка отзыва корневого УЦ ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
openssl ca \&lt;br /&gt;
-config /opt/pc/pki/Root_CA/openssl_host.cnf \&lt;br /&gt;
-gencrl \&lt;br /&gt;
-out /opt/pc/pki/Root_CA/crl/root.crl \&lt;br /&gt;
-passin pass:secretpassword&lt;br /&gt;
cp /opt/pc/pki/Root_CA/crl/root.crl /opt/pc/pki/pub/crl/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Пример файла скрипта публикации списка отзыва промежуточного УЦ ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
openssl ca \&lt;br /&gt;
-config /opt/pc/pki/Intermediate_CA/openssl_host.cnf \&lt;br /&gt;
-gencrl \&lt;br /&gt;
-out /opt/pc/pki/Intermediate_CA/crl/intermediate.crl \&lt;br /&gt;
-passin pass:secretpassword&lt;br /&gt;
cp /opt/pc/pki/Intermediate_CA/crl/intermediate.crl /opt/pc/pki/pub/crl/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Включение ГОСТ в OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== Установка модуля ГОСТ ===&lt;br /&gt;
&lt;br /&gt;
Для работы OpenSSL с криптоалгоритмами ГОСТ необходимо установить криптографическую библиотеку и настроить работу с этой библиотекой в конфигурационном файле, для этого:&lt;br /&gt;
&lt;br /&gt;
* Установите пакет &amp;lt;code&amp;gt;openssl-gost-engine&amp;lt;/code&amp;gt;, либо, если его нет в репозитории Вашего дистрибутива, скачайте по ссылке https://repo.paycontrol.org/cdn/artefacts/gost-engine/engine/gost.so (sha256sum: &amp;lt;code&amp;gt;435a0dee3273d924458c14ad57ac44b0711aa37fb3df9f2ba987a118f2339b1f  gost.so&amp;lt;/code&amp;gt;) и разместите скаченный файл криптобиблиотеки в директории модулей OpenSSL (в зависимости от дистрибутива это может быть &amp;lt;code&amp;gt;/usr/lib/engines-3/&amp;lt;/code&amp;gt;, или, например &amp;lt;code&amp;gt;/usr/lib64/engines-3/&amp;lt;/code&amp;gt;).&lt;br /&gt;
* В кофигурационный файл OpenSSL добавьте:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;openssl_conf = openssl_def&lt;br /&gt;
&lt;br /&gt;
[openssl_def]&lt;br /&gt;
engines = engine_section&lt;br /&gt;
&lt;br /&gt;
[engine_section]&lt;br /&gt;
gost = gost_section&lt;br /&gt;
&lt;br /&gt;
[gost_section]&lt;br /&gt;
engine_id = gost&lt;br /&gt;
dynamic_path = /usr/lib/engines-3/gost.so&lt;br /&gt;
default_algorithms = ALL &amp;lt;/syntaxhighlight&amp;gt;, где в качестве значения &amp;lt;code&amp;gt;dynamic_path&amp;lt;/code&amp;gt; должен быть указан путь к библиотеке &amp;lt;code&amp;gt;gost.so&amp;lt;/code&amp;gt;.&lt;br /&gt;
* В кофигурационном файле OpenSSL параметру &amp;lt;code&amp;gt;default_md&amp;lt;/code&amp;gt; необходимо установить значение &amp;lt;code&amp;gt;md_gost12_256&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример команд для создания корневого и промежуточного ГОСТ-УЦ в OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== Создание корневого сертификата ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
openssl genpkey -config openssl_intermediate.cnf -pass pass:$KEY_PASS -algorithm gost2012_256 -pkeyopt paramset:A -out private/root.key.pem&lt;br /&gt;
openssl req -config openssl_intermediate.cnf -key private/root.key.pem -passin pass:${PKI_KEY_PASS} -new -x509 -days 7300 -md_gost12_256 -extensions v3_ca -subj &amp;quot;${PKI_ROOT_SUBJECT}&amp;quot; -out certs/root.cert.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключа и запроса для промежуточного УЦ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
openssl genpkey -config openssl_root.cnf -pass pass:$KEY_PASS -algorithm gost2012_256 -pkeyopt paramset:A -out private/intermediate.key.pem&lt;br /&gt;
openssl req -config openssl_root.cnf -key private/intermediate.key.pem -passin pass:${PKI_KEY_PASS} -new -md_gost12_256 -subj &amp;quot;${PKI_INTERMEDIATE_SUBJECT}&amp;quot; -out csr/intermediate.csr.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Выпуск сертификата для промежуточного УЦ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
openssl ca -config openssl_intermediate.cnf -extensions v3_intermediate_ca -passin pass:${PKI_KEY_PASS} -days 3650 -notext -md gost12_256 -in ../Intermediate_CA/csr/intermediate.csr.pem -out ../Intermediate_CA/certs/intermediate.cert.pem -out certs/intermediate.cert.pem -batch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:OpenSSL]]&lt;br /&gt;
[[Категория:PKI]]&lt;br /&gt;
[[Категория:Сертификаты]]&lt;br /&gt;
[[Категория:КриптоПро УЦ]]&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%9F%D1%80%D0%BE_%D0%A3%D0%A6&amp;diff=876</id>
		<title>Категория:КриптоПро УЦ</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%9F%D1%80%D0%BE_%D0%A3%D0%A6&amp;diff=876"/>
		<updated>2026-01-28T23:04:19Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: Создана пустая страница&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=PayControl_PKI&amp;diff=875</id>
		<title>PayControl PKI</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=PayControl_PKI&amp;diff=875"/>
		<updated>2026-01-28T23:03:02Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= КриптоПро УЦ =&lt;br /&gt;
&lt;br /&gt;
С версии 6.9.0, PC может быть подключён к КриптоПро УЦ 2.0 (исполнение 15 и 16) для выпуска сертификатов пользователям PC.&lt;br /&gt;
&lt;br /&gt;
Коннектор к УЦ КриптоПро является модулем компонента PCS. Взаимодействие с УЦ КриптоПро ведётся через его компонент — центр регистрации.&lt;br /&gt;
&lt;br /&gt;
Для работы с УЦ КриптоПро необходимо включить коннектор, настроить его, добавить ключ для аутентификации запросов в центр регистрации (или два раздельных ключа, один для mTLS, второй для подписания запросов к ЦР), добавить корневой сертификат УЦ для проверки аутентичности сервера при подключении.&lt;br /&gt;
&lt;br /&gt;
== Конфигурирование PKI коннектора ==&lt;br /&gt;
&lt;br /&gt;
=== Указание пути к файлу конфигурации PKI коннектора ===&lt;br /&gt;
&lt;br /&gt;
Путь к файлу конфигурации устанавливается в настройках сервера PCS в параметре &amp;lt;code&amp;gt;PKI_SETTINGS_PATH&amp;lt;/code&amp;gt;. Значением по умолчанию является &amp;lt;code&amp;gt;/opt/pc/pki/pki-settings.properties&amp;lt;/code&amp;gt;. Способ установки описан в [https://repo.paycontrol.org/server/doc/latest/pc-reference-guide/ru/#установка-параметров|справочном руководстве].&lt;br /&gt;
&lt;br /&gt;
=== Состав файла конфигурации ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;# Connector type selection (MUST not be changed to use this connector)&lt;br /&gt;
# Указание типа коннектора (не подлежит изменению при использовании этого коннектора)&lt;br /&gt;
caType=CPCA20&lt;br /&gt;
&lt;br /&gt;
# Alias of the Operator&#039;s private key and certificate stored in HDImage&lt;br /&gt;
# Алиас закрытого ключа и сертификата оператора в HDImage хранилище (используется для установки mTLS и подписи запросов к УЦ)&lt;br /&gt;
cpca20OperatorKeyAlias=Operator-1&lt;br /&gt;
&lt;br /&gt;
# Password to the Operator&#039;s private key container&lt;br /&gt;
# Пароль закрытого ключа оператора&lt;br /&gt;
cpca20OperatorKeyPassword=&lt;br /&gt;
&lt;br /&gt;
# Trusted certificates in PEM for establishing TLS connection with CA&lt;br /&gt;
# Путь к файлу с доверенными сертификатами&lt;br /&gt;
cpca20TrustedCertificatesPath=/opt/pc/cp_ca/etc/904C46A177CC4BAA6B683AD47E4BF625FADD166B.pem&lt;br /&gt;
&lt;br /&gt;
# URL for the CA 2.0 instance&lt;br /&gt;
# Адрес центра регистрации УЦ КриптоПро для взаимодействия&lt;br /&gt;
cpca20InteractionUrl=https://cpca.loc&lt;br /&gt;
&lt;br /&gt;
# URL for the CA 2.0 distribution point&lt;br /&gt;
# Адрес распространения списков отзывов сертификатов&lt;br /&gt;
cpca20CrlDp=http://cpca.loc/cdp/904C46A177CC4BAA6B683AD47E4BF625FADD166B.crl&lt;br /&gt;
&lt;br /&gt;
# OID for the custom component in subject&#039;s DN (UnstructuredName)&lt;br /&gt;
# OID для поля UnstructuredName&lt;br /&gt;
cacp20UserNameOID=1.2.840.113549.1.9.2&lt;br /&gt;
&lt;br /&gt;
# OID for the certificate template to be included in the extensions of certificate requests&lt;br /&gt;
# OID шаблона сертификата для включения в расширение в запросе сертификата&lt;br /&gt;
cacp20CertTemplateOID=1.2.643.2.999.1.1.1&lt;br /&gt;
&lt;br /&gt;
# Folder to be used when creating users at RA&lt;br /&gt;
# Папка, в которой создаются сертификаты пользователей в ЦР УЦ КриптоПро&lt;br /&gt;
cacp20RegistrationFolder=Ra&lt;br /&gt;
&lt;br /&gt;
# Whether to use specified CRL DP for certificate checking (useful when CRL DP is not included into certificate extensions)&lt;br /&gt;
# Флаг разрешающий использование установленного в cpca20CrlDp адреса для получения списка отзыва сертификатов (для случаев, если в сертификате не указана точка распространения списка отзывов)&lt;br /&gt;
cacp20UseCrlDpForCertificateValidation=true&lt;br /&gt;
&lt;br /&gt;
# Timeout in milliseconds for establishing connection with CA&lt;br /&gt;
# Время ожидания установки TCP соединения с УЦ в мс&lt;br /&gt;
cacp20ConnectionTimeout=2000&lt;br /&gt;
&lt;br /&gt;
# Timeout in milliseconds for requesting connection from the connection manager&lt;br /&gt;
# Время ожидания готовности сервера принять запрос в мс&lt;br /&gt;
cacp20ConnectionRequestTimeout=2000&lt;br /&gt;
&lt;br /&gt;
# Timeout in milliseconds for getting response from CA&lt;br /&gt;
# Время ожидания ответа от УЦ в мс&lt;br /&gt;
cacp20ResponseTimeout=2000&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сертификат УЦ ===&lt;br /&gt;
&lt;br /&gt;
Сертификат УЦ необходимо разместить в доступном для сервиса месте (например в &amp;lt;code&amp;gt;/opt/pc/cp_ca/etc/&amp;lt;/code&amp;gt;), и указать путь к этому файлу в параметре &amp;lt;code&amp;gt;cpca20TrustedCertificatesPath&amp;lt;/code&amp;gt; конфигурационного файла.&lt;br /&gt;
&lt;br /&gt;
== Размещение ключей ==&lt;br /&gt;
&lt;br /&gt;
Файлы ключа и сертификата оператора в формате КриптоПро CSP HDImage необходимо разместить по по пути  &amp;lt;code&amp;gt;/var/opt/cprocsp/keys/user/OperatorKeyAlias&amp;lt;/code&amp;gt;, где вместо значений:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ProcessUsername&amp;lt;/code&amp;gt; должено быть указано имя пользователя, под которым запущен процесс PCS;&lt;br /&gt;
* &amp;lt;code&amp;gt;OperatorKeyAlias&amp;lt;/code&amp;gt; должен быть указан алиас оператора (для приведённого примера файла конфигурации это будет &amp;lt;code&amp;gt;Operator-1&amp;lt;/code&amp;gt; и путь будет следующий &amp;lt;code&amp;gt;/var/opt/cprocsp/keys/user/Operator-1&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Владельцем директорий &amp;lt;code&amp;gt;ProcessUsername/OperatorKeyAlias&amp;lt;/code&amp;gt; и файлов ключей должен быть пользователь, под которым запущен процесс PCS.&lt;br /&gt;
&lt;br /&gt;
= OpenSSL =&lt;br /&gt;
&lt;br /&gt;
== Конфигурирование PKI коннектора ==&lt;br /&gt;
&lt;br /&gt;
=== Путь к конфигурационному файлу коннектора ===&lt;br /&gt;
&lt;br /&gt;
Настройку необходимо внести в pc_sys_property БД PCS.&lt;br /&gt;
&lt;br /&gt;
PKI_SETTINGS_PATH      | /opt/pc/pki/pki-settings.properties&lt;br /&gt;
&lt;br /&gt;
Пример для PostgreSQL:&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;insert into pc_sys_property values (nextval(&#039;pc_setting_seq&#039;), &#039;PKI_SETTINGS_PATH&#039;, &#039;/opt/pc/pki/pki-settings.properties&#039;);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Пример конфигурационного файла ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# check certificate&#039;s expiration, cert path and other constrains during each cert use&lt;br /&gt;
checkCertificates=true&lt;br /&gt;
&lt;br /&gt;
# check certificate revocation status, to use checkCertificates must be true&lt;br /&gt;
checkRevocation=true&lt;br /&gt;
useCRL=true&lt;br /&gt;
useOCSP=false&lt;br /&gt;
&lt;br /&gt;
# -- OpenSSL Settings&lt;br /&gt;
caType=OpenSSL&lt;br /&gt;
issueCertificateCmd=/opt/pc/pki/issue_cert.sh&lt;br /&gt;
revokeCertificateCmd=/opt/pc/pki/revoke_cert.sh&lt;br /&gt;
&lt;br /&gt;
# files prefixes must contain path where tmp files will be stored&lt;br /&gt;
csrTmpFilePrefix=pc-openssl-connector-csr-&lt;br /&gt;
certTmpFilePrefix=pc-openssl-connector-cert-&lt;br /&gt;
&lt;br /&gt;
# certificate chain in PEM-format&lt;br /&gt;
#    the first certificate must be CA (self-signed), second - 1st intermediate, third - 2nd intermediate and so on&lt;br /&gt;
#    if checkRevocation is true, then each of intermediate certificates must contain OCSP url or CRL Distribution point&lt;br /&gt;
caChainFileName=/opt/pc/pki/Intermediate_CA/certs/intermediate.chain.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Пример файла выпуска сертификата ==&lt;br /&gt;
&lt;br /&gt;
=== ECDSA ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CA_DIR=/opt/pc/pki/Intermediate_CA&lt;br /&gt;
KEY_PASS=secretpassword&lt;br /&gt;
&lt;br /&gt;
DER_CSR_FILE_NAME=$1&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;$(basename -- $DER_CSR_FILE_NAME)&amp;quot;&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;${DER_CSR_BASE_FILE_NAME%.*}&amp;quot;&lt;br /&gt;
PEM_CSR_FILE_NAME=csr/$DER_CSR_BASE_FILE_NAME.pem&lt;br /&gt;
PEM_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.pem&lt;br /&gt;
DER_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.der&lt;br /&gt;
&lt;br /&gt;
DEST_CERT_FILE_NAME=$2&lt;br /&gt;
&lt;br /&gt;
cd $CA_DIR&lt;br /&gt;
openssl req -inform DER -in $DER_CSR_FILE_NAME -out $PEM_CSR_FILE_NAME&lt;br /&gt;
openssl ca -config openssl.cnf -extensions usr_cert -days 375 -notext -md sha256 -in $PEM_CSR_FILE_NAME -out $PEM_CERT_FILE_NAME -passin pass:$KEY_PASS -batch&lt;br /&gt;
openssl x509 -outform der -in $PEM_CERT_FILE_NAME -out $DER_CERT_FILE_NAME&lt;br /&gt;
&lt;br /&gt;
cp $DER_CERT_FILE_NAME $DEST_CERT_FILE_NAME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ГОСТ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CA_DIR=/opt/pc/pki/Intermediate_CA&lt;br /&gt;
KEY_PASS=secretpassword&lt;br /&gt;
&lt;br /&gt;
DER_CSR_FILE_NAME=$1&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;$(basename -- $DER_CSR_FILE_NAME)&amp;quot;&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;${DER_CSR_BASE_FILE_NAME%.*}&amp;quot;&lt;br /&gt;
PEM_CSR_FILE_NAME=csr/$DER_CSR_BASE_FILE_NAME.pem&lt;br /&gt;
PEM_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.pem&lt;br /&gt;
DER_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.der&lt;br /&gt;
&lt;br /&gt;
DEST_CERT_FILE_NAME=$2&lt;br /&gt;
&lt;br /&gt;
cd $CA_DIR&lt;br /&gt;
openssl req -inform DER -in $DER_CSR_FILE_NAME -out $PEM_CSR_FILE_NAME&lt;br /&gt;
openssl ca -config openssl.cnf -extensions usr_cert -days 375 -notext -md gost12_256 -in $PEM_CSR_FILE_NAME -out $PEM_CERT_FILE_NAME -passin pass:$KEY_PASS -batch&lt;br /&gt;
openssl x509 -outform der -in $PEM_CERT_FILE_NAME -out $DER_CERT_FILE_NAME&lt;br /&gt;
&lt;br /&gt;
cp $DER_CERT_FILE_NAME $DEST_CERT_FILE_NAME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Пример файла отзыва сертификата ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CERT_FILE_NAME=$1&lt;br /&gt;
KEY_PASS=secretpassword&lt;br /&gt;
CA_DIR=/opt/pc/pki/Intermediate_CA&lt;br /&gt;
INTERMEDIATE_CRL_LOCATION=crl/intermediate.crl&lt;br /&gt;
&lt;br /&gt;
cd $CA_DIR&lt;br /&gt;
&lt;br /&gt;
#revoke&lt;br /&gt;
openssl ca -config openssl.cnf -revoke $CERT_FILE_NAME -passin pass:$KEY_PASS&lt;br /&gt;
#publish CRL&lt;br /&gt;
openssl ca -config openssl.cnf -gencrl -out $INTERMEDIATE_CRL_LOCATION -passin pass:$KEY_PASS&lt;br /&gt;
cp -v $INTERMEDIATE_CRL_LOCATION /opt/pc/pki/pub/crl/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Пример файла скрипта публикации списка отзыва корневого УЦ ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
openssl ca \&lt;br /&gt;
-config /opt/pc/pki/Root_CA/openssl_host.cnf \&lt;br /&gt;
-gencrl \&lt;br /&gt;
-out /opt/pc/pki/Root_CA/crl/root.crl \&lt;br /&gt;
-passin pass:secretpassword&lt;br /&gt;
cp /opt/pc/pki/Root_CA/crl/root.crl /opt/pc/pki/pub/crl/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Пример файла скрипта публикации списка отзыва промежуточного УЦ ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
openssl ca \&lt;br /&gt;
-config /opt/pc/pki/Intermediate_CA/openssl_host.cnf \&lt;br /&gt;
-gencrl \&lt;br /&gt;
-out /opt/pc/pki/Intermediate_CA/crl/intermediate.crl \&lt;br /&gt;
-passin pass:secretpassword&lt;br /&gt;
cp /opt/pc/pki/Intermediate_CA/crl/intermediate.crl /opt/pc/pki/pub/crl/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Включение ГОСТ в OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== Установка модуля ГОСТ ===&lt;br /&gt;
&lt;br /&gt;
Для работы OpenSSL с криптоалгоритмами ГОСТ необходимо установить криптографическую библиотеку и настроить работу с этой библиотекой в конфигурационном файле, для этого:&lt;br /&gt;
&lt;br /&gt;
* Установите пакет &amp;lt;code&amp;gt;openssl-gost-engine&amp;lt;/code&amp;gt;, либо, если его нет в репозитории Вашего дистрибутива, скачайте по ссылке https://repo.paycontrol.org/cdn/artefacts/gost-engine/engine/gost.so (sha256sum: &amp;lt;code&amp;gt;435a0dee3273d924458c14ad57ac44b0711aa37fb3df9f2ba987a118f2339b1f  gost.so&amp;lt;/code&amp;gt;) и разместите скаченный файл криптобиблиотеки в директории модулей OpenSSL (в зависимости от дистрибутива это может быть &amp;lt;code&amp;gt;/usr/lib/engines-3/&amp;lt;/code&amp;gt;, или, например &amp;lt;code&amp;gt;/usr/lib64/engines-3/&amp;lt;/code&amp;gt;).&lt;br /&gt;
* В кофигурационный файл OpenSSL добавьте:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;openssl_conf = openssl_def&lt;br /&gt;
&lt;br /&gt;
[openssl_def]&lt;br /&gt;
engines = engine_section&lt;br /&gt;
&lt;br /&gt;
[engine_section]&lt;br /&gt;
gost = gost_section&lt;br /&gt;
&lt;br /&gt;
[gost_section]&lt;br /&gt;
engine_id = gost&lt;br /&gt;
dynamic_path = /usr/lib/engines-3/gost.so&lt;br /&gt;
default_algorithms = ALL &amp;lt;/syntaxhighlight&amp;gt;, где в качестве значения &amp;lt;code&amp;gt;dynamic_path&amp;lt;/code&amp;gt; должен быть указан путь к библиотеке &amp;lt;code&amp;gt;gost.so&amp;lt;/code&amp;gt;.&lt;br /&gt;
* В кофигурационном файле OpenSSL параметру &amp;lt;code&amp;gt;default_md&amp;lt;/code&amp;gt; необходимо установить значение &amp;lt;code&amp;gt;md_gost12_256&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример команд для создания корневого и промежуточного ГОСТ-УЦ в OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== Создание корневого сертификата ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
openssl genpkey -config openssl_intermediate.cnf -pass pass:$KEY_PASS -algorithm gost2012_256 -pkeyopt paramset:A -out private/root.key.pem&lt;br /&gt;
openssl req -config openssl_intermediate.cnf -key private/root.key.pem -passin pass:${PKI_KEY_PASS} -new -x509 -days 7300 -md_gost12_256 -extensions v3_ca -subj &amp;quot;${PKI_ROOT_SUBJECT}&amp;quot; -out certs/root.cert.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключа и запроса для промежуточного УЦ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
openssl genpkey -config openssl_root.cnf -pass pass:$KEY_PASS -algorithm gost2012_256 -pkeyopt paramset:A -out private/intermediate.key.pem&lt;br /&gt;
openssl req -config openssl_root.cnf -key private/intermediate.key.pem -passin pass:${PKI_KEY_PASS} -new -md_gost12_256 -subj &amp;quot;${PKI_INTERMEDIATE_SUBJECT}&amp;quot; -out csr/intermediate.csr.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Выпуск сертификата для промежуточного УЦ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
openssl ca -config openssl_intermediate.cnf -extensions v3_intermediate_ca -passin pass:${PKI_KEY_PASS} -days 3650 -notext -md gost12_256 -in ../Intermediate_CA/csr/intermediate.csr.pem -out ../Intermediate_CA/certs/intermediate.cert.pem -out certs/intermediate.cert.pem -batch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:OpenSSL]]&lt;br /&gt;
[[Категория:PKI]]&lt;br /&gt;
[[Категория:Сертификаты]]&lt;br /&gt;
[[Категория:КриптоПро УЦ]]&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=PayControl_PKI&amp;diff=874</id>
		<title>PayControl PKI</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=PayControl_PKI&amp;diff=874"/>
		<updated>2026-01-28T22:54:43Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= КриптоПро УЦ =&lt;br /&gt;
&lt;br /&gt;
PC может быть подключен к УЦ КриптоПро для выпуска сертификатов пользователям PC.&lt;br /&gt;
&lt;br /&gt;
Коннектор к УЦ КриптоПро является модулем компонента PCS. Взаимодействие с УЦ КриптоПро ведётся через его компонент — центр регистрации.&lt;br /&gt;
&lt;br /&gt;
Для работы с УЦ КриптоПро необходимо включить коннектор, настроить его, добавить ключ для аутентификации запросов в центр регистрации (или два раздельных ключа, один для mTLS, второй для подписания запросов к ЦР), добавить корневой сертификат УЦ для проверки аутентичности сервера при подключении.&lt;br /&gt;
&lt;br /&gt;
== Конфигурирование PKI коннектора ==&lt;br /&gt;
&lt;br /&gt;
=== Указание пути к файлу конфигурации PKI коннектора ===&lt;br /&gt;
&lt;br /&gt;
Путь к файлу конфигурации устанавливается в настройках сервера PCS в параметре &amp;lt;code&amp;gt;PKI_SETTINGS_PATH&amp;lt;/code&amp;gt;. Значением по умолчанию является &amp;lt;code&amp;gt;/opt/pc/pki/pki-settings.properties&amp;lt;/code&amp;gt;. Способ установки описан в [https://repo.paycontrol.org/server/doc/latest/pc-reference-guide/ru/#установка-параметров|справочном руководстве].&lt;br /&gt;
&lt;br /&gt;
=== Состав файла конфигурации ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;# Connector type selection (MUST not be changed to use this connector)&lt;br /&gt;
# Указание типа коннектора (не подлежит изменению при использовании этого коннектора)&lt;br /&gt;
caType=CPCA20&lt;br /&gt;
&lt;br /&gt;
# Alias of the Operator&#039;s private key and certificate stored in HDImage&lt;br /&gt;
# Алиас закрытого ключа и сертификата оператора в HDImage хранилище (используется для установки mTLS и подписи запросов к УЦ)&lt;br /&gt;
cpca20OperatorKeyAlias=Operator-1&lt;br /&gt;
&lt;br /&gt;
# Password to the Operator&#039;s private key container&lt;br /&gt;
# Пароль закрытого ключа оператора&lt;br /&gt;
cpca20OperatorKeyPassword=&lt;br /&gt;
&lt;br /&gt;
# Trusted certificates in PEM for establishing TLS connection with CA&lt;br /&gt;
# Путь к файлу с доверенными сертификатами&lt;br /&gt;
cpca20TrustedCertificatesPath=/opt/pc/cp_ca/etc/904C46A177CC4BAA6B683AD47E4BF625FADD166B.pem&lt;br /&gt;
&lt;br /&gt;
# URL for the CA 2.0 instance&lt;br /&gt;
# Адрес центра регистрации УЦ КриптоПро для взаимодействия&lt;br /&gt;
cpca20InteractionUrl=https://cpca.loc&lt;br /&gt;
&lt;br /&gt;
# URL for the CA 2.0 distribution point&lt;br /&gt;
# Адрес распространения списков отзывов сертификатов&lt;br /&gt;
cpca20CrlDp=http://cpca.loc/cdp/904C46A177CC4BAA6B683AD47E4BF625FADD166B.crl&lt;br /&gt;
&lt;br /&gt;
# OID for the custom component in subject&#039;s DN (UnstructuredName)&lt;br /&gt;
# OID для поля UnstructuredName&lt;br /&gt;
cacp20UserNameOID=1.2.840.113549.1.9.2&lt;br /&gt;
&lt;br /&gt;
# OID for the certificate template to be included in the extensions of certificate requests&lt;br /&gt;
# OID шаблона сертификата для включения в расширение в запросе сертификата&lt;br /&gt;
cacp20CertTemplateOID=1.2.643.2.999.1.1.1&lt;br /&gt;
&lt;br /&gt;
# Folder to be used when creating users at RA&lt;br /&gt;
# Папка, в которой создаются сертификаты пользователей в ЦР УЦ КриптоПро&lt;br /&gt;
cacp20RegistrationFolder=Ra&lt;br /&gt;
&lt;br /&gt;
# Whether to use specified CRL DP for certificate checking (useful when CRL DP is not included into certificate extensions)&lt;br /&gt;
# Флаг разрешающий использование установленного в cpca20CrlDp адреса для получения списка отзыва сертификатов (для случаев, если в сертификате не указана точка распространения списка отзывов)&lt;br /&gt;
cacp20UseCrlDpForCertificateValidation=true&lt;br /&gt;
&lt;br /&gt;
# Timeout in milliseconds for establishing connection with CA&lt;br /&gt;
# Время ожидания установки TCP соединения с УЦ в мс&lt;br /&gt;
cacp20ConnectionTimeout=2000&lt;br /&gt;
&lt;br /&gt;
# Timeout in milliseconds for requesting connection from the connection manager&lt;br /&gt;
# Время ожидания готовности сервера принять запрос в мс&lt;br /&gt;
cacp20ConnectionRequestTimeout=2000&lt;br /&gt;
&lt;br /&gt;
# Timeout in milliseconds for getting response from CA&lt;br /&gt;
# Время ожидания ответа от УЦ в мс&lt;br /&gt;
cacp20ResponseTimeout=2000&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сертификат УЦ ===&lt;br /&gt;
&lt;br /&gt;
Сертификат УЦ необходимо разместить в доступном для сервиса месте (например в &amp;lt;code&amp;gt;/opt/pc/cp_ca/etc/&amp;lt;/code&amp;gt;), и указать путь к этому файлу в параметре &amp;lt;code&amp;gt;cpca20TrustedCertificatesPath&amp;lt;/code&amp;gt; конфигурационного файла.&lt;br /&gt;
&lt;br /&gt;
== Размещение ключей ==&lt;br /&gt;
&lt;br /&gt;
Файлы ключа и сертификата оператора в формате КриптоПро CSP HDImage необходимо разместить по по пути  &amp;lt;code&amp;gt;/var/opt/cprocsp/keys/user/OperatorKeyAlias&amp;lt;/code&amp;gt;, где вместо значений:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ProcessUsername&amp;lt;/code&amp;gt; должено быть указано имя пользователя, под которым запущен процесс PCS;&lt;br /&gt;
* &amp;lt;code&amp;gt;OperatorKeyAlias&amp;lt;/code&amp;gt; должен быть указан алиас оператора (для приведённого примера файла конфигурации это будет &amp;lt;code&amp;gt;Operator-1&amp;lt;/code&amp;gt; и путь будет следующий &amp;lt;code&amp;gt;/var/opt/cprocsp/keys/user/Operator-1&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Владельцем директорий &amp;lt;code&amp;gt;ProcessUsername/OperatorKeyAlias&amp;lt;/code&amp;gt; и файлов ключей должен быть пользователь, под которым запущен процесс PCS.&lt;br /&gt;
&lt;br /&gt;
= OpenSSL =&lt;br /&gt;
&lt;br /&gt;
== Конфигурирование PKI коннектора ==&lt;br /&gt;
&lt;br /&gt;
=== Путь к конфигурационному файлу коннектора ===&lt;br /&gt;
&lt;br /&gt;
Настройку необходимо внести в pc_sys_property БД PCS.&lt;br /&gt;
&lt;br /&gt;
PKI_SETTINGS_PATH      | /opt/pc/pki/pki-settings.properties&lt;br /&gt;
&lt;br /&gt;
Пример для PostgreSQL:&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;insert into pc_sys_property values (nextval(&#039;pc_setting_seq&#039;), &#039;PKI_SETTINGS_PATH&#039;, &#039;/opt/pc/pki/pki-settings.properties&#039;);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Пример конфигурационного файла ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# check certificate&#039;s expiration, cert path and other constrains during each cert use&lt;br /&gt;
checkCertificates=true&lt;br /&gt;
&lt;br /&gt;
# check certificate revocation status, to use checkCertificates must be true&lt;br /&gt;
checkRevocation=true&lt;br /&gt;
useCRL=true&lt;br /&gt;
useOCSP=false&lt;br /&gt;
&lt;br /&gt;
# -- OpenSSL Settings&lt;br /&gt;
caType=OpenSSL&lt;br /&gt;
issueCertificateCmd=/opt/pc/pki/issue_cert.sh&lt;br /&gt;
revokeCertificateCmd=/opt/pc/pki/revoke_cert.sh&lt;br /&gt;
&lt;br /&gt;
# files prefixes must contain path where tmp files will be stored&lt;br /&gt;
csrTmpFilePrefix=pc-openssl-connector-csr-&lt;br /&gt;
certTmpFilePrefix=pc-openssl-connector-cert-&lt;br /&gt;
&lt;br /&gt;
# certificate chain in PEM-format&lt;br /&gt;
#    the first certificate must be CA (self-signed), second - 1st intermediate, third - 2nd intermediate and so on&lt;br /&gt;
#    if checkRevocation is true, then each of intermediate certificates must contain OCSP url or CRL Distribution point&lt;br /&gt;
caChainFileName=/opt/pc/pki/Intermediate_CA/certs/intermediate.chain.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Пример файла выпуска сертификата ==&lt;br /&gt;
&lt;br /&gt;
=== ECDSA ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CA_DIR=/opt/pc/pki/Intermediate_CA&lt;br /&gt;
KEY_PASS=secretpassword&lt;br /&gt;
&lt;br /&gt;
DER_CSR_FILE_NAME=$1&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;$(basename -- $DER_CSR_FILE_NAME)&amp;quot;&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;${DER_CSR_BASE_FILE_NAME%.*}&amp;quot;&lt;br /&gt;
PEM_CSR_FILE_NAME=csr/$DER_CSR_BASE_FILE_NAME.pem&lt;br /&gt;
PEM_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.pem&lt;br /&gt;
DER_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.der&lt;br /&gt;
&lt;br /&gt;
DEST_CERT_FILE_NAME=$2&lt;br /&gt;
&lt;br /&gt;
cd $CA_DIR&lt;br /&gt;
openssl req -inform DER -in $DER_CSR_FILE_NAME -out $PEM_CSR_FILE_NAME&lt;br /&gt;
openssl ca -config openssl.cnf -extensions usr_cert -days 375 -notext -md sha256 -in $PEM_CSR_FILE_NAME -out $PEM_CERT_FILE_NAME -passin pass:$KEY_PASS -batch&lt;br /&gt;
openssl x509 -outform der -in $PEM_CERT_FILE_NAME -out $DER_CERT_FILE_NAME&lt;br /&gt;
&lt;br /&gt;
cp $DER_CERT_FILE_NAME $DEST_CERT_FILE_NAME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ГОСТ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CA_DIR=/opt/pc/pki/Intermediate_CA&lt;br /&gt;
KEY_PASS=secretpassword&lt;br /&gt;
&lt;br /&gt;
DER_CSR_FILE_NAME=$1&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;$(basename -- $DER_CSR_FILE_NAME)&amp;quot;&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;${DER_CSR_BASE_FILE_NAME%.*}&amp;quot;&lt;br /&gt;
PEM_CSR_FILE_NAME=csr/$DER_CSR_BASE_FILE_NAME.pem&lt;br /&gt;
PEM_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.pem&lt;br /&gt;
DER_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.der&lt;br /&gt;
&lt;br /&gt;
DEST_CERT_FILE_NAME=$2&lt;br /&gt;
&lt;br /&gt;
cd $CA_DIR&lt;br /&gt;
openssl req -inform DER -in $DER_CSR_FILE_NAME -out $PEM_CSR_FILE_NAME&lt;br /&gt;
openssl ca -config openssl.cnf -extensions usr_cert -days 375 -notext -md gost12_256 -in $PEM_CSR_FILE_NAME -out $PEM_CERT_FILE_NAME -passin pass:$KEY_PASS -batch&lt;br /&gt;
openssl x509 -outform der -in $PEM_CERT_FILE_NAME -out $DER_CERT_FILE_NAME&lt;br /&gt;
&lt;br /&gt;
cp $DER_CERT_FILE_NAME $DEST_CERT_FILE_NAME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Пример файла отзыва сертификата ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CERT_FILE_NAME=$1&lt;br /&gt;
KEY_PASS=secretpassword&lt;br /&gt;
CA_DIR=/opt/pc/pki/Intermediate_CA&lt;br /&gt;
INTERMEDIATE_CRL_LOCATION=crl/intermediate.crl&lt;br /&gt;
&lt;br /&gt;
cd $CA_DIR&lt;br /&gt;
&lt;br /&gt;
#revoke&lt;br /&gt;
openssl ca -config openssl.cnf -revoke $CERT_FILE_NAME -passin pass:$KEY_PASS&lt;br /&gt;
#publish CRL&lt;br /&gt;
openssl ca -config openssl.cnf -gencrl -out $INTERMEDIATE_CRL_LOCATION -passin pass:$KEY_PASS&lt;br /&gt;
cp -v $INTERMEDIATE_CRL_LOCATION /opt/pc/pki/pub/crl/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Пример файла скрипта публикации списка отзыва корневого УЦ ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
openssl ca \&lt;br /&gt;
-config /opt/pc/pki/Root_CA/openssl_host.cnf \&lt;br /&gt;
-gencrl \&lt;br /&gt;
-out /opt/pc/pki/Root_CA/crl/root.crl \&lt;br /&gt;
-passin pass:secretpassword&lt;br /&gt;
cp /opt/pc/pki/Root_CA/crl/root.crl /opt/pc/pki/pub/crl/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Пример файла скрипта публикации списка отзыва промежуточного УЦ ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
openssl ca \&lt;br /&gt;
-config /opt/pc/pki/Intermediate_CA/openssl_host.cnf \&lt;br /&gt;
-gencrl \&lt;br /&gt;
-out /opt/pc/pki/Intermediate_CA/crl/intermediate.crl \&lt;br /&gt;
-passin pass:secretpassword&lt;br /&gt;
cp /opt/pc/pki/Intermediate_CA/crl/intermediate.crl /opt/pc/pki/pub/crl/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Включение ГОСТ в OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== Установка модуля ГОСТ ===&lt;br /&gt;
&lt;br /&gt;
Для работы OpenSSL с криптоалгоритмами ГОСТ необходимо установить криптографическую библиотеку и настроить работу с этой библиотекой в конфигурационном файле, для этого:&lt;br /&gt;
&lt;br /&gt;
* Установите пакет &amp;lt;code&amp;gt;openssl-gost-engine&amp;lt;/code&amp;gt;, либо, если его нет в репозитории Вашего дистрибутива, скачайте по ссылке https://repo.paycontrol.org/cdn/artefacts/gost-engine/engine/gost.so (sha256sum: &amp;lt;code&amp;gt;435a0dee3273d924458c14ad57ac44b0711aa37fb3df9f2ba987a118f2339b1f  gost.so&amp;lt;/code&amp;gt;) и разместите скаченный файл криптобиблиотеки в директории модулей OpenSSL (в зависимости от дистрибутива это может быть &amp;lt;code&amp;gt;/usr/lib/engines-3/&amp;lt;/code&amp;gt;, или, например &amp;lt;code&amp;gt;/usr/lib64/engines-3/&amp;lt;/code&amp;gt;).&lt;br /&gt;
* В кофигурационный файл OpenSSL добавьте:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;openssl_conf = openssl_def&lt;br /&gt;
&lt;br /&gt;
[openssl_def]&lt;br /&gt;
engines = engine_section&lt;br /&gt;
&lt;br /&gt;
[engine_section]&lt;br /&gt;
gost = gost_section&lt;br /&gt;
&lt;br /&gt;
[gost_section]&lt;br /&gt;
engine_id = gost&lt;br /&gt;
dynamic_path = /usr/lib/engines-3/gost.so&lt;br /&gt;
default_algorithms = ALL &amp;lt;/syntaxhighlight&amp;gt;, где в качестве значения &amp;lt;code&amp;gt;dynamic_path&amp;lt;/code&amp;gt; должен быть указан путь к библиотеке &amp;lt;code&amp;gt;gost.so&amp;lt;/code&amp;gt;.&lt;br /&gt;
* В кофигурационном файле OpenSSL параметру &amp;lt;code&amp;gt;default_md&amp;lt;/code&amp;gt; необходимо установить значение &amp;lt;code&amp;gt;md_gost12_256&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример команд для создания корневого и промежуточного ГОСТ-УЦ в OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== Создание корневого сертификата ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
openssl genpkey -config openssl_intermediate.cnf -pass pass:$KEY_PASS -algorithm gost2012_256 -pkeyopt paramset:A -out private/root.key.pem&lt;br /&gt;
openssl req -config openssl_intermediate.cnf -key private/root.key.pem -passin pass:${PKI_KEY_PASS} -new -x509 -days 7300 -md_gost12_256 -extensions v3_ca -subj &amp;quot;${PKI_ROOT_SUBJECT}&amp;quot; -out certs/root.cert.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключа и запроса для промежуточного УЦ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
openssl genpkey -config openssl_root.cnf -pass pass:$KEY_PASS -algorithm gost2012_256 -pkeyopt paramset:A -out private/intermediate.key.pem&lt;br /&gt;
openssl req -config openssl_root.cnf -key private/intermediate.key.pem -passin pass:${PKI_KEY_PASS} -new -md_gost12_256 -subj &amp;quot;${PKI_INTERMEDIATE_SUBJECT}&amp;quot; -out csr/intermediate.csr.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Выпуск сертификата для промежуточного УЦ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
openssl ca -config openssl_intermediate.cnf -extensions v3_intermediate_ca -passin pass:${PKI_KEY_PASS} -days 3650 -notext -md gost12_256 -in ../Intermediate_CA/csr/intermediate.csr.pem -out ../Intermediate_CA/certs/intermediate.cert.pem -out certs/intermediate.cert.pem -batch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:OpenSSL]]&lt;br /&gt;
[[Категория:PKI]]&lt;br /&gt;
[[Категория:Сертификаты]]&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=PC_Pusher_5.1_En&amp;diff=872</id>
		<title>PC Pusher 5.1 En</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=PC_Pusher_5.1_En&amp;diff=872"/>
		<updated>2025-12-17T19:48:16Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Entering authentication data for sending push notifications=&lt;br /&gt;
{{Предупреждение|For non-PostgreSQL DBMS, change the sequence method}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For &#039;&#039;&#039;MSSQL&#039;&#039;&#039; you need to use a string &amp;lt;code&amp;gt;NEXT VALUE FOR pc_split_pusher_creds_seq,&amp;lt;/code&amp;gt; instead of string &amp;lt;code&amp;gt;nextval(&#039;pc_split_pusher_creds_seq&#039;),&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For &#039;&#039;&#039;Oracle&#039;&#039;&#039; you need to use a string &amp;lt;code&amp;gt;pc_split_pusher_creds_seq.NEXTVAL,&amp;lt;/code&amp;gt; instead of string &amp;lt;code&amp;gt;nextval(&#039;pc_split_pusher_creds_seq&#039;),&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==To the PayConfirm app==&lt;br /&gt;
To enter authentication data for sending push notifications to the PayConfirm application, you must perform the following queries to the PC Pusher database, replacing the %SYSTEMID% values with the correct one.&lt;br /&gt;
&lt;br /&gt;
Note that the percent signs &#039;&#039;&#039;need to be removed&#039;&#039;&#039;.&lt;br /&gt;
After executing the requests, you need to [[Руководство_администратора_PayControl_v5#Запуск и остановка служб сервера PayControl|restart]] the PC Pusher Wildfly server.&lt;br /&gt;
&lt;br /&gt;
Example for СУБД PostgreSQL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;INSERT INTO pc_split_pusher_credentials (&lt;br /&gt;
id,&lt;br /&gt;
appid,&lt;br /&gt;
credentials,&lt;br /&gt;
os,&lt;br /&gt;
systemid)&lt;br /&gt;
VALUES (&lt;br /&gt;
nextval(&#039;pc_split_pusher_creds_seq&#039;),&lt;br /&gt;
&#039;org.payconfirm.app&#039;,&lt;br /&gt;
&#039;{&amp;quot;google_api_key&amp;quot;:&amp;quot;AAAA4H70m7M:APA91bFsaPiXXiIuRyj4h-xGZpyd0-I3B9F1udIIergxaK8uL9vPPvUQXOvPfau2w8E-xur_6TlTzmhb2JsO13hBCxVDrNybD6Rj8k4hZKXfs7tC5fnJuWmCIB3-O_4dLo0QHlhfSbGn&amp;quot;}&#039;,&lt;br /&gt;
&#039;Android&#039;,&lt;br /&gt;
&#039;%SYSTEMID%&#039;);&lt;br /&gt;
&lt;br /&gt;
INSERT INTO pc_split_pusher_credentials (&lt;br /&gt;
id,&lt;br /&gt;
appid,&lt;br /&gt;
credentials,&lt;br /&gt;
os,&lt;br /&gt;
systemid)&lt;br /&gt;
VALUES (&lt;br /&gt;
nextval(&#039;pc_split_pusher_creds_seq&#039;),&lt;br /&gt;
&#039;org.payconfirm.app&#039;,&lt;br /&gt;
&#039;{&amp;quot;apns_key_file&amp;quot;:&amp;quot;C:\\wildfly\\safetech-apns-JVBQX52N5Z.p8&amp;quot;,&amp;quot;apns_key_id&amp;quot;:&amp;quot;QCC684AGC4&amp;quot;,&amp;quot;apns_team_id&amp;quot;:&amp;quot;B98K5P3YHV&amp;quot;}&#039;,&lt;br /&gt;
&#039;iOS&#039;,&lt;br /&gt;
&#039;%SYSTEMID%&#039;);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==To another mobile app==&lt;br /&gt;
To enter authentication data for sending push notifications, you need to make a request to the PC Pusher database, replacing the value %SYSTEMID%, %appid%, %key file path%, %apns_key_id%, %apns_team_id%, %google_api_key% with the correct ones. (this data, with the exception of %SYSTEMID%, can be obtained from the owners of the account under whose name the application is published), and &#039;&#039;&#039;deleting&#039;&#039;&#039; the percent signs:&lt;br /&gt;
&lt;br /&gt;
Example for СУБД PostgreSQL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
INSERT INTO pc_split_pusher_credentials (&lt;br /&gt;
id,&lt;br /&gt;
appid,&lt;br /&gt;
credentials,&lt;br /&gt;
is_default,&lt;br /&gt;
os,&lt;br /&gt;
systemid)&lt;br /&gt;
VALUES (&lt;br /&gt;
nextval(&#039;pc_split_pusher_creds_seq&#039;),&lt;br /&gt;
&#039;%appid%&#039;,&lt;br /&gt;
&#039;{&amp;quot;google_api_key&amp;quot;:&amp;quot;%google_api_key%&amp;quot;}&#039;,&lt;br /&gt;
1,&lt;br /&gt;
&#039;Android&#039;,&lt;br /&gt;
&#039;%SYSTEMID%&#039;);&lt;br /&gt;
&lt;br /&gt;
INSERT INTO pc_split_pusher_credentials (&lt;br /&gt;
id,&lt;br /&gt;
appid,&lt;br /&gt;
credentials,&lt;br /&gt;
is_default,&lt;br /&gt;
os,&lt;br /&gt;
systemid)&lt;br /&gt;
VALUES (&lt;br /&gt;
nextval(&#039;pc_split_pusher_creds_seq&#039;),&lt;br /&gt;
&#039;%appid%&#039;,&lt;br /&gt;
&#039;{&amp;quot;apns_key_file&amp;quot;:&amp;quot;%key file path%&amp;quot;,&amp;quot;apns_key_id&amp;quot;:&amp;quot;%apns_key_id%&amp;quot;,&amp;quot;apns_team_id&amp;quot;:&amp;quot;%apns_team_id%&amp;quot;}&#039;,&lt;br /&gt;
1,&lt;br /&gt;
&#039;iOS&#039;,&lt;br /&gt;
&#039;%SYSTEMID%&#039;);&lt;br /&gt;
&lt;br /&gt;
commit;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=PC_Pusher_5.1_En&amp;diff=871</id>
		<title>PC Pusher 5.1 En</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=PC_Pusher_5.1_En&amp;diff=871"/>
		<updated>2025-12-17T19:48:03Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Entering authentication data for sending push notifications=&lt;br /&gt;
{{Предупреждение|For non-PostgreSQL DBMS, change the sequence method}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For &#039;&#039;&#039;MSSQL&#039;&#039;&#039; you need to use a string &amp;lt;code&amp;gt;NEXT VALUE FOR pc_split_pusher_creds_seq,&amp;lt;/code&amp;gt; instead of string &amp;lt;code&amp;gt;nextval(&#039;pc_split_pusher_creds_seq&#039;),&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For &#039;&#039;&#039;Oracle&#039;&#039;&#039; you need to use a string &amp;lt;code&amp;gt;pc_split_pusher_creds_seq.NEXTVAL,&amp;lt;/code&amp;gt; instead of string &amp;lt;code&amp;gt;nextval(&#039;pc_split_pusher_creds_seq&#039;),&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==To the PayConfirm app==&lt;br /&gt;
To enter authentication data for sending push notifications to the PayConfirm application, you must perform the following queries to the PC Pusher database, replacing the %SYSTEMID% values with the correct one.&lt;br /&gt;
&lt;br /&gt;
Note that the percent signs &#039;&#039;&#039;need to be removed&#039;&#039;&#039;.&lt;br /&gt;
After executing the requests, you need to [[Руководство_администратора_PayControl_v5#Запуск и остановка служб сервера PayControl|restart]] the PC Pusher Wildfly server.&lt;br /&gt;
&lt;br /&gt;
Example for СУБД PostgreSQL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;INSERT INTO pc_split_pusher_credentials (&lt;br /&gt;
id,&lt;br /&gt;
appid,&lt;br /&gt;
credentials,&lt;br /&gt;
os,&lt;br /&gt;
systemid)&lt;br /&gt;
VALUES (&lt;br /&gt;
nextval(&#039;pc_split_pusher_creds_seq&#039;),&lt;br /&gt;
&#039;org.payconfirm.app&#039;,&lt;br /&gt;
&#039;{&amp;quot;google_api_key&amp;quot;:&amp;quot;AAAA4H70m7M:APA91bFsaPiXXiIuRyj4h-xGZpyd0-I3B9F1udIIergxaK8uL9vPPvUQXOvPfau2w8E-xur_6TlTzmhb2JsO13hBCxVDrNybD6Rj8k4hZKXfs7tC5fnJuWmCIB3-O_4dLo0QHlhfSbGn&amp;quot;}&#039;,&lt;br /&gt;
&#039;Android&#039;,&lt;br /&gt;
&#039;%SYSTEMID%&#039;);&lt;br /&gt;
&lt;br /&gt;
INSERT INTO pc_split_pusher_credentials (&lt;br /&gt;
id,&lt;br /&gt;
appid,&lt;br /&gt;
credentials,&lt;br /&gt;
os,&lt;br /&gt;
systemid)&lt;br /&gt;
VALUES (&lt;br /&gt;
nextval(&#039;pc_split_pusher_creds_seq&#039;),&lt;br /&gt;
&#039;org.payconfirm.app&#039;,&lt;br /&gt;
&#039;{&amp;quot;apns_key_file&amp;quot;:&amp;quot;C:\\wildfly\\safetech-apns-JVBQX52N5Z.p8&amp;quot;,&amp;quot;apns_key_id&amp;quot;:&amp;quot;QCC684AGC4&amp;quot;,&amp;quot;apns_team_id&amp;quot;:&amp;quot;B98K5P3YHV&amp;quot;}&#039;,&lt;br /&gt;
&#039;iOS&#039;,&lt;br /&gt;
&#039;%SYSTEMID%&#039;);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==To another mobile app==&lt;br /&gt;
To enter authentication data for sending push notifications, you need to make a request to the PC Pusher database, replacing the value %SYSTEMID%, %appid%, %key file path%, %apns_key_id%, %apns_team_id%, %google_api_key% with the correct ones. (this data, with the exception of %SYSTEMID%, can be obtained from the owners of the account under whose name the application is published), and &#039;&#039;&#039;deleting&#039;&#039;&#039; the percent signs:&lt;br /&gt;
&lt;br /&gt;
Example for СУБД PostgreSQL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
INSERT INTO pc_split_pusher_credentials (&lt;br /&gt;
id,&lt;br /&gt;
appid,&lt;br /&gt;
credentials,&lt;br /&gt;
is_default,&lt;br /&gt;
os,&lt;br /&gt;
systemid)&lt;br /&gt;
VALUES (&lt;br /&gt;
nextval(&#039;pc_split_pusher_creds_seq&#039;),&lt;br /&gt;
&#039;%appid%&#039;,&lt;br /&gt;
&#039;{&amp;quot;google_api_key&amp;quot;:&amp;quot;%google_api_key%&amp;quot;}&#039;,&lt;br /&gt;
1,&lt;br /&gt;
&#039;Android&#039;,&lt;br /&gt;
&#039;%SYSTEMID%&#039;);&lt;br /&gt;
&lt;br /&gt;
INSERT INTO pc_split_pusher_credentials (&lt;br /&gt;
id,&lt;br /&gt;
appid,&lt;br /&gt;
credentials,&lt;br /&gt;
is_default,&lt;br /&gt;
os,&lt;br /&gt;
systemid)&lt;br /&gt;
VALUES (&lt;br /&gt;
nextval(&#039;pc_split_pusher_creds_seq&#039;),&lt;br /&gt;
&#039;%appid%&#039;,&lt;br /&gt;
&#039;{&amp;quot;apns_key_file&amp;quot;:&amp;quot;%key file path%&amp;quot;,&amp;quot;apns_key_id&amp;quot;:&amp;quot;%apns_key_id%&amp;quot;,&amp;quot;apns_team_id&amp;quot;:&amp;quot;%apns_team_id%&amp;quot;}&#039;,&lt;br /&gt;
1,&lt;br /&gt;
&#039;iOS&#039;,&lt;br /&gt;
&#039;%SYSTEMID%&#039;);&lt;br /&gt;
&lt;br /&gt;
commit;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
test&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%A2%D0%B5%D0%BC%D1%8B_%D0%BE%D1%84%D0%BE%D1%80%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BC%D0%BE%D0%B1%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=869</id>
		<title>Темы оформления мобильного приложения</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%A2%D0%B5%D0%BC%D1%8B_%D0%BE%D1%84%D0%BE%D1%80%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BC%D0%BE%D0%B1%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=869"/>
		<updated>2025-11-10T14:36:41Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Описание состава файлов тем=&lt;br /&gt;
==v5.0==&lt;br /&gt;
===Структура файла темы===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
├── locales.json // optional&lt;br /&gt;
├── base&lt;br /&gt;
│   ├── fonts&lt;br /&gt;
│   │   ├── fontName1.ttf&lt;br /&gt;
│   │   └── fontName2.ttf&lt;br /&gt;
│   ├── text&lt;br /&gt;
│   │   └── about.html&lt;br /&gt;
│   ├── images&lt;br /&gt;
│   │   ├── imageName1.png&lt;br /&gt;
│   │   ├── imageName2.png&lt;br /&gt;
│   │   └── imageName3.png&lt;br /&gt;
│   └── theme.json&lt;br /&gt;
├── ru-RU&lt;br /&gt;
│   ├── fonts&lt;br /&gt;
│   │   └── ...&lt;br /&gt;
│   ├── text&lt;br /&gt;
│   │   └── ...&lt;br /&gt;
│   ├── images&lt;br /&gt;
│   │   └── ...&lt;br /&gt;
│   └── theme.json&lt;br /&gt;
├── en-US&lt;br /&gt;
│   ├── fonts&lt;br /&gt;
│   │   └── ...&lt;br /&gt;
│   ├── text&lt;br /&gt;
│   │   └── ...&lt;br /&gt;
│   ├── images&lt;br /&gt;
│   │   └── ...&lt;br /&gt;
│   └── theme.json&lt;br /&gt;
└── ...&lt;br /&gt;
    ├── fonts&lt;br /&gt;
    │   └── ...&lt;br /&gt;
    ├── text&lt;br /&gt;
    │   └── ...&lt;br /&gt;
    ├── images&lt;br /&gt;
    │   └── ...&lt;br /&gt;
    └── theme.json&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Каждая тема состоит из папок с локализованными версиями тем и опционального файла &#039;&#039;locales.json&#039;&#039;, который описывает какую версию темы использовать для определенных региональных параметров.&lt;br /&gt;
&lt;br /&gt;
===Локализация===&lt;br /&gt;
&lt;br /&gt;
Каждая тема может включать базовую локализацию &#039;&#039;&#039;base&#039;&#039;&#039;, а так же локализации для других языков и регионов (ru-RU, en-US, ...). Приложение должно подтягивать информацию из локализированной версии темы. Если информация в локализированной версии отсутствует — она подтягивается из &#039;&#039;base&#039;&#039;. Если отсутствует base, то из локализированной версии дефолтной темы или Base-версии дефолтной темы.&lt;br /&gt;
&lt;br /&gt;
Файл &#039;&#039;locales.json&#039;&#039; опционален. Он необходим, если нужно сопоставить разные региональные идентификаторы с определённым идентификатором. Например, если для Украины, Беларуси нужно использовать русскую версию темы, то файл будет выглядеть так:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ru-UA&amp;quot;: &amp;quot;ru-RU&amp;quot;,&lt;br /&gt;
    &amp;quot;be-BY&amp;quot;: &amp;quot;ru-RU&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Структура локализированной версии===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
base // ru-RU, en-US, ...&lt;br /&gt;
│   ├── fonts&lt;br /&gt;
│   │   ├── fontName1.ttf&lt;br /&gt;
│   │   └── fontName2.ttf&lt;br /&gt;
│   ├── text&lt;br /&gt;
│   │   └── about.html&lt;br /&gt;
│   ├── images&lt;br /&gt;
│   │   ├── imageName1.png&lt;br /&gt;
│   │   ├── imageName2.png&lt;br /&gt;
│   │   └── imageName3.png&lt;br /&gt;
│   └── theme.json&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Каждая локализация содержит файл &#039;&#039;theme.json&#039;&#039;, который описывает тему, и папки с ресурсами (&#039;&#039;images&#039;&#039;, &#039;&#039;fonts&#039;&#039;, &#039;&#039;text&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Структура theme.json===&lt;br /&gt;
&lt;br /&gt;
Набор установленных значений дан в качестве примера. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;images&amp;quot;: {&lt;br /&gt;
        &amp;quot;menuImage&amp;quot;: &amp;quot;logo.png&amp;quot;,&lt;br /&gt;
        ...&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;fonts&amp;quot;: {&lt;br /&gt;
        &amp;quot;default&amp;quot;: &amp;quot;fontName.ttf&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;colors&amp;quot;: {&lt;br /&gt;
	&amp;quot;text&amp;quot;: &amp;quot;#FFFFFF&amp;quot;,&lt;br /&gt;
	&amp;quot;error&amp;quot;: &amp;quot;#FF0000&amp;quot;,&lt;br /&gt;
	&amp;quot;success&amp;quot;: &amp;quot;#0000FF&amp;quot;,&lt;br /&gt;
	&amp;quot;background&amp;quot;: &amp;quot;#110011&amp;quot;,&lt;br /&gt;
	&amp;quot;menuBackground&amp;quot;: &amp;quot;#00ff00&amp;quot;,&lt;br /&gt;
        ...&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;sizes&amp;quot;: {&lt;br /&gt;
        &amp;quot;large&amp;quot;: 20.0,&lt;br /&gt;
        &amp;quot;default&amp;quot;: 16.0,&lt;br /&gt;
        &amp;quot;small&amp;quot;: 14.0&lt;br /&gt;
        ...&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;elements&amp;quot;: {&lt;br /&gt;
        &amp;quot;heading&amp;quot;: {&lt;br /&gt;
            &amp;quot;fontSize&amp;quot;: &amp;quot;large&amp;quot;,&lt;br /&gt;
            &amp;quot;fontWeight&amp;quot;: &amp;quot;medium&amp;quot;,&lt;br /&gt;
            &amp;quot;textColor&amp;quot;: &amp;quot;text&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;caption&amp;quot;: {&lt;br /&gt;
            &amp;quot;fontSize&amp;quot;: &amp;quot;default&amp;quot;,&lt;br /&gt;
            &amp;quot;fontWeight&amp;quot;: &amp;quot;medium&amp;quot;,&lt;br /&gt;
            &amp;quot;textColor&amp;quot;: &amp;quot;text&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;body&amp;quot;: {&lt;br /&gt;
            &amp;quot;fontSize&amp;quot;: &amp;quot;default&amp;quot;,&lt;br /&gt;
            &amp;quot;fontWeight&amp;quot;: &amp;quot;regular&amp;quot;,&lt;br /&gt;
            &amp;quot;textColor&amp;quot;: &amp;quot;text&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;footnote&amp;quot;: {&lt;br /&gt;
            &amp;quot;fontSize&amp;quot;: &amp;quot;small&amp;quot;,&lt;br /&gt;
            &amp;quot;fontWeight&amp;quot;: &amp;quot;regular&amp;quot;,&lt;br /&gt;
            &amp;quot;textColor&amp;quot;: &amp;quot;text&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;error&amp;quot;: {&lt;br /&gt;
            &amp;quot;fontSize&amp;quot;: &amp;quot;small&amp;quot;,&lt;br /&gt;
            &amp;quot;fontWeight&amp;quot;: &amp;quot;regular&amp;quot;,&lt;br /&gt;
            &amp;quot;textColor&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
            &amp;quot;iconColor&amp;quot;: &amp;quot;iconColor&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;menu&amp;quot;: {&lt;br /&gt;
            &amp;quot;fontSize&amp;quot;: &amp;quot;default&amp;quot;,&lt;br /&gt;
            &amp;quot;fontWeight&amp;quot;: &amp;quot;regular&amp;quot;,&lt;br /&gt;
            &amp;quot;textColor&amp;quot;: &amp;quot;menuText&amp;quot;,&lt;br /&gt;
            &amp;quot;iconColor&amp;quot;: &amp;quot;menuIcons&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;primaryButton&amp;quot;: {&lt;br /&gt;
            &amp;quot;fontSize&amp;quot;: &amp;quot;default&amp;quot;,&lt;br /&gt;
            &amp;quot;fontWeight&amp;quot;: &amp;quot;medium&amp;quot;,&lt;br /&gt;
            &amp;quot;textColor&amp;quot;: &amp;quot;background&amp;quot;,&lt;br /&gt;
            &amp;quot;backgroundNormalColor&amp;quot;: &amp;quot;button&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;secondaryButton&amp;quot;: {&lt;br /&gt;
            &amp;quot;fontSize&amp;quot;: &amp;quot;default&amp;quot;,&lt;br /&gt;
            &amp;quot;fontWeight&amp;quot;: &amp;quot;medium&amp;quot;,&lt;br /&gt;
            &amp;quot;textColor&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
            &amp;quot;iconColor&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
            &amp;quot;backgroundNormalColor&amp;quot;: &amp;quot;secondaryButton&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;confirmationButton&amp;quot;: {&lt;br /&gt;
            &amp;quot;fontSize&amp;quot;: &amp;quot;default&amp;quot;,&lt;br /&gt;
            &amp;quot;fontWeight&amp;quot;: &amp;quot;medium&amp;quot;,&lt;br /&gt;
            &amp;quot;textColor&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
            &amp;quot;backgroundNormalColor&amp;quot;: &amp;quot;button&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;declineButton&amp;quot;: {&lt;br /&gt;
            &amp;quot;fontSize&amp;quot;: &amp;quot;default&amp;quot;,&lt;br /&gt;
            &amp;quot;fontWeight&amp;quot;: &amp;quot;medium&amp;quot;,&lt;br /&gt;
            &amp;quot;textColor&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
            &amp;quot;backgroundNormalColor&amp;quot;: &amp;quot;button&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;bar&amp;quot;: {&lt;br /&gt;
            &amp;quot;textColor&amp;quot;: &amp;quot;barText&amp;quot;,&lt;br /&gt;
            &amp;quot;iconColor&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
            &amp;quot;backgroundNormalColor&amp;quot;: &amp;quot;background&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;timer&amp;quot;: {&lt;br /&gt;
            &amp;quot;fontSize&amp;quot;: &amp;quot;timer&amp;quot;,&lt;br /&gt;
            &amp;quot;fontWeight&amp;quot;: &amp;quot;medium&amp;quot;,&lt;br /&gt;
            &amp;quot;textColor&amp;quot;: &amp;quot;text&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;confirmation&amp;quot;: {&lt;br /&gt;
            &amp;quot;fontSize&amp;quot;: &amp;quot;confirmation&amp;quot;,&lt;br /&gt;
            &amp;quot;fontWeight&amp;quot;: &amp;quot;regular&amp;quot;,&lt;br /&gt;
            &amp;quot;textColor&amp;quot;: &amp;quot;text&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;feedback&amp;quot;: &amp;quot;feedback@paycontrol.ru&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;images&#039;&#039;: Список картинок. Каждому ключу соответствует определённая картинка из папки &#039;&#039;images&#039;&#039;. Есть системные ключи (список ниже), которые можно перезаписывать (тогда картинка в приложении соответствующая ключу поменяется), но можно добавлять и свои. Ключи картинок можно использовать в описании элементов.&lt;br /&gt;
* &#039;&#039;fonts&#039;&#039;: Список шрифтов. Каждому ключу соответствует определённый шрифт в папке &#039;&#039;fonts&#039;&#039;. В описании элементов указывается непосредственно ключ шрифта, а не конкретное значение. В дефолтной теме приложения словарь пустой — используется системный шрифт. Но если перезаписать ключ &#039;&#039;default&#039;&#039; на кастомный шрифт, то шрифт приложения должен поменяться на указанный.&lt;br /&gt;
* &#039;&#039;colors&#039;&#039;: Список цветов. Каждому ключу соответствует определённый цвет. В описании элементов указывается непосредственно ключ цвета, а не конкретное значение. Есть системные ключи (например &#039;&#039;background&#039;&#039;, весь список ниже), если их перезаписать, то поменяется цвет у элементов приложения, соответствующих ключу. Можно указывать свои ключи и значения, а потом использовать ключ в описании элементов.&lt;br /&gt;
* &#039;&#039;sizes&#039;&#039;: Список размеров текста. Каждому ключу соответствует определённые размер. В описании элементов указывается непосредственно ключ размера, а не конкретное значение. Есть системные ключи (например &#039;&#039;default&#039;&#039;, весь список ниже), если их перезаписать, то поменяется размер текста у элементов, которые используют данные ключ. Можно указывать свои ключи и значения, а потом использовать их в описании элементов.&lt;br /&gt;
* &#039;&#039;elements&#039;&#039;: Описание стилей всех элементов приложения. Список элементов ограничен, добавлять можем только мы. Создатель темы может лишь перезаписать нужные ему значения. Каждый элемент содержит ограниченный набор полей.&lt;br /&gt;
&lt;br /&gt;
===Системные значения images===&lt;br /&gt;
&lt;br /&gt;
Названия картинок даны в качестве примера.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;images&amp;quot;: {&lt;br /&gt;
    &amp;quot;main&amp;quot;:   &amp;quot;key_large.png&amp;quot;,   // Основная картинка приложения (там где сейчас ключ на главном экране)&lt;br /&gt;
    &amp;quot;menu&amp;quot;:   &amp;quot;logo_small.png&amp;quot;,  // Логотип в боковом меню&lt;br /&gt;
    &amp;quot;keys&amp;quot;:   &amp;quot;key_small.png&amp;quot;,   // Логотип в списке ключей&lt;br /&gt;
    &amp;quot;bar&amp;quot;:    &amp;quot;logo_small.png&amp;quot;,  // Логотип в AppBar&#039;е на Android или NavigationBar&#039;е на iOS&lt;br /&gt;
    &amp;quot;launch&amp;quot;: &amp;quot;logo.png&amp;quot;         // Логотип на сплешскрине&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Системные значения fonts===&lt;br /&gt;
&lt;br /&gt;
Название шрифта дано в качестве примера. В дефолтной теме приложения этого ключа нет, т.к. используется системный шрифт. Если добавить данные ключ-значение — то шрифт приложения поменяется на указанный.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;fonts&amp;quot;: {&lt;br /&gt;
    &amp;quot;default&amp;quot;: &amp;quot;font.ttf&amp;quot; // Глобальный шрифт приложения&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Системные значения sizes===&lt;br /&gt;
&lt;br /&gt;
Значения, которые используются по-умолчанию. Если любое значение изменить — поменяется размер во всех элементах, которые его используют.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;sizes&amp;quot;: {&lt;br /&gt;
    &amp;quot;large&amp;quot;: 20.0,&lt;br /&gt;
    &amp;quot;default&amp;quot;: 16.0,&lt;br /&gt;
    &amp;quot;small&amp;quot;: 14.0,&lt;br /&gt;
    &amp;quot;timer&amp;quot;: 24.0,&lt;br /&gt;
    &amp;quot;confirmation&amp;quot;: 54.0&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Системные значения colors===&lt;br /&gt;
&lt;br /&gt;
Значения указаны в качестве примера. Цвета указываются в формате &#039;&#039;&#039;hex&#039;&#039;&#039;, могут использоваться как RGB, так и RGBA.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;colors&amp;quot;: {&lt;br /&gt;
    &amp;quot;text&amp;quot;:           &amp;quot;#FFFFFF&amp;quot;,    // Цвет основного текста&lt;br /&gt;
    &amp;quot;error&amp;quot;:          &amp;quot;#FF0000&amp;quot;,    // Цвет для элементов указывающих на ошибку&lt;br /&gt;
    &amp;quot;success&amp;quot;:        &amp;quot;#00FF00&amp;quot;,    // Цвет для элементов указывающих на успешное действие&lt;br /&gt;
    &amp;quot;background&amp;quot;:     &amp;quot;#0000FF&amp;quot;,    // Цвет фона приложения&lt;br /&gt;
    &amp;quot;menuBackground&amp;quot;: &amp;quot;#FFFFFF&amp;quot;,    // Цвет фона в боковом меню&lt;br /&gt;
    &amp;quot;menuHeader&amp;quot;:     &amp;quot;#0000FF&amp;quot;,    // Цвет шапки бокового меню&lt;br /&gt;
    &amp;quot;menuIcons&amp;quot;:      &amp;quot;#AAAAAA&amp;quot;,    // Цвет иконок в боковом меню,&lt;br /&gt;
    &amp;quot;menuText&amp;quot;:       &amp;quot;#000000&amp;quot;,    // Цвет разделов в боковом меню&lt;br /&gt;
    &amp;quot;bar&amp;quot;:            &amp;quot;#FFFFFF&amp;quot;,    // Цвет фона AppBar&#039;а/NavigationBar&#039;а&lt;br /&gt;
    &amp;quot;timer&amp;quot;:          &amp;quot;#FFFFFF&amp;quot;,    // Цвет таймера обратного отсчёта&lt;br /&gt;
    &amp;quot;statusbar&amp;quot;:      &amp;quot;#0000FF&amp;quot;,    // Цвет фона статусбара (для Android)&lt;br /&gt;
    &amp;quot;button&amp;quot;:         &amp;quot;#FFFFFF&amp;quot;,    // Цвет фона кнопки в нормальном состоянии&lt;br /&gt;
    &amp;quot;secondaryButton&amp;quot;:&amp;quot;#0000FF&amp;quot;,    // Цвет вторичных кнопок&lt;br /&gt;
    &amp;quot;badge&amp;quot;:          &amp;quot;#F44336&amp;quot;     // Цвет фона бейджа&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Системные значения sizes===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;sizes&amp;quot;: {&lt;br /&gt;
    &amp;quot;large&amp;quot;:        20.0,    // В основном используется для заголовков&lt;br /&gt;
    &amp;quot;default&amp;quot;:      16.0,    // Основной размер текста, кнопок, разделов меню&lt;br /&gt;
    &amp;quot;small&amp;quot;:        14.0,    // Для подписей к текстовым полям, ошибкам&lt;br /&gt;
    &amp;quot;timer&amp;quot;:        24.0,    // Размер таймера обратного отсчёта&lt;br /&gt;
    &amp;quot;confirmation&amp;quot;: 54.0     // Максимальный размер кода подтверждения&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Элементы приложения elements===&lt;br /&gt;
&lt;br /&gt;
Значения указаны в качестве примера. Цвета указываются в формате &#039;&#039;&#039;hex&#039;&#039;&#039;, могут использоваться как RGB, так и RGBA.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;elements&amp;quot;: {&lt;br /&gt;
    &amp;quot;heading&amp;quot;:               { ... },    // Крупные заголовки&lt;br /&gt;
    &amp;quot;caption&amp;quot;:               { ... },    // Мелкие заголовки (заголовки текстовых полей)&lt;br /&gt;
    &amp;quot;body&amp;quot;:                  { ... },    // Основной текст&lt;br /&gt;
    &amp;quot;footnote&amp;quot;:              { ... },    // Сноски и примечания&lt;br /&gt;
    &amp;quot;error&amp;quot;:                 { ... },    // Текст ошибок&lt;br /&gt;
    &amp;quot;menu&amp;quot;:                  { ... },    // Разделы бокового меню&lt;br /&gt;
    &amp;quot;primaryButton&amp;quot;:         { ... },    // Стиль основных кнопок (например, «Далее»)&lt;br /&gt;
    &amp;quot;secondaryButton&amp;quot;:       { ... },    // Стиль дополнительных кнопок (например, выбор типа пароля)&lt;br /&gt;
    &amp;quot;confirmationButton&amp;quot;:    { ... },    // Кнопка подтверждения&lt;br /&gt;
    &amp;quot;declineButton&amp;quot;:         { ... },    // Кнопка отклонения&lt;br /&gt;
    &amp;quot;bar&amp;quot;:                   { ... },    // Стиль AppBar&#039;a или NavigationBar&#039;a&lt;br /&gt;
    &amp;quot;timer&amp;quot;:                 { ... },    // Стиль обратного отсчёта&lt;br /&gt;
    &amp;quot;confirmation&amp;quot;:          { ... },    // Стиль кода подтверждения&lt;br /&gt;
    &amp;quot;badge&amp;quot;:                 { ... }     // Стиль контента бейджа&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Описание стиля элемента===&lt;br /&gt;
&lt;br /&gt;
Эти ключи опциональны и есть у каждого элемента. Значения указаны в качестве примера.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;elementName&amp;quot;: &lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;font&amp;quot;:                      &amp;quot;fontKey&amp;quot;,      // Ключ шрифта из списка fonts&lt;br /&gt;
    &amp;quot;fontSize&amp;quot;:                  &amp;quot;sizeKey&amp;quot;,       // Ключ размера из списка sizes&lt;br /&gt;
    &amp;quot;fontWeight&amp;quot;:                &amp;quot;regular&amp;quot;,      // Начертание шрифта&lt;br /&gt;
    &amp;quot;textColor&amp;quot;:                 &amp;quot;text&amp;quot;,         // Ключ цвета из списка colors&lt;br /&gt;
    &amp;quot;iconColor&amp;quot;:                 &amp;quot;iconColor&amp;quot;,    // Цвет иконки, если она присутствует у элемента&lt;br /&gt;
    &amp;quot;icon&amp;quot;:                      &amp;quot;iconKey&amp;quot;,      // Ключ изображения из списка images&lt;br /&gt;
    &amp;quot;backgroundNormalColor&amp;quot;:     &amp;quot;button&amp;quot;,       // Цвет фона в нормальном состоянии&lt;br /&gt;
    &amp;quot;backgroundPressedColor&amp;quot;:    &amp;quot;button&amp;quot;,       // Цвет фона в нажатом состоянии. Если пусто — используется системное поведение. Например, в iOS — полупрозрачный цвет нормального состояния&lt;br /&gt;
    &amp;quot;backgroundDisabledColor&amp;quot;:   &amp;quot;button&amp;quot;,       // Цвет фона в неактивном состоянии. Если пусто — используется системное поведение. Например, в iOS — почти прозрачный цвет нормального состояния&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Обратная связь feedback===&lt;br /&gt;
&lt;br /&gt;
В качестве значения указывается email. У каждой локализации может быть свой адрес. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;feedback&amp;quot;: &amp;quot;feedback@paycontrol.ru&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Файлы с текстом из директории text===&lt;br /&gt;
&lt;br /&gt;
Папка &#039;&#039;text&#039;&#039; содержит файлы с текстом для различных экранов. Сейчас есть только &#039;&#039;about.html&#039;&#039;, он подставляется на экран about. Но в дальнейшем могут появится другие.&lt;br /&gt;
&lt;br /&gt;
===Правила получения значений===&lt;br /&gt;
&lt;br /&gt;
Т.к. все значения опциональны, то значения берутся по цепочке:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Локализированное значение&#039;&#039; &amp;gt; &#039;&#039;Значение из base&#039;&#039; &amp;gt; &#039;&#039;Локализированное значение из дефолтной темы&#039;&#039; &amp;gt; &#039;&#039;Значение из base дефолтной темы&#039;&#039; &amp;gt; Системной значение (Там где возможно. Например, для AppBar/NavigationBar)&lt;br /&gt;
&lt;br /&gt;
= Публикация темы оформления на сервере PayControl =&lt;br /&gt;
&lt;br /&gt;
Скины размещаются на Interaction-Rest сервер (PCIS External).&lt;br /&gt;
&lt;br /&gt;
== Для приложения PayControl Classic (v3.6-3.9) ==&lt;br /&gt;
# Убедиться, что название файла скина имеет вид {systemid}.zip, где {systemid} - идентификатор системы, для которой размещается скин;&lt;br /&gt;
# Разместить не распаковывая файл скина на сервере PCIS External в папке (создав её при необходимости):&lt;br /&gt;
#* Linux&lt;br /&gt;
#*: /opt/wildfly/paycontrol_skins&lt;br /&gt;
#* Windows&lt;br /&gt;
#*: C:\wildfly\paycontrol_skins&lt;br /&gt;
&lt;br /&gt;
После добавления скина на сервер, он должен стать доступным по адресу:&lt;br /&gt;
&amp;lt;pre&amp;gt;http{s}://{servername}/PayControl-interaction-rest/skin/{systemid}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Для приложения PayControl (v5.0-5.1) ==&lt;br /&gt;
&lt;br /&gt;
# Убедиться, что название файла скина имеет вид {systemid}.zip, где {systemid} - идентификатор системы, для которой размещается скин;&lt;br /&gt;
# Разместить не распаковывая файл скина на сервере PCIS External в папке (создав её при необходимости):&lt;br /&gt;
#* Linux&lt;br /&gt;
#*: /opt/wildfly/pc_themes/v5&lt;br /&gt;
#* Windows&lt;br /&gt;
#*: C:\wildfly\pc_themes\v5&lt;br /&gt;
&lt;br /&gt;
После добавления скина на сервер, он должен стать доступным по адресу:&lt;br /&gt;
&amp;lt;pre&amp;gt;http{s}://{servername}/pc-client-api/themes/v5/{systemid}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;http{s}://{servername}/PayControl-interaction-rest/themes/v5/{systemid}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Для приложения PayControl (v5.2-5.5) ==&lt;br /&gt;
&lt;br /&gt;
# Убедиться, что название файла скина имеет вид {systemid}.zip, где {systemid} - идентификатор системы, для которой размещается скин;&lt;br /&gt;
# Разместить не распаковывая файл скина на сервере PCIS External в папке (создав её при необходимости):&lt;br /&gt;
#* Linux&lt;br /&gt;
#*: /opt/wildfly/pc_themes/v52&lt;br /&gt;
#* Windows&lt;br /&gt;
#*: C:\wildfly\pc_themes\v52&lt;br /&gt;
&lt;br /&gt;
После добавления скина на сервер, он должен стать доступным по адресу:&lt;br /&gt;
&amp;lt;pre&amp;gt;http{s}://{servername}/pc-client-api/themes/v52/{systemid}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;http{s}://{servername}/PayControl-interaction-rest/themes/v52/{systemid}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Для приложения PayControl (v6) ==&lt;br /&gt;
&lt;br /&gt;
https://repo.paycontrol.org/server/doc/latest/pc-reference-guide/ru/#публикация-темы-оформления-на-сервере-pce&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_PayControl_%D1%81_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_3_%D0%BD%D0%B0_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8E_6&amp;diff=866</id>
		<title>Обновление PayControl с версии 3 на версию 6</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_PayControl_%D1%81_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_3_%D0%BD%D0%B0_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8E_6&amp;diff=866"/>
		<updated>2025-09-11T11:16:19Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: /* Резервное копирование */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Введение =&lt;br /&gt;
&lt;br /&gt;
== Резервное копирование ==&lt;br /&gt;
&lt;br /&gt;
Перед обновлением необходимо выполнить резервное копирование БД PCS.&lt;br /&gt;
&lt;br /&gt;
= Обновление Java =&lt;br /&gt;
&lt;br /&gt;
Перед обновлением компонентов PC &#039;&#039;&#039;требуется&#039;&#039;&#039; остановить Wildfly и обновить Java до версии 17. Версия 11 больше не поддерживается.&lt;br /&gt;
&lt;br /&gt;
При установке Java новой версии, старая версия не удаляется, и PC может продолжить работать на версии 11, что приведёт к ошибкам. &lt;br /&gt;
&lt;br /&gt;
Для того чтобы компоненты работали под Java 17, необходимо либо удалить неактуальную версию Java, либо выбрать необходимую версию с помощью:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sudo update-alternatives --config java&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Изменение названий серверов ==&lt;br /&gt;
&lt;br /&gt;
В версии 6 изменены названия серверов:&lt;br /&gt;
&lt;br /&gt;
* PC Server (PCS) — без изменений;&lt;br /&gt;
* PC Interaction Internal — PC Pusher (PCP);&lt;br /&gt;
* PC Interaction External — PC External (PCE).&lt;br /&gt;
&lt;br /&gt;
= Изменения в БД =&lt;br /&gt;
&lt;br /&gt;
== Правки структуры таблиц БД PCS ==&lt;br /&gt;
&lt;br /&gt;
Для обеспечения должного функционирования системы PC, в некоторые таблицы необходимо внести изменения, выполнив запросы:&lt;br /&gt;
&lt;br /&gt;
=== Postgre ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
alter table pc_delayedkeyinfo alter column is_deleted set not null;&lt;br /&gt;
alter table pc_delayedkeyinfo alter column is_deleted set default 0;&lt;br /&gt;
alter table pc_delayedkeyinfo drop column type;&lt;br /&gt;
alter table pc_delayedkeyinfo add column renew_challenge varchar(255);&lt;br /&gt;
&lt;br /&gt;
alter table pc_device alter column is_deleted set not null;&lt;br /&gt;
alter table pc_device alter column is_deleted set default 0;&lt;br /&gt;
alter table pc_device add column app_id varchar(255);&lt;br /&gt;
&lt;br /&gt;
alter table pc_event alter column is_deleted set not null;&lt;br /&gt;
alter table pc_event alter column is_deleted set default 0;&lt;br /&gt;
alter table pc_event alter column requester_ip type varchar(64);&lt;br /&gt;
alter table pc_event add column event_data text;&lt;br /&gt;
alter table pc_event drop column eventposturl;&lt;br /&gt;
&lt;br /&gt;
alter table pc_keyinfo alter column is_deleted set not null;&lt;br /&gt;
alter table pc_keyinfo alter column is_deleted set default 0;&lt;br /&gt;
alter table pc_keyinfo drop column type;&lt;br /&gt;
alter table pc_keyinfo drop column key_container_id;&lt;br /&gt;
alter table pc_keyinfo add column external_approve_data_id varchar(255);&lt;br /&gt;
&lt;br /&gt;
alter table pc_publickey alter column is_deleted set not null;&lt;br /&gt;
alter table pc_publickey alter column is_deleted set default 0;&lt;br /&gt;
alter table pc_publickey add column autosign_public_key bytea;&lt;br /&gt;
&lt;br /&gt;
alter table pc_system alter column is_deleted set not null;&lt;br /&gt;
alter table pc_system alter column is_deleted set default 0;&lt;br /&gt;
alter table pc_system add column callback_url varchar(255);&lt;br /&gt;
&lt;br /&gt;
alter table pc_system_params alter column is_deleted set not null;&lt;br /&gt;
alter table pc_system_params alter column is_deleted set default 0;&lt;br /&gt;
alter table pc_system_params alter column license type varchar(4096);&lt;br /&gt;
alter table pc_system_params add column qr_url_scheme varchar(24);&lt;br /&gt;
&lt;br /&gt;
alter table pc_transaction alter column is_deleted set not null;&lt;br /&gt;
alter table pc_transaction alter column is_deleted set default 0;&lt;br /&gt;
alter table pc_transaction add column autosign_enabled int2;&lt;br /&gt;
alter table pc_transaction add column ext_pulp bytea;&lt;br /&gt;
alter table pc_transaction add column extended_check int2;&lt;br /&gt;
alter table pc_transaction add column render_type int4;&lt;br /&gt;
alter table pc_transaction add column scoring_settings varchar(1023);&lt;br /&gt;
alter table pc_transaction add column transaction_type int4;&lt;br /&gt;
&lt;br /&gt;
alter table pc_user alter column is_deleted set not null;&lt;br /&gt;
alter table pc_user alter column is_deleted set default 0;&lt;br /&gt;
alter table pc_user add column blocked int2;&lt;br /&gt;
&lt;br /&gt;
alter table pc_confirm_attempt add column scoring_results varchar(512);&lt;br /&gt;
alter table pc_confirm_attempt add column scoring_settings varchar(512);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MS SQL ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
IF NOT EXISTS(&lt;br /&gt;
        SELECT *&lt;br /&gt;
        FROM sys.columns&lt;br /&gt;
        WHERE object_id = OBJECT_ID(N&#039;[dbo].[PC_TRANSACTION]&#039;)&lt;br /&gt;
          AND name = &#039;transaction_type&#039;&lt;br /&gt;
    )&lt;br /&gt;
ALTER TABLE PC_TRANSACTION&lt;br /&gt;
    ADD&lt;br /&gt;
        transaction_type integer;&lt;br /&gt;
&lt;br /&gt;
IF NOT EXISTS(&lt;br /&gt;
        SELECT *&lt;br /&gt;
        FROM sys.columns&lt;br /&gt;
        WHERE object_id = OBJECT_ID(N&#039;[dbo].[PC_SYSTEM]&#039;)&lt;br /&gt;
          AND name = &#039;callback_url&#039;&lt;br /&gt;
    )&lt;br /&gt;
ALTER TABLE PC_SYSTEM&lt;br /&gt;
    ADD&lt;br /&gt;
        callback_url character varying(255);&lt;br /&gt;
&lt;br /&gt;
IF NOT EXISTS(&lt;br /&gt;
        SELECT *&lt;br /&gt;
        FROM sys.columns&lt;br /&gt;
        WHERE object_id = OBJECT_ID(N&#039;[dbo].[PC_USER]&#039;)&lt;br /&gt;
          AND name = &#039;blocked&#039;&lt;br /&gt;
    )&lt;br /&gt;
ALTER TABLE PC_USER&lt;br /&gt;
    ADD&lt;br /&gt;
        blocked smallint;&lt;br /&gt;
&lt;br /&gt;
IF NOT EXISTS(&lt;br /&gt;
        SELECT *&lt;br /&gt;
        FROM sys.columns&lt;br /&gt;
        WHERE object_id = OBJECT_ID(N&#039;[dbo].[PC_KEYINFO]&#039;)&lt;br /&gt;
          AND name = &#039;external_approve_data_id&#039;&lt;br /&gt;
    )&lt;br /&gt;
ALTER TABLE PC_KEYINFO&lt;br /&gt;
    ADD&lt;br /&gt;
        external_approve_data_id character varying(255);&lt;br /&gt;
&lt;br /&gt;
IF NOT EXISTS(&lt;br /&gt;
        SELECT *&lt;br /&gt;
        FROM sys.columns&lt;br /&gt;
        WHERE object_id = OBJECT_ID(N&#039;[dbo].[PC_PUBLICKEY]&#039;)&lt;br /&gt;
          AND name = &#039;autosign_public_key&#039;&lt;br /&gt;
    )&lt;br /&gt;
ALTER TABLE PC_PUBLICKEY&lt;br /&gt;
    ADD&lt;br /&gt;
        autosign_public_key varbinary(255);&lt;br /&gt;
&lt;br /&gt;
IF NOT EXISTS(&lt;br /&gt;
        SELECT *&lt;br /&gt;
        FROM sys.columns&lt;br /&gt;
        WHERE object_id = OBJECT_ID(N&#039;[dbo].[PC_DELAYEDKEYINFO]&#039;)&lt;br /&gt;
          AND name = &#039;renew_challenge&#039;&lt;br /&gt;
    )&lt;br /&gt;
ALTER TABLE PC_DELAYEDKEYINFO&lt;br /&gt;
    ADD&lt;br /&gt;
        renew_challenge character varying(255);&lt;br /&gt;
&lt;br /&gt;
IF NOT EXISTS(&lt;br /&gt;
        SELECT *&lt;br /&gt;
        FROM sys.columns&lt;br /&gt;
        WHERE object_id = OBJECT_ID(N&#039;[dbo].[PC_DEVICE]&#039;)&lt;br /&gt;
          AND name = &#039;app_id&#039;&lt;br /&gt;
    )&lt;br /&gt;
ALTER TABLE PC_DEVICE&lt;br /&gt;
    ADD&lt;br /&gt;
        app_id character varying(255);&lt;br /&gt;
&lt;br /&gt;
IF NOT EXISTS(&lt;br /&gt;
        SELECT *&lt;br /&gt;
        FROM sys.columns&lt;br /&gt;
        WHERE object_id = OBJECT_ID(N&#039;[dbo].[PC_TRANSACTION]&#039;)&lt;br /&gt;
          AND name = &#039;autosign_enabled&#039;&lt;br /&gt;
    )&lt;br /&gt;
ALTER TABLE PC_TRANSACTION&lt;br /&gt;
    ADD&lt;br /&gt;
        autosign_enabled smallint;&lt;br /&gt;
&lt;br /&gt;
IF NOT EXISTS(&lt;br /&gt;
        SELECT *&lt;br /&gt;
        FROM sys.columns&lt;br /&gt;
        WHERE object_id = OBJECT_ID(N&#039;[dbo].[PC_TRANSACTION]&#039;)&lt;br /&gt;
          AND name = &#039;ext_pulp&#039;&lt;br /&gt;
    )&lt;br /&gt;
ALTER TABLE PC_TRANSACTION&lt;br /&gt;
    ADD&lt;br /&gt;
        ext_pulp character varying(255);&lt;br /&gt;
&lt;br /&gt;
IF NOT EXISTS(&lt;br /&gt;
        SELECT *&lt;br /&gt;
        FROM sys.columns&lt;br /&gt;
        WHERE object_id = OBJECT_ID(N&#039;[dbo].[PC_TRANSACTION]&#039;)&lt;br /&gt;
          AND name = &#039;extended_check&#039;&lt;br /&gt;
    )&lt;br /&gt;
ALTER TABLE PC_TRANSACTION&lt;br /&gt;
    ADD&lt;br /&gt;
        extended_check smallint;&lt;br /&gt;
&lt;br /&gt;
IF NOT EXISTS(&lt;br /&gt;
        SELECT *&lt;br /&gt;
        FROM sys.columns&lt;br /&gt;
        WHERE object_id = OBJECT_ID(N&#039;[dbo].[PC_TRANSACTION]&#039;)&lt;br /&gt;
          AND name = &#039;render_type&#039;&lt;br /&gt;
    )&lt;br /&gt;
ALTER TABLE PC_TRANSACTION&lt;br /&gt;
    ADD&lt;br /&gt;
        render_type integer;&lt;br /&gt;
&lt;br /&gt;
IF NOT EXISTS(&lt;br /&gt;
        SELECT *&lt;br /&gt;
        FROM sys.columns&lt;br /&gt;
        WHERE object_id = OBJECT_ID(N&#039;[dbo].[PC_TRANSACTION]&#039;)&lt;br /&gt;
          AND name = &#039;scoring_settings&#039;&lt;br /&gt;
    )&lt;br /&gt;
ALTER TABLE PC_TRANSACTION&lt;br /&gt;
    ADD&lt;br /&gt;
        scoring_settings character varying(1023);&lt;br /&gt;
&lt;br /&gt;
IF NOT EXISTS(&lt;br /&gt;
        SELECT *&lt;br /&gt;
        FROM sys.columns&lt;br /&gt;
        WHERE object_id = OBJECT_ID(N&#039;[dbo].[PC_CONFIRM_ATTEMPT]&#039;)&lt;br /&gt;
          AND name = &#039;scoring_results&#039;&lt;br /&gt;
    )&lt;br /&gt;
ALTER TABLE PC_CONFIRM_ATTEMPT&lt;br /&gt;
    ADD&lt;br /&gt;
        scoring_results character varying(512);&lt;br /&gt;
&lt;br /&gt;
IF NOT EXISTS(&lt;br /&gt;
        SELECT *&lt;br /&gt;
        FROM sys.columns&lt;br /&gt;
        WHERE object_id = OBJECT_ID(N&#039;[dbo].[PC_CONFIRM_ATTEMPT]&#039;)&lt;br /&gt;
          AND name = &#039;scoring_settings&#039;&lt;br /&gt;
    )&lt;br /&gt;
ALTER TABLE PC_CONFIRM_ATTEMPT&lt;br /&gt;
    ADD&lt;br /&gt;
        scoring_settings character varying(512);&lt;br /&gt;
		&lt;br /&gt;
IF NOT EXISTS(&lt;br /&gt;
        SELECT *&lt;br /&gt;
        FROM sys.columns&lt;br /&gt;
        WHERE object_id = OBJECT_ID(N&#039;[dbo].[PC_EVENT]&#039;)&lt;br /&gt;
          AND name = &#039;event_data&#039;&lt;br /&gt;
    )&lt;br /&gt;
    ALTER TABLE PC_EVENT&lt;br /&gt;
        ADD&lt;br /&gt;
            event_data VARCHAR(MAX);&lt;br /&gt;
ELSE&lt;br /&gt;
    ALTER TABLE PC_EVENT&lt;br /&gt;
        ALTER COLUMN event_data VARCHAR(MAX);&lt;br /&gt;
&lt;br /&gt;
IF EXISTS(&lt;br /&gt;
        SELECT *&lt;br /&gt;
        FROM sys.columns&lt;br /&gt;
        WHERE object_id = OBJECT_ID(N&#039;[dbo].[PC_KEYINFO]&#039;)&lt;br /&gt;
          AND name = &#039;type&#039;&lt;br /&gt;
    )&lt;br /&gt;
ALTER TABLE PC_KEYINFO&lt;br /&gt;
    DROP COLUMN type;&lt;br /&gt;
&lt;br /&gt;
IF EXISTS(&lt;br /&gt;
        SELECT *&lt;br /&gt;
        FROM sys.columns&lt;br /&gt;
        WHERE object_id = OBJECT_ID(N&#039;[dbo].[PC_DELAYEDKEYINFO]&#039;)&lt;br /&gt;
          AND name = &#039;type&#039;&lt;br /&gt;
    )&lt;br /&gt;
ALTER TABLE PC_DELAYEDKEYINFO&lt;br /&gt;
    DROP COLUMN type;&lt;br /&gt;
&lt;br /&gt;
ALTER TABLE PC_EVENT ALTER COLUMN requester_ip varchar(64);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Oracle ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
ALTER TABLE pc_delayedkeyinfo MODIFY is_deleted NOT NULL;&lt;br /&gt;
ALTER TABLE pc_delayedkeyinfo MODIFY is_deleted DEFAULT 0;&lt;br /&gt;
ALTER TABLE pc_delayedkeyinfo DROP COLUMN type;&lt;br /&gt;
ALTER TABLE pc_delayedkeyinfo ADD renew_challenge VARCHAR2(255);&lt;br /&gt;
&lt;br /&gt;
ALTER TABLE pc_device MODIFY is_deleted NOT NULL;&lt;br /&gt;
ALTER TABLE pc_device MODIFY is_deleted DEFAULT 0;&lt;br /&gt;
ALTER TABLE pc_device ADD app_id VARCHAR2(255);&lt;br /&gt;
&lt;br /&gt;
ALTER TABLE pc_event MODIFY is_deleted NOT NULL;&lt;br /&gt;
ALTER TABLE pc_event MODIFY is_deleted DEFAULT 0;&lt;br /&gt;
ALTER TABLE pc_event MODIFY requester_ip VARCHAR2(64);&lt;br /&gt;
ALTER TABLE pc_event ADD event_data CLOB;&lt;br /&gt;
ALTER TABLE pc_event DROP COLUMN eventposturl;&lt;br /&gt;
&lt;br /&gt;
ALTER TABLE pc_keyinfo MODIFY is_deleted NOT NULL;&lt;br /&gt;
ALTER TABLE pc_keyinfo MODIFY is_deleted DEFAULT 0;&lt;br /&gt;
ALTER TABLE pc_keyinfo DROP COLUMN type;&lt;br /&gt;
ALTER TABLE pc_keyinfo DROP COLUMN key_container_id;&lt;br /&gt;
ALTER TABLE pc_keyinfo ADD external_approve_data_id VARCHAR2(255);&lt;br /&gt;
&lt;br /&gt;
ALTER TABLE pc_publickey MODIFY is_deleted NOT NULL;&lt;br /&gt;
ALTER TABLE pc_publickey MODIFY is_deleted DEFAULT 0;&lt;br /&gt;
ALTER TABLE pc_publickey ADD autosign_public_key BLOB;&lt;br /&gt;
&lt;br /&gt;
ALTER TABLE pc_system MODIFY is_deleted NOT NULL;&lt;br /&gt;
ALTER TABLE pc_system MODIFY is_deleted DEFAULT 0;&lt;br /&gt;
ALTER TABLE pc_system ADD callback_url VARCHAR2(255);&lt;br /&gt;
&lt;br /&gt;
ALTER TABLE pc_system_params MODIFY is_deleted NOT NULL;&lt;br /&gt;
ALTER TABLE pc_system_params MODIFY is_deleted DEFAULT 0;&lt;br /&gt;
ALTER TABLE pc_system_params MODIFY license VARCHAR2(4000);&lt;br /&gt;
ALTER TABLE pc_system_params ADD qr_url_scheme VARCHAR2(24);&lt;br /&gt;
&lt;br /&gt;
ALTER TABLE pc_transaction MODIFY is_deleted NOT NULL;&lt;br /&gt;
ALTER TABLE pc_transaction MODIFY is_deleted DEFAULT 0;&lt;br /&gt;
ALTER TABLE pc_transaction ADD autosign_enabled NUMBER(5);&lt;br /&gt;
ALTER TABLE pc_transaction ADD ext_pulp BLOB;&lt;br /&gt;
ALTER TABLE pc_transaction ADD extended_check NUMBER(5);&lt;br /&gt;
ALTER TABLE pc_transaction ADD render_type NUMBER(10);&lt;br /&gt;
ALTER TABLE pc_transaction ADD scoring_settings VARCHAR2(1023);&lt;br /&gt;
ALTER TABLE pc_transaction ADD transaction_type NUMBER(10);&lt;br /&gt;
ALTER TABLE pc_transaction ADD snipped_text VARCHAR2(1023);&lt;br /&gt;
&lt;br /&gt;
ALTER TABLE pc_user MODIFY is_deleted NOT NULL;&lt;br /&gt;
ALTER TABLE pc_user MODIFY is_deleted DEFAULT 0;&lt;br /&gt;
ALTER TABLE pc_user ADD blocked NUMBER(5);&lt;br /&gt;
&lt;br /&gt;
ALTER TABLE pc_confirm_attempt ADD scoring_results VARCHAR2(512);&lt;br /&gt;
ALTER TABLE pc_confirm_attempt ADD scoring_settings VARCHAR2(512);&lt;br /&gt;
&lt;br /&gt;
ALTER TABLE pc_sys_property MODIFY SETTING_VALUE VARCHAR2(1023);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Запрос на регистрацию и лицензия ==&lt;br /&gt;
&lt;br /&gt;
=== Получение нового запроса и лицензии ===&lt;br /&gt;
&lt;br /&gt;
Для получения обновленного запроса на регистрацию и лицензии обратитесь в компанию Сэйфтек.&lt;br /&gt;
&lt;br /&gt;
=== Замена запроса в БД ===&lt;br /&gt;
&lt;br /&gt;
В приведённом ниже запросе необходимо:&lt;br /&gt;
&lt;br /&gt;
* заменить &amp;lt;code&amp;gt;%SYSTEMID%&amp;lt;/code&amp;gt; на реальное значение systemid зарегистрированное для Вашей прикладной системы. Обратите внимание, что знаки процента &#039;&#039;&#039;нужно удалить&#039;&#039;&#039;;&lt;br /&gt;
* заменить &amp;lt;code&amp;gt;%REGISTERREQUEST%&amp;lt;/code&amp;gt; на реальные данные запроса, созданного для Вашей прикладной системы. Обратите внимание, что знаки процента &#039;&#039;&#039;нужно удалить&#039;&#039;&#039;;&lt;br /&gt;
** пример нужных данных запроса &amp;lt;code&amp;gt;eyJyZXF1ZXN0Ijp7InFyVVJMU2NoZW1lIjoiIiwiYmlsbGluZ1R5cGUiOjIsImludGVyYWN0aW9uRXh0ZXJuYWxVUkwiOiJodHRwczovL3BheWNvbnRyb2wuZXhhbXBsZS5jb20vcGMtY2xpZW50LWFwaS8iLCJpbnRlcmFjd----m1VRERpZndVU3VOS3BoYmV4emsifQ==&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
update pc_system_params set register_request=&#039;%REGISTERREQUEST%&#039; where systemid=&#039;%SYSTEMID%&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Замена лицензии(при наличии) в БД ===&lt;br /&gt;
&lt;br /&gt;
В приведённом ниже запросе необходимо:&lt;br /&gt;
&lt;br /&gt;
* заменить &amp;lt;code&amp;gt;%SYSTEMID%&amp;lt;/code&amp;gt; на реальное значение systemid зарегистрированное для Вашей прикладной системы. Обратите внимание, что знаки процента &#039;&#039;&#039;нужно удалить&#039;&#039;&#039;;&lt;br /&gt;
* заменить &amp;lt;code&amp;gt;%LICENSE%&amp;lt;/code&amp;gt; на реальные данные лицензии, созданной для Вашей прикладной системы. Обратите внимание, что знаки процента &#039;&#039;&#039;нужно удалить&#039;&#039;&#039;;&lt;br /&gt;
** пример нужных данных запроса &amp;lt;code&amp;gt;{&amp;quot;request&amp;quot;:{&amp;quot;systemId&amp;quot;:&amp;quot;99000000-e00e-0ad0-00ab-f00f0000a0b0&amp;quot;,&amp;quot;dateTime&amp;quot;:1700000000000,&amp;quot;usersCount&amp;quot;:100,&amp;quot;licenseID&amp;quot;:&amp;quot;0000e000-0000-0000-b0ec-c0f0000000f0&amp;quot;,&amp;quot;type&amp;quot;:2,&amp;quot;features&amp;quot;:{&amp;quot;gost_crypto&amp;quot;:false,&amp;quot;pki&amp;quot;:{&amp;quot;openssl&amp;quot;:false},&amp;quot;binary_data&amp;quot;:{&amp;quot;raw&amp;quot;:true,&amp;quot;pdf&amp;quot;:true},&amp;quot;server_signer&amp;quot;:false,&amp;quot;rks&amp;quot;:false}},&amp;quot;signature&amp;quot;:&amp;quot;MEYCIQDy7OUT6iiligbiugYcpK9fjkU/GDRIUiJtB+UcHppVwIhAKzS+EcktxyRikvqEThPyo1jHlPuAfgxW+EEo5gioW7Y&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
update pc_system_params set license=&#039;%LICENSE%&#039; where systemid=&#039;%SYSTEMID%&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Обновление модулей PC =&lt;br /&gt;
&lt;br /&gt;
Перед обновлением настоятельно рекомендуем также выполнить резервное копирование баз данных PC.&lt;br /&gt;
&lt;br /&gt;
Для установки PC 6-й версии воспользуйтесь инструкцией по ссылке - https://repo.paycontrol.org/server/doc/latest/pc-install-guide/ru/#перед-установкой&lt;br /&gt;
&lt;br /&gt;
После обновления &#039;&#039;&#039;необходимо&#039;&#039;&#039; отключить автозапуск Wildfly и выполнить запрос к БД:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
update pc_keyinfo set is_activated=1;&lt;br /&gt;
update pc_transaction set transaction_type=0;&lt;br /&gt;
update pc_transaction set render_type=0;&lt;br /&gt;
update pc_transaction set status=6 where status=4;&lt;br /&gt;
update pc_transaction set status=7 where status=5;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Корректировка (смена) адресов компонентов серверов PC ==&lt;br /&gt;
&lt;br /&gt;
=== Изменение адреса PCP для подключения с PCS ===&lt;br /&gt;
&lt;br /&gt;
Для изменения адреса сервера PCP, необходимо, предварительно указав корректные данные (протокол (HTTP/HTTPS), имя или IP сервера, порт, идентификатор системы), выполнить запрос к БД PCS: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_internal_url = &#039;http[s]://&amp;lt;IP или DNS-имя&amp;gt;:8082/pc-pusher-api/&#039; where systemid=&#039;&amp;lt;SYSTEMID&amp;gt;&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Изменение адреса для внешних подключений (PCE) с мобильных устройств ===&lt;br /&gt;
&lt;br /&gt;
Для изменения внешнего адреса сервера PC, по которому связываются мобильное приложение с сервером PC, необходимо, предварительно указав корректные данные (протокол (HTTP/HTTPS), имя или IP сервера, порт, идентификатор системы), выполнить запрос к БД PCS:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_external_url = &#039;http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/pc-client-api/&#039; where systemid=&#039;&amp;lt;SYSTEMID&amp;gt;&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На версии сервера 6.0.0-6.9.0 &#039;&#039;&#039;для работы старых ключей&#039;&#039;&#039;, обращающихся по эндпоинту &amp;lt;code&amp;gt;/PayControl-interaction-rest/&amp;lt;/code&amp;gt; нужно установить проксирование на эндпоинт &amp;lt;code&amp;gt;/pc-client-api/&amp;lt;/code&amp;gt;, любым удобным способом.&lt;br /&gt;
&lt;br /&gt;
Пример для nginx:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
        location /PayControl-interaction-rest/ {&lt;br /&gt;
                proxy_pass http://o-pc-ext-example.com:8081/pc-client-api/;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Правки для корректной отправки пушей ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
update pc_device set app_id =&#039;org.example.app&#039; where device_push_id not like &#039;%####%&#039; and app_id is null and type=1;&lt;br /&gt;
!!!Запрос выше для Android при обновлении с 3.6-3.7. Вместо org.example.app нужно вписать app_id вашего приложения из БД PCIS Internal:&lt;br /&gt;
select appid from pc_split_pusher_credentials where os=&#039;Android&#039;;&lt;br /&gt;
&lt;br /&gt;
update pc_device set app_id =&#039;org.example.app&#039; where device_push_id not like &#039;%####%&#039; and app_id is null and type=2;&lt;br /&gt;
!!!Запрос выше для iOS при обновлении с 3.6-3.7. Вместо org.example.app нужно вписать app_id вашего приложения из БД PCIS Internal:&lt;br /&gt;
select appid from pc_split_pusher_credentials where os=&#039;iOS&#039;;&lt;br /&gt;
&lt;br /&gt;
update pc_device set app_id = split_part(device_push_id,&#039;####&#039;,2) where app_id is NULL;&lt;br /&gt;
update pc_device set device_push_id = split_part(device_push_id,&#039;####&#039;,1) where app_id is not NULL;&lt;br /&gt;
&lt;br /&gt;
!!! &#039;&#039;&#039;Обратите внимание&#039;&#039;&#039;, что для выполнения запросов со split_part на Oracle нужно сначала выполнить запрос ниже:&lt;br /&gt;
create or replace function split_part(pString varchar2, pDelimiter varchar2, pPartNumber integer) return varchar2 deterministic is&lt;br /&gt;
  vStart number; &lt;br /&gt;
  vEnd   number;&lt;br /&gt;
begin&lt;br /&gt;
  if pPartNumber &amp;lt;&amp;gt; 0 and pDelimiter is not null then&lt;br /&gt;
    vStart := instr(pDelimiter||pString||pDelimiter, pDelimiter, sign(pPartNumber), abs(pPartNumber));&lt;br /&gt;
    vEnd   := instr(pDelimiter||pString||pDelimiter, pDelimiter, sign(pPartNumber), abs(pPartNumber) + 1);&lt;br /&gt;
  end if;&lt;br /&gt;
  return case         &lt;br /&gt;
           when pDelimiter is null and abs(pPartNumber) = 1 then pString&lt;br /&gt;
           when pPartNumber &amp;gt; 0 then substr(pString, vStart, vEnd - vStart - length(pDelimiter))                       &lt;br /&gt;
           when pPartNumber &amp;lt; 0 then substr(pString, vEnd, vStart - vEnd - length(pDelimiter))          &lt;br /&gt;
           else null&lt;br /&gt;
         end;&lt;br /&gt;
end;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Документация по работе с PC 6-й версии =&lt;br /&gt;
&lt;br /&gt;
* Вся документация - https://repo.paycontrol.org/&lt;br /&gt;
&lt;br /&gt;
* Руководство администратора - https://repo.paycontrol.org/server/doc/latest/pc-admin-guide/ru/&lt;br /&gt;
&lt;br /&gt;
* Справочное руководство - https://repo.paycontrol.org/server/doc/latest/pc-reference-guide/ru/&lt;br /&gt;
&lt;br /&gt;
== Доступ к сервисам ==&lt;br /&gt;
&lt;br /&gt;
Адреса конечных точек по умолчанию:&lt;br /&gt;
&lt;br /&gt;
* PC Server - http://&amp;lt;host&amp;gt;:8080/pc-api/&lt;br /&gt;
* PC Pusher - http://&amp;lt;host&amp;gt;:8082/pc-pusher-api/&lt;br /&gt;
* PC External - http://&amp;lt;host&amp;gt;:8081/pc-client-api/&lt;br /&gt;
&lt;br /&gt;
=== Health Check ===&lt;br /&gt;
&lt;br /&gt;
Адреса конечных точек health check:&lt;br /&gt;
&lt;br /&gt;
* PC Server - http://&amp;lt;host&amp;gt;:8080/pc-api/health_check&lt;br /&gt;
* PC Pusher - http://&amp;lt;host&amp;gt;:8082/pc-pusher-api/health_check&lt;br /&gt;
* PC External - http://&amp;lt;host&amp;gt;:8081/pc-client-api/health_check&lt;br /&gt;
&lt;br /&gt;
= Откат обновления в случае сбоя =&lt;br /&gt;
&lt;br /&gt;
Остановите сервисы PC.&lt;br /&gt;
&lt;br /&gt;
Восстановите БД PCS и PCIS Internal из бэкапа.&lt;br /&gt;
&lt;br /&gt;
Переключитесь на Java 11.&lt;br /&gt;
&lt;br /&gt;
Запустите wildfly и включите автозапуск.&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=861</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=861"/>
		<updated>2025-06-25T22:39:07Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: /* PayControl */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ресурс содержит документацию и справочные сведения и предназначен для предоставления доступа к этой информации партнёрам компании SafeTech.&lt;br /&gt;
&lt;br /&gt;
= PayControl Wiki =&lt;br /&gt;
&lt;br /&gt;
== Список категорий ==&lt;br /&gt;
&lt;br /&gt;
{{Special:AllPages|namespace=14}}&lt;br /&gt;
&lt;br /&gt;
== Список статей ==&lt;br /&gt;
&lt;br /&gt;
{{Special:AllPages}}&lt;br /&gt;
&lt;br /&gt;
= Демо =&lt;br /&gt;
&lt;br /&gt;
== PayControl ==&lt;br /&gt;
&lt;br /&gt;
* https://paycontrol.org/ru/demo.php&lt;br /&gt;
* https://paycontrol.org/eng/demo.php&lt;br /&gt;
&lt;br /&gt;
== myDSS ==&lt;br /&gt;
&lt;br /&gt;
=== 2.0 ===&lt;br /&gt;
&lt;br /&gt;
https://mydss.safe-tech.ru/demo/&lt;br /&gt;
&lt;br /&gt;
=== v.1 ===&lt;br /&gt;
&lt;br /&gt;
https://paycontrol.org/mydss/&lt;br /&gt;
&lt;br /&gt;
= Открытый ключ для проверки подписи файлов в репозитории =&lt;br /&gt;
&lt;br /&gt;
* https://repo.paycontrol.org/keySafeTech.pub.asc (до 2022-02-10)&lt;br /&gt;
* https://repo.paycontrol.org/SafeTech.pub.asc (до 2024-09-15)&lt;br /&gt;
* https://repo.paycontrol.org/SafeTech2024.pub.asc (до 2026-10-01)&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=860</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=860"/>
		<updated>2025-06-25T22:38:36Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: /* PayControl */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ресурс содержит документацию и справочные сведения и предназначен для предоставления доступа к этой информации партнёрам компании SafeTech.&lt;br /&gt;
&lt;br /&gt;
= PayControl Wiki =&lt;br /&gt;
&lt;br /&gt;
== Список категорий ==&lt;br /&gt;
&lt;br /&gt;
{{Special:AllPages|namespace=14}}&lt;br /&gt;
&lt;br /&gt;
== Список статей ==&lt;br /&gt;
&lt;br /&gt;
{{Special:AllPages}}&lt;br /&gt;
&lt;br /&gt;
= Демо =&lt;br /&gt;
&lt;br /&gt;
== PayControl ==&lt;br /&gt;
&lt;br /&gt;
* https://paycontrol.org/ru/demo&lt;br /&gt;
* https://paycontrol.org/eng/demo&lt;br /&gt;
&lt;br /&gt;
== myDSS ==&lt;br /&gt;
&lt;br /&gt;
=== 2.0 ===&lt;br /&gt;
&lt;br /&gt;
https://mydss.safe-tech.ru/demo/&lt;br /&gt;
&lt;br /&gt;
=== v.1 ===&lt;br /&gt;
&lt;br /&gt;
https://paycontrol.org/mydss/&lt;br /&gt;
&lt;br /&gt;
= Открытый ключ для проверки подписи файлов в репозитории =&lt;br /&gt;
&lt;br /&gt;
* https://repo.paycontrol.org/keySafeTech.pub.asc (до 2022-02-10)&lt;br /&gt;
* https://repo.paycontrol.org/SafeTech.pub.asc (до 2024-09-15)&lt;br /&gt;
* https://repo.paycontrol.org/SafeTech2024.pub.asc (до 2026-10-01)&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A1%D0%B5%D1%80%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D1%8B&amp;diff=859</id>
		<title>Категория:Сертификаты</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A1%D0%B5%D1%80%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D1%8B&amp;diff=859"/>
		<updated>2025-06-25T22:35:16Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: Создана пустая страница&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:PKI&amp;diff=858</id>
		<title>Категория:PKI</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:PKI&amp;diff=858"/>
		<updated>2025-06-25T22:35:11Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: Создана пустая страница&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:OpenSSL&amp;diff=857</id>
		<title>Категория:OpenSSL</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:OpenSSL&amp;diff=857"/>
		<updated>2025-06-25T22:35:04Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: Создана пустая страница&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=PayControl_PKI&amp;diff=856</id>
		<title>PayControl PKI</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=PayControl_PKI&amp;diff=856"/>
		<updated>2025-06-25T22:34:35Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OpenSSL =&lt;br /&gt;
&lt;br /&gt;
== Конфигурирование PKI коннектора ==&lt;br /&gt;
&lt;br /&gt;
=== Путь к конфигурационному файлу коннектора ===&lt;br /&gt;
&lt;br /&gt;
Настройку необходимо внести в pc_sys_property БД PCS.&lt;br /&gt;
&lt;br /&gt;
PKI_SETTINGS_PATH      | /opt/pc/pki/pki-settings.properties&lt;br /&gt;
&lt;br /&gt;
Пример для PostgreSQL:&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;insert into pc_sys_property values (nextval(&#039;pc_setting_seq&#039;), &#039;PKI_SETTINGS_PATH&#039;, &#039;/opt/pc/pki/pki-settings.properties&#039;);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Пример конфигурационного файла ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# check certificate&#039;s expiration, cert path and other constrains during each cert use&lt;br /&gt;
checkCertificates=true&lt;br /&gt;
&lt;br /&gt;
# check certificate revocation status, to use checkCertificates must be true&lt;br /&gt;
checkRevocation=true&lt;br /&gt;
useCRL=true&lt;br /&gt;
useOCSP=false&lt;br /&gt;
&lt;br /&gt;
# -- OpenSSL Settings&lt;br /&gt;
caType=OpenSSL&lt;br /&gt;
issueCertificateCmd=/opt/pc/pki/issue_cert.sh&lt;br /&gt;
revokeCertificateCmd=/opt/pc/pki/revoke_cert.sh&lt;br /&gt;
&lt;br /&gt;
# files prefixes must contain path where tmp files will be stored&lt;br /&gt;
csrTmpFilePrefix=pc-openssl-connector-csr-&lt;br /&gt;
certTmpFilePrefix=pc-openssl-connector-cert-&lt;br /&gt;
&lt;br /&gt;
# certificate chain in PEM-format&lt;br /&gt;
#    the first certificate must be CA (self-signed), second - 1st intermediate, third - 2nd intermediate and so on&lt;br /&gt;
#    if checkRevocation is true, then each of intermediate certificates must contain OCSP url or CRL Distribution point&lt;br /&gt;
caChainFileName=/opt/pc/pki/Intermediate_CA/certs/intermediate.chain.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Пример файла выпуска сертификата ==&lt;br /&gt;
&lt;br /&gt;
=== ECDSA ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CA_DIR=/opt/pc/pki/Intermediate_CA&lt;br /&gt;
KEY_PASS=secretpassword&lt;br /&gt;
&lt;br /&gt;
DER_CSR_FILE_NAME=$1&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;$(basename -- $DER_CSR_FILE_NAME)&amp;quot;&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;${DER_CSR_BASE_FILE_NAME%.*}&amp;quot;&lt;br /&gt;
PEM_CSR_FILE_NAME=csr/$DER_CSR_BASE_FILE_NAME.pem&lt;br /&gt;
PEM_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.pem&lt;br /&gt;
DER_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.der&lt;br /&gt;
&lt;br /&gt;
DEST_CERT_FILE_NAME=$2&lt;br /&gt;
&lt;br /&gt;
cd $CA_DIR&lt;br /&gt;
openssl req -inform DER -in $DER_CSR_FILE_NAME -out $PEM_CSR_FILE_NAME&lt;br /&gt;
openssl ca -config openssl.cnf -extensions usr_cert -days 375 -notext -md sha256 -in $PEM_CSR_FILE_NAME -out $PEM_CERT_FILE_NAME -passin pass:$KEY_PASS -batch&lt;br /&gt;
openssl x509 -outform der -in $PEM_CERT_FILE_NAME -out $DER_CERT_FILE_NAME&lt;br /&gt;
&lt;br /&gt;
cp $DER_CERT_FILE_NAME $DEST_CERT_FILE_NAME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ГОСТ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CA_DIR=/opt/pc/pki/Intermediate_CA&lt;br /&gt;
KEY_PASS=secretpassword&lt;br /&gt;
&lt;br /&gt;
DER_CSR_FILE_NAME=$1&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;$(basename -- $DER_CSR_FILE_NAME)&amp;quot;&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;${DER_CSR_BASE_FILE_NAME%.*}&amp;quot;&lt;br /&gt;
PEM_CSR_FILE_NAME=csr/$DER_CSR_BASE_FILE_NAME.pem&lt;br /&gt;
PEM_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.pem&lt;br /&gt;
DER_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.der&lt;br /&gt;
&lt;br /&gt;
DEST_CERT_FILE_NAME=$2&lt;br /&gt;
&lt;br /&gt;
cd $CA_DIR&lt;br /&gt;
openssl req -inform DER -in $DER_CSR_FILE_NAME -out $PEM_CSR_FILE_NAME&lt;br /&gt;
openssl ca -config openssl.cnf -extensions usr_cert -days 375 -notext -md gost12_256 -in $PEM_CSR_FILE_NAME -out $PEM_CERT_FILE_NAME -passin pass:$KEY_PASS -batch&lt;br /&gt;
openssl x509 -outform der -in $PEM_CERT_FILE_NAME -out $DER_CERT_FILE_NAME&lt;br /&gt;
&lt;br /&gt;
cp $DER_CERT_FILE_NAME $DEST_CERT_FILE_NAME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Пример файла отзыва сертификата ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CERT_FILE_NAME=$1&lt;br /&gt;
KEY_PASS=secretpassword&lt;br /&gt;
CA_DIR=/opt/pc/pki/Intermediate_CA&lt;br /&gt;
INTERMEDIATE_CRL_LOCATION=crl/intermediate.crl&lt;br /&gt;
&lt;br /&gt;
cd $CA_DIR&lt;br /&gt;
&lt;br /&gt;
#revoke&lt;br /&gt;
openssl ca -config openssl.cnf -revoke $CERT_FILE_NAME -passin pass:$KEY_PASS&lt;br /&gt;
#publish CRL&lt;br /&gt;
openssl ca -config openssl.cnf -gencrl -out $INTERMEDIATE_CRL_LOCATION -passin pass:$KEY_PASS&lt;br /&gt;
cp -v $INTERMEDIATE_CRL_LOCATION /opt/pc/pki/pub/crl/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Пример файла скрипта публикации списка отзыва корневого УЦ ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
openssl ca \&lt;br /&gt;
-config /opt/pc/pki/Root_CA/openssl_host.cnf \&lt;br /&gt;
-gencrl \&lt;br /&gt;
-out /opt/pc/pki/Root_CA/crl/root.crl \&lt;br /&gt;
-passin pass:secretpassword&lt;br /&gt;
cp /opt/pc/pki/Root_CA/crl/root.crl /opt/pc/pki/pub/crl/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Пример файла скрипта публикации списка отзыва промежуточного УЦ ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
openssl ca \&lt;br /&gt;
-config /opt/pc/pki/Intermediate_CA/openssl_host.cnf \&lt;br /&gt;
-gencrl \&lt;br /&gt;
-out /opt/pc/pki/Intermediate_CA/crl/intermediate.crl \&lt;br /&gt;
-passin pass:secretpassword&lt;br /&gt;
cp /opt/pc/pki/Intermediate_CA/crl/intermediate.crl /opt/pc/pki/pub/crl/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Включение ГОСТ в OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== Установка модуля ГОСТ ===&lt;br /&gt;
&lt;br /&gt;
Для работы OpenSSL с криптоалгоритмами ГОСТ необходимо установить криптографическую библиотеку и настроить работу с этой библиотекой в конфигурационном файле, для этого:&lt;br /&gt;
&lt;br /&gt;
* Установите пакет &amp;lt;code&amp;gt;openssl-gost-engine&amp;lt;/code&amp;gt;, либо, если его нет в репозитории Вашего дистрибутива, скачайте по ссылке https://repo.paycontrol.org/cdn/artefacts/gost-engine/engine/gost.so (sha256sum: &amp;lt;code&amp;gt;435a0dee3273d924458c14ad57ac44b0711aa37fb3df9f2ba987a118f2339b1f  gost.so&amp;lt;/code&amp;gt;) и разместите скаченный файл криптобиблиотеки в директории модулей OpenSSL (в зависимости от дистрибутива это может быть &amp;lt;code&amp;gt;/usr/lib/engines-3/&amp;lt;/code&amp;gt;, или, например &amp;lt;code&amp;gt;/usr/lib64/engines-3/&amp;lt;/code&amp;gt;).&lt;br /&gt;
* В кофигурационный файл OpenSSL добавьте:&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;openssl_conf = openssl_def&lt;br /&gt;
&lt;br /&gt;
[openssl_def]&lt;br /&gt;
engines = engine_section&lt;br /&gt;
&lt;br /&gt;
[engine_section]&lt;br /&gt;
gost = gost_section&lt;br /&gt;
&lt;br /&gt;
[gost_section]&lt;br /&gt;
engine_id = gost&lt;br /&gt;
dynamic_path = /usr/lib/engines-3/gost.so&lt;br /&gt;
default_algorithms = ALL &amp;lt;/syntaxhighlight&amp;gt;, где в качестве значения &amp;lt;code&amp;gt;dynamic_path&amp;lt;/code&amp;gt; должен быть указан путь к библиотеке &amp;lt;code&amp;gt;gost.so&amp;lt;/code&amp;gt;.&lt;br /&gt;
* В кофигурационном файле OpenSSL параметру &amp;lt;code&amp;gt;default_md&amp;lt;/code&amp;gt; необходимо установить значение &amp;lt;code&amp;gt;md_gost12_256&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример команд для создания корневого и промежуточного ГОСТ-УЦ в OpenSSL ==&lt;br /&gt;
&lt;br /&gt;
=== Создание корневого сертификата ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
openssl genpkey -config openssl_intermediate.cnf -pass pass:$KEY_PASS -algorithm gost2012_256 -pkeyopt paramset:A -out private/root.key.pem&lt;br /&gt;
openssl req -config openssl_intermediate.cnf -key private/root.key.pem -passin pass:${PKI_KEY_PASS} -new -x509 -days 7300 -md_gost12_256 -extensions v3_ca -subj &amp;quot;${PKI_ROOT_SUBJECT}&amp;quot; -out certs/root.cert.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключа и запроса для промежуточного УЦ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
openssl genpkey -config openssl_root.cnf -pass pass:$KEY_PASS -algorithm gost2012_256 -pkeyopt paramset:A -out private/intermediate.key.pem&lt;br /&gt;
openssl req -config openssl_root.cnf -key private/intermediate.key.pem -passin pass:${PKI_KEY_PASS} -new -md_gost12_256 -subj &amp;quot;${PKI_INTERMEDIATE_SUBJECT}&amp;quot; -out csr/intermediate.csr.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Выпуск сертификата для промежуточного УЦ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
openssl ca -config openssl_intermediate.cnf -extensions v3_intermediate_ca -passin pass:${PKI_KEY_PASS} -days 3650 -notext -md gost12_256 -in ../Intermediate_CA/csr/intermediate.csr.pem -out ../Intermediate_CA/certs/intermediate.cert.pem -out certs/intermediate.cert.pem -batch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:OpenSSL]]&lt;br /&gt;
[[Категория:PKI]]&lt;br /&gt;
[[Категория:Сертификаты]]&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%97%D0%B0%D0%BF%D1%83%D1%81%D0%BA_PC_%D0%B2_Docker&amp;diff=829</id>
		<title>Запуск PC в Docker</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%97%D0%B0%D0%BF%D1%83%D1%81%D0%BA_PC_%D0%B2_Docker&amp;diff=829"/>
		<updated>2024-10-09T18:29:55Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: Содержимое страницы заменено на «=== 3.5 – 5.5 ===  https://repo.paycontrol.org/server/doc/v5.5/pc-install-guide/ru/#под-docker  === 6 ===  https://repo.paycon…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== 3.5 – 5.5 ===&lt;br /&gt;
&lt;br /&gt;
https://repo.paycontrol.org/server/doc/v5.5/pc-install-guide/ru/#под-docker&lt;br /&gt;
&lt;br /&gt;
=== 6 ===&lt;br /&gt;
&lt;br /&gt;
https://repo.paycontrol.org/server/doc/latest/pc-install-guide/ru/#под-docker&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=820</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=820"/>
		<updated>2024-10-01T09:44:11Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: /* Открытый ключ для проверки подписи файлов в репозитории */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ресурс содержит документацию и справочные сведения и предназначен для предоставления доступа к этой информации партнёрам компании SafeTech.&lt;br /&gt;
&lt;br /&gt;
= PayControl Wiki =&lt;br /&gt;
&lt;br /&gt;
== Список категорий ==&lt;br /&gt;
&lt;br /&gt;
{{Special:AllPages|namespace=14}}&lt;br /&gt;
&lt;br /&gt;
== Список статей ==&lt;br /&gt;
&lt;br /&gt;
{{Special:AllPages}}&lt;br /&gt;
&lt;br /&gt;
= Демо =&lt;br /&gt;
&lt;br /&gt;
== PayControl ==&lt;br /&gt;
&lt;br /&gt;
https://paycontrol.org/demo/&lt;br /&gt;
&lt;br /&gt;
== myDSS ==&lt;br /&gt;
&lt;br /&gt;
=== 2.0 ===&lt;br /&gt;
&lt;br /&gt;
https://mydss.safe-tech.ru/demo/&lt;br /&gt;
&lt;br /&gt;
=== v.1 ===&lt;br /&gt;
&lt;br /&gt;
https://paycontrol.org/mydss/&lt;br /&gt;
&lt;br /&gt;
= Открытый ключ для проверки подписи файлов в репозитории =&lt;br /&gt;
&lt;br /&gt;
* https://repo.paycontrol.org/keySafeTech.pub.asc (до 2022-02-10)&lt;br /&gt;
* https://repo.paycontrol.org/SafeTech.pub.asc (до 2024-09-15)&lt;br /&gt;
* https://repo.paycontrol.org/SafeTech2024.pub.asc (до 2026-10-01)&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=PayControl_PKI&amp;diff=799</id>
		<title>PayControl PKI</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=PayControl_PKI&amp;diff=799"/>
		<updated>2023-11-16T10:31:07Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: Новая страница: «== Путь к конфигурационному файлу коннектора ==  Настройку необходимо внести в pc_sys_property БД…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Путь к конфигурационному файлу коннектора ==&lt;br /&gt;
&lt;br /&gt;
Настройку необходимо внести в pc_sys_property БД PCS.&lt;br /&gt;
&lt;br /&gt;
PKI_SETTINGS_PATH      | /opt/pc/pki/pki-settings.properties&lt;br /&gt;
&lt;br /&gt;
Пример для PostgreSQL:&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;insert into pc_sys_property values (nextval(&#039;pc_setting_seq&#039;), &#039;PKI_SETTINGS_PATH&#039;, &#039;/opt/pc/pki/pki-settings.properties&#039;);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Пример конфигурационного файла ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# check certificate&#039;s expiration, cert path and other constrains during each cert use&lt;br /&gt;
checkCertificates=true&lt;br /&gt;
&lt;br /&gt;
# check certificate revocation status, to use checkCertificates must be true&lt;br /&gt;
checkRevocation=true&lt;br /&gt;
useCRL=true&lt;br /&gt;
useOCSP=false&lt;br /&gt;
&lt;br /&gt;
# -- OpenSSL Settings&lt;br /&gt;
caType=OpenSSL&lt;br /&gt;
issueCertificateCmd=/opt/pc/pki/issue_cert.sh&lt;br /&gt;
revokeCertificateCmd=/opt/pc/pki/revoke_cert.sh&lt;br /&gt;
&lt;br /&gt;
# files prefixes must contain path where tmp files will be stored&lt;br /&gt;
csrTmpFilePrefix=pc-openssl-connector-csr-&lt;br /&gt;
certTmpFilePrefix=pc-openssl-connector-cert-&lt;br /&gt;
&lt;br /&gt;
# certificate chain in PEM-format&lt;br /&gt;
#    the first certificate must be CA (self-signed), second - 1st intermediate, third - 2nd intermediate and so on&lt;br /&gt;
#    if checkRevocation is true, then each of intermediate certificates must contain OCSP url or CRL Distribution point&lt;br /&gt;
caChainFileName=/opt/pc/pki/Intermediate_CA/certs/intermediate.chain.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Пример файла выпуска сертификата ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CA_DIR=/opt/pc/pki/Intermediate_CA&lt;br /&gt;
KEY_PASS=secretpassword&lt;br /&gt;
&lt;br /&gt;
DER_CSR_FILE_NAME=$1&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;$(basename -- $DER_CSR_FILE_NAME)&amp;quot;&lt;br /&gt;
DER_CSR_BASE_FILE_NAME=&amp;quot;${DER_CSR_BASE_FILE_NAME%.*}&amp;quot;&lt;br /&gt;
PEM_CSR_FILE_NAME=csr/$DER_CSR_BASE_FILE_NAME.pem&lt;br /&gt;
PEM_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.pem&lt;br /&gt;
DER_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.der&lt;br /&gt;
&lt;br /&gt;
DEST_CERT_FILE_NAME=$2&lt;br /&gt;
&lt;br /&gt;
cd $CA_DIR&lt;br /&gt;
openssl req -inform DER -in $DER_CSR_FILE_NAME -out $PEM_CSR_FILE_NAME&lt;br /&gt;
openssl ca -config openssl.cnf -extensions usr_cert -days 375 -notext -md sha256 -in $PEM_CSR_FILE_NAME -out $PEM_CERT_FILE_NAME -passin pass:$KEY_PASS -batch&lt;br /&gt;
openssl x509 -outform der -in $PEM_CERT_FILE_NAME -out $DER_CERT_FILE_NAME&lt;br /&gt;
&lt;br /&gt;
cp $DER_CERT_FILE_NAME $DEST_CERT_FILE_NAME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Пример файла отзыва сертификата ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
CERT_FILE_NAME=$1&lt;br /&gt;
KEY_PASS=secretpassword&lt;br /&gt;
CA_DIR=/opt/pc/pki/Intermediate_CA&lt;br /&gt;
INTERMEDIATE_CRL_LOCATION=crl/intermediate.crl&lt;br /&gt;
&lt;br /&gt;
cd $CA_DIR&lt;br /&gt;
&lt;br /&gt;
#revoke&lt;br /&gt;
openssl ca -config openssl.cnf -revoke $CERT_FILE_NAME -passin pass:$KEY_PASS&lt;br /&gt;
#publish CRL&lt;br /&gt;
openssl ca -config openssl.cnf -gencrl -out $INTERMEDIATE_CRL_LOCATION -passin pass:$KEY_PASS&lt;br /&gt;
cp -v $INTERMEDIATE_CRL_LOCATION /opt/pc/pki/pub/crl/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Пример файла скрипта публикации списка отзыва корневого УЦ ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
openssl ca \&lt;br /&gt;
-config /opt/pc/pki/Root_CA/openssl_host.cnf \&lt;br /&gt;
-gencrl \&lt;br /&gt;
-out /opt/pc/pki/Root_CA/crl/root.crl \&lt;br /&gt;
-passin pass:secretpassword&lt;br /&gt;
cp /opt/pc/pki/Root_CA/crl/root.crl /opt/pc/pki/pub/crl/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Пример файла скрипта публикации списка отзыва промежуточного УЦ ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
openssl ca \&lt;br /&gt;
-config /opt/pc/pki/Intermediate_CA/openssl_host.cnf \&lt;br /&gt;
-gencrl \&lt;br /&gt;
-out /opt/pc/pki/Intermediate_CA/crl/intermediate.crl \&lt;br /&gt;
-passin pass:secretpassword&lt;br /&gt;
cp /opt/pc/pki/Intermediate_CA/crl/intermediate.crl /opt/pc/pki/pub/crl/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%9E%D1%82%D1%87%D1%91%D1%82_%D0%BF%D0%BE_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8E_%D0%BB%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D0%B8_PayControl_v3&amp;diff=796</id>
		<title>Отчёт по использованию лицензии PayControl v3</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%9E%D1%82%D1%87%D1%91%D1%82_%D0%BF%D0%BE_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8E_%D0%BB%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D0%B8_PayControl_v3&amp;diff=796"/>
		<updated>2023-08-18T10:24:18Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Генерация отчёта=&lt;br /&gt;
Отчёт может быть сгенерирован путём [[Вызов методов SOAP интерфейса|вызова метода]] &#039;&#039;generateReport&#039;&#039; SOAP-интерфейса [[Сервер PayControl|сервера PCS]], например с помощью SoapUI или cURL.&lt;br /&gt;
&lt;br /&gt;
WSDL схема с этим методом доступна на эндпоинте &amp;lt;code&amp;gt;/ws/PayControlReportService?wsdl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Значения полей==&lt;br /&gt;
===systemId===&lt;br /&gt;
В значении поля должен быть указан SystemID [[Прикладная система|прикладной системы]], для которой генерируется отчёт.&lt;br /&gt;
===Поля для установки временного диапазона===&lt;br /&gt;
Поля&lt;br /&gt;
* &amp;lt;genDate&amp;gt;&lt;br /&gt;
* &amp;lt;dateFrom&amp;gt;&lt;br /&gt;
* &amp;lt;dateTo&amp;gt;&lt;br /&gt;
опциональны. Должны быть либо заполнены в формате YYYY-MM-DD±hh:mm, например 2019-04-24+03:00, либо удалены сами поля.&lt;br /&gt;
==SoapUI==&lt;br /&gt;
Для формирования отчёта необходимо выполнить вызов SOAP-метода &#039;&#039;generateReport&#039;&#039; на сервер PCS, на &#039;&#039;http://%PCS%/ws/PayControlReportService?wsdl&#039;&#039; (заменив %PCS% на реальный адрес сервера). В частности, такой запрос можно выполнить с использованием утилиты [https://www.soapui.org/ SoapUI].&lt;br /&gt;
Пример формирования отчёта за 1 месяц:&lt;br /&gt;
[[Файл:PCS Generate Report.png|обрамить|центр]]&lt;br /&gt;
Для передачи отчёта компании SafeTech необходимо отправить весь результат, возвращённый сервером (в правой части представленного выше изображения).&lt;br /&gt;
&lt;br /&gt;
==cURL==&lt;br /&gt;
# Скопировать или создать файл, содержащий параметры запроса в формате [[XML]] вызываемого SOAP-метода (к примеру, название файла будет &#039;&#039;generateReport.xml&#039;&#039;) в любую директорию на машину, с которой будет производиться запуск команды curl. Этот файл должен содержать параметры запроса на генерацию отчёта. Пример состава файла &#039;&#039;generateReport.xml&#039;&#039; для формирования отчёта за один месяц:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;soapenv:Envelope xmlns:soapenv=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:pay=&amp;quot;http://ws.safetech.ru/PayControlReport/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;soapenv:Header/&amp;gt;&lt;br /&gt;
   &amp;lt;soapenv:Body&amp;gt;&lt;br /&gt;
      &amp;lt;pay:generateReportRequest&amp;gt;&lt;br /&gt;
         &amp;lt;systemId&amp;gt;e33affa9-1ff8-4d2a-aa42-856fb59309e0&amp;lt;/systemId&amp;gt;&lt;br /&gt;
         &amp;lt;genDate&amp;gt;2019-04-24+03:00&amp;lt;/genDate&amp;gt;&lt;br /&gt;
         &amp;lt;dateFrom&amp;gt;2019-03-24+03:00&amp;lt;/dateFrom&amp;gt;&lt;br /&gt;
         &amp;lt;dateTo&amp;gt;2019-04-24+03:00&amp;lt;/dateTo&amp;gt;&lt;br /&gt;
      &amp;lt;/pay:generateReportRequest&amp;gt;&lt;br /&gt;
   &amp;lt;/soapenv:Body&amp;gt;&lt;br /&gt;
&amp;lt;/soapenv:Envelope&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Выполнить команду (в той-же директории, где располагается скопированный файл):&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl --header &amp;quot;Content-Type: text/xml;charset=UTF-8&amp;quot; --header &amp;quot;SOAPAction: generateReport&amp;quot; --data @generateReport.xml  &amp;lt;PCServer_IP/localhost&amp;gt;:8080/ws/PayControlReportService&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Для передачи отчёта компании SafeTech необходимо отправить весь результат, возвращённый сервером.&lt;br /&gt;
=Открытие файла отчёта=&lt;br /&gt;
Для открытия файла отчёта необходимо декодировать из Base64 содержимое из тега &amp;lt;report&amp;gt;, и сохранить как файл с расширением docx. Например, это можно сделать на сайте http://base64converter.com/&lt;br /&gt;
[[Категория:Лицензирование]]&lt;br /&gt;
[[Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_PayControl_v3.9_%D0%B2%D1%80%D1%83%D1%87%D0%BD%D1%83%D1%8E&amp;diff=795</id>
		<title>Установка компонентов сервера PayControl v3.9 вручную</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_PayControl_v3.9_%D0%B2%D1%80%D1%83%D1%87%D0%BD%D1%83%D1%8E&amp;diff=795"/>
		<updated>2023-08-17T06:57:28Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: /* Учёт изменения адреса сервера PCS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Подготовка БД=&lt;br /&gt;
* Создать базу данных и пользователя на сервере СУБД, где будет работать база данных PC Server (pcs-user, pcs-pass, pcs-db, pcs-db-host). Предоставить права на доступ пользователю к БД.&lt;br /&gt;
&lt;br /&gt;
=Установка Java=&lt;br /&gt;
Установить последнюю версию JDK 11.&lt;br /&gt;
&lt;br /&gt;
=Установка Wildfly=&lt;br /&gt;
* Скачать WildFly Server 26.1.3 (Jakarta EE 8 Full &amp;amp; Web Distribution) – https://wildfly.org/downloads/&lt;br /&gt;
Далее по тексту, под &#039;&#039;&#039;WF_PATH&#039;&#039;&#039; имеется в виду адрес созданной символьной ссылки.&lt;br /&gt;
==Linux==&lt;br /&gt;
При распаковке рекомендуется исключить кириллические символы в пути, а также пробелы.&lt;br /&gt;
* Распаковать Wildfly, например, в /opt/.&lt;br /&gt;
* Создать символьную ссылку /opt/wildfly на распакованную директорию. Пример команды:&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;ln -s /opt/wildfly-26.1.3.Final/ /opt/wildfly&amp;lt;/source&amp;gt;&lt;br /&gt;
==Windows==&lt;br /&gt;
При распаковке рекомендуется исключить кириллические символы в пути, а также пробелы.&lt;br /&gt;
* Распаковать Wildfly, например, в C:\.&lt;br /&gt;
* Создать символьную ссылку, к примеру &#039;&#039;C:\wildfly&#039;&#039;, на распакованную директорию. Пример команды:&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;mklink /D C:\wildfly C:\wildfly-26.1.3.Final\&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Удаление настроек WildFly по-умолчанию==&lt;br /&gt;
Для удаления настроек по-умолчанию, необходимо выполнить пункты описанные по ссылке [[Wildfly#Удаление настроек по умолчанию|Wildfly - Удаление настроек по умолчанию]]&lt;br /&gt;
&lt;br /&gt;
=Настройка подключения к БД PC Server=&lt;br /&gt;
==Добавление JDBC-драйвера СУБД==&lt;br /&gt;
===PostgreSQL===&lt;br /&gt;
* Скачать актуальный JDBC-драйвер по адресу https://jdbc.postgresql.org/&lt;br /&gt;
* Создать директорию &#039;&#039;WF_PATH/modules/org/postgresql/main/&#039;&#039;&lt;br /&gt;
* В директорию &#039;&#039;WF_PATH/modules/org/postgresql/main/&#039;&#039; поместить скачанный postgresql-*.*.*.jar&lt;br /&gt;
* Создать в этой же папке файл &#039;&#039;module.xml&#039;&#039; следующего содержания, указав имя файла драйвера вместо &amp;quot;JAR_PATH&amp;quot;:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;module xmlns=&amp;quot;urn:jboss:module:1.0&amp;quot; name=&amp;quot;org.postgresql&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;resources&amp;gt;&lt;br /&gt;
     &amp;lt;resource-root path=&amp;quot;JAR_PATH&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/resources&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.api&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.transaction.api&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.servlet.api&amp;quot; optional=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Добавить установленный модуль в качестве драйвера для подключения к СУБД в файл &#039;&#039;WF_PATH/standalone/configuration/standalone.xml&#039;&#039;, в секцию &#039;&#039;&amp;lt;datasources/drivers&amp;gt;&#039;&#039;, добавив следующий блок:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;driver name=&amp;quot;pgsql&amp;quot; module=&amp;quot;org.postgresql&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;driver-class&amp;gt;org.postgresql.Driver&amp;lt;/driver-class&amp;gt;&lt;br /&gt;
&amp;lt;/driver&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===MS SQL===&lt;br /&gt;
* Скачать JDBC-драйвер с сайта Microsoft https://docs.microsoft.com/ru-ru/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver15&lt;br /&gt;
* Создать директорию &#039;&#039;WF_PATH/modules/system/layers/base/com/microsoft/sqlserver/main/&#039;&#039;&lt;br /&gt;
* В директорию распаковать файлы и директории драйвера. Файлы драйвера (*.jar) должны располагаться непосредственно в директории &#039;&#039;main/&#039;&#039;&lt;br /&gt;
* Создать в этой же папке файл module.xml следующего содержания, заменив JAR_PATH на имя файла драйвера, например на &#039;&#039;mssql-jdbc-8.2.2.jre8.jar&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;module xmlns=&amp;quot;urn:jboss:module:1.3&amp;quot; name=&amp;quot;com.microsoft.sqlserver&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;resources&amp;gt;&lt;br /&gt;
    &amp;lt;resource-root path=&amp;quot;JAR_PATH&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/resources&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.api&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.transaction.api&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.xml.bind.api&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Добавить установленный модуль в качестве драйвера для подключения к СУБД в файл &#039;&#039;WF_PATH/standalone/configuration/standalone.xml&#039;&#039;, в секцию &#039;&#039;&amp;lt;datasources/drivers&amp;gt;&#039;&#039;, добавив следующий блок:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;driver name=&amp;quot;mssql&amp;quot; module=&amp;quot;com.microsoft.sqlserver&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;driver-class&amp;gt;com.microsoft.sqlserver.jdbc.SQLServerDriver&amp;lt;/driver-class&amp;gt;&lt;br /&gt;
&amp;lt;/driver&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Oracle===&lt;br /&gt;
* Скачать актуальный JDBC-драйвер по адресу https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html&lt;br /&gt;
* Создать директорию &#039;&#039;WF_PATH/modules/org/postgresql/main/&#039;&#039;&lt;br /&gt;
* В директорию &#039;&#039;WF_PATH/modules/system/layers/base/com/oracle/main/&#039;&#039; поместить скачанный ojdbc*.jar.&lt;br /&gt;
* Создать в этой же папке файл &#039;&#039;module.xml&#039;&#039; следующего содержания, указав имя файла драйвера вместо &amp;quot;JAR_PATH&amp;quot;:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;module xmlns=&amp;quot;urn:jboss:module:1.0&amp;quot; name=&amp;quot;com.oracle&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;resources&amp;gt;&lt;br /&gt;
     &amp;lt;resource-root path=&amp;quot;JAR_PATH&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/resources&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.api&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.transaction.api&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Добавить установленный модуль в качестве драйвера для подключения к СУБД в файл &#039;&#039;WF_PATH/standalone/configuration/standalone.xml&#039;&#039;, в секцию &#039;&#039;&amp;lt;datasources/drivers&amp;gt;&#039;&#039;, добавив следующий блок:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;driver name=&amp;quot;oracle&amp;quot; module=&amp;quot;com.oracle&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;driver-class&amp;gt;oracle.jdbc.driver.OracleDriver&amp;lt;/driver-class&amp;gt;&lt;br /&gt;
&amp;lt;/driver&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Особенности маппинга Oracle==&lt;br /&gt;
Для корректной установки PC Server с подключением к БД Oracle требуется создать/изменить некоторые таблицы вручную:&lt;br /&gt;
&lt;br /&gt;
Инструкция:&lt;br /&gt;
* Заменить по содержимому ниже &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TABLESPACE_NAME&amp;gt;&lt;br /&gt;
&amp;lt;USER_NAME&amp;gt;&lt;br /&gt;
&amp;lt;USER_PASS&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Из-под пользователя с правами на создание пользователей и табличных пространств выполнить:&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
---Создание табличного пространства и пользователя---&lt;br /&gt;
CREATE TABLESPACE &amp;lt;TABLESPACE_NAME&amp;gt; DATAFILE &#039;&amp;lt;TABLESPACE_NAME&amp;gt;.DAT&#039; SIZE 50M AUTOEXTEND ON;&lt;br /&gt;
CREATE USER &amp;quot;&amp;lt;USER_NAME&amp;gt;&amp;quot; IDENTIFIED BY &amp;quot;&amp;lt;USER_PASS&amp;gt;&amp;quot; DEFAULT TABLESPACE &amp;lt;TABLESPACE_NAME&amp;gt;;&lt;br /&gt;
GRANT CREATE SESSION TO &amp;quot;&amp;lt;USER_NAME&amp;gt;&amp;quot;;&lt;br /&gt;
GRANT CREATE TABLE TO &amp;quot;&amp;lt;USER_NAME&amp;gt;&amp;quot;;&lt;br /&gt;
GRANT CREATE SEQUENCE TO &amp;quot;&amp;lt;USER_NAME&amp;gt;&amp;quot;;&lt;br /&gt;
GRANT UNLIMITED TABLESPACE TO &amp;quot;&amp;lt;USER_NAME&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Из-под созданного пользователя, под которым будет производиться подключение PC к БД выполнить:&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
---Создание таблиц---&lt;br /&gt;
   CREATE TABLE &amp;quot;PC_SYS_PROPERTY&amp;quot; &lt;br /&gt;
   (&amp;quot;SETTING_ID&amp;quot; NUMBER(19,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;SETTING_NAME&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;SETTING_VALUE&amp;quot; VARCHAR2(255),&lt;br /&gt;
	 PRIMARY KEY (&amp;quot;SETTING_ID&amp;quot;),&lt;br /&gt;
	 CONSTRAINT &amp;quot;UK_BYEQYB1KICGD7SNXKM5L52582&amp;quot; UNIQUE (&amp;quot;SETTING_NAME&amp;quot;));&lt;br /&gt;
 &lt;br /&gt;
	CREATE TABLE &amp;quot;PC_SYSTEM&amp;quot; &lt;br /&gt;
   (	&amp;quot;SYSTEMID&amp;quot; VARCHAR2(36) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;EVENTS_POST_URL&amp;quot; VARCHAR2(1024), &lt;br /&gt;
	&amp;quot;NAME&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;PC_IS_EXTERNAL_URL&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;PC_IS_INTERNAL_URL&amp;quot; VARCHAR2(255), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;SYSTEMID&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
	CREATE TABLE &amp;quot;PC_SYSTEM_PARAMS&amp;quot; &lt;br /&gt;
(	&amp;quot;SYSTEMID&amp;quot; VARCHAR2(36) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;BILLED_DATE_REQUEST&amp;quot; CLOB, &lt;br /&gt;
	&amp;quot;BILLING_PERIOD&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;BILLED_DATE&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;BILLING_TYPE&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;DESCRIPTION&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;FRONT_END_URL&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;LICENSE&amp;quot; VARCHAR2(2048), &lt;br /&gt;
	&amp;quot;ONLINE_CONFIRMATION_URL&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;REGISTER_REQUEST&amp;quot; CLOB, &lt;br /&gt;
	&amp;quot;REPORT_TEMPLATE_PATH&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;USER_KEYS_EXPIRATION_PERIOD&amp;quot; NUMBER(10,0),&lt;br /&gt;
	 PRIMARY KEY (&amp;quot;SYSTEMID&amp;quot;));&lt;br /&gt;
 &lt;br /&gt;
	  CREATE TABLE &amp;quot;PC_USER&amp;quot; &lt;br /&gt;
   (&amp;quot;USERID&amp;quot; VARCHAR2(64) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;BILLED_DATE&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;SYSTEMID&amp;quot; VARCHAR2(36), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;USERID&amp;quot;),&lt;br /&gt;
	 CONSTRAINT &amp;quot;FKGLUVAW7N4TKK6V6XALY8IK3S2&amp;quot; FOREIGN KEY (&amp;quot;SYSTEMID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_SYSTEM&amp;quot; (&amp;quot;SYSTEMID&amp;quot;) ENABLE&lt;br /&gt;
   );&lt;br /&gt;
 &lt;br /&gt;
  CREATE TABLE &amp;quot;PC_TRANSACTION&amp;quot; &lt;br /&gt;
   (	&amp;quot;TRANSACTIONID&amp;quot; VARCHAR2(36) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;CALLBACK_URL&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;IS_CLEANED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;CONFIRM_CODE_LENGTH&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;CONFIRMATION_TYPE&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;DECLINE_REASON&amp;quot; VARCHAR2(64), &lt;br /&gt;
	&amp;quot;DATA_HASH&amp;quot; RAW(255), &lt;br /&gt;
	&amp;quot;NOTIF_ID&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;STATUS&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;TIME_TO_LIVE&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;DATA_BINARY&amp;quot; BLOB, &lt;br /&gt;
	&amp;quot;DATA_TEXT&amp;quot; VARCHAR2(3095), &lt;br /&gt;
	&amp;quot;USERID&amp;quot; VARCHAR2(64), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;TRANSACTIONID&amp;quot;),&lt;br /&gt;
	 CONSTRAINT &amp;quot;FKARQ3VEGMNJXEJK8ONU4HRHEN3&amp;quot; FOREIGN KEY (&amp;quot;USERID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_USER&amp;quot; (&amp;quot;USERID&amp;quot;) ENABLE&lt;br /&gt;
	 );&lt;br /&gt;
 &lt;br /&gt;
	CREATE TABLE &amp;quot;PC_CONFIRM_ATTEMPT&amp;quot; &lt;br /&gt;
   (	&amp;quot;CONFIRM_ATTEMPT_ID&amp;quot; NUMBER(19,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;CONFIRM_CODE&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;CONFIRM_RESULT&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;DATA_HASH&amp;quot; RAW(255), &lt;br /&gt;
	&amp;quot;SIGNATURE&amp;quot; VARCHAR2(512), &lt;br /&gt;
	&amp;quot;TRANSACTIONID&amp;quot; VARCHAR2(36), &lt;br /&gt;
	&amp;quot;USERID&amp;quot; VARCHAR2(64), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;CONFIRM_ATTEMPT_ID&amp;quot;), &lt;br /&gt;
	 CONSTRAINT &amp;quot;FK5258W9Y6WQ4FY55U41WB30OWG&amp;quot; FOREIGN KEY (&amp;quot;TRANSACTIONID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_TRANSACTION&amp;quot; (&amp;quot;TRANSACTIONID&amp;quot;) ENABLE, &lt;br /&gt;
	 CONSTRAINT &amp;quot;FKHEJP6UYKY6U4X8QFDPV4VA63Y&amp;quot; FOREIGN KEY (&amp;quot;USERID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_USER&amp;quot; (&amp;quot;USERID&amp;quot;) ENABLE&lt;br /&gt;
   );&lt;br /&gt;
 &lt;br /&gt;
	CREATE TABLE &amp;quot;PC_DELAYEDKEYINFO&amp;quot; &lt;br /&gt;
   (	&amp;quot;TYPE&amp;quot; NUMBER(10,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;DELAYEDKEYID&amp;quot; NUMBER(19,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;KEY_CONTAINER_ID&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;KEY_CONTENT&amp;quot; RAW(255), &lt;br /&gt;
	&amp;quot;EXPIRATION_DATE&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;USER_KEY_VERSION&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;USERID&amp;quot; VARCHAR2(64), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;DELAYEDKEYID&amp;quot;), &lt;br /&gt;
	 CONSTRAINT &amp;quot;FK73X95ORVBL8BA0T3A3WEWADRF&amp;quot; FOREIGN KEY (&amp;quot;USERID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_USER&amp;quot; (&amp;quot;USERID&amp;quot;) ENABLE&lt;br /&gt;
   );&lt;br /&gt;
 &lt;br /&gt;
CREATE TABLE &amp;quot;PC_DEVICE&amp;quot; &lt;br /&gt;
   (	&amp;quot;TYPE&amp;quot; NUMBER(10,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;DEVICEID&amp;quot; NUMBER(19,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;DEVICE_PUSH_ID&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;USERID&amp;quot; VARCHAR2(64), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;DEVICEID&amp;quot;), &lt;br /&gt;
	 CONSTRAINT &amp;quot;FK8CMG562COTMP53MVGRDDF1EYA&amp;quot; FOREIGN KEY (&amp;quot;USERID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_USER&amp;quot; (&amp;quot;USERID&amp;quot;) ENABLE&lt;br /&gt;
   );&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    CREATE TABLE &amp;quot;PC_KEYINFO&amp;quot; &lt;br /&gt;
   (	&amp;quot;TYPE&amp;quot; NUMBER(10,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;KEYID&amp;quot; NUMBER(19,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;KEY_CONTAINER_ID&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;KEY_CONTENT&amp;quot; RAW(255), &lt;br /&gt;
	&amp;quot;EXPIRATION_DATE&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;DEVICE_FINGERPRINT&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;USER_KEY_VERSION&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;USERID&amp;quot; VARCHAR2(64), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;KEYID&amp;quot;), &lt;br /&gt;
	 CONSTRAINT &amp;quot;FKN3VEB4OTVNAIE35AWBD0HDS90&amp;quot; FOREIGN KEY (&amp;quot;USERID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_USER&amp;quot; (&amp;quot;USERID&amp;quot;) ENABLE&lt;br /&gt;
   );&lt;br /&gt;
 &lt;br /&gt;
  CREATE TABLE &amp;quot;PC_PUBLICKEY&amp;quot; &lt;br /&gt;
   (	&amp;quot;PUBLICKEYID&amp;quot; NUMBER(19,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;PUBLIC_KEY&amp;quot; RAW(512), &lt;br /&gt;
	&amp;quot;KEYID&amp;quot; NUMBER(19,0), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;PUBLICKEYID&amp;quot;), &lt;br /&gt;
	 CONSTRAINT &amp;quot;FKEMTGHSA74S1WI903R2TN7T3N&amp;quot; FOREIGN KEY (&amp;quot;KEYID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_KEYINFO&amp;quot; (&amp;quot;KEYID&amp;quot;) ENABLE&lt;br /&gt;
   );&lt;br /&gt;
&lt;br /&gt;
  CREATE TABLE &amp;quot;PC_EVENT&amp;quot; &lt;br /&gt;
   (	&amp;quot;EVENTID&amp;quot; NUMBER(19,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;AUTH_CODE&amp;quot; VARCHAR2(64), &lt;br /&gt;
	&amp;quot;DEVICE_EVENTID&amp;quot; VARCHAR2(36), &lt;br /&gt;
	&amp;quot;DEVICE_INFO&amp;quot; CLOB, &lt;br /&gt;
	&amp;quot;DEVICE_TIME&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;EVENTPOSTURL&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;REQUEST_HMAC&amp;quot; VARCHAR2(64), &lt;br /&gt;
	&amp;quot;REQUEST_HASH&amp;quot; VARCHAR2(64), &lt;br /&gt;
	&amp;quot;REQUEST_RESULT&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;REQUEST_TYPE&amp;quot; VARCHAR2(36), &lt;br /&gt;
	&amp;quot;REQUESTER_IP&amp;quot; VARCHAR2(15), &lt;br /&gt;
	&amp;quot;SESSIONID&amp;quot; VARCHAR2(36), &lt;br /&gt;
	&amp;quot;TRANSACTIONID&amp;quot; VARCHAR2(36), &lt;br /&gt;
	&amp;quot;USERID&amp;quot; VARCHAR2(64), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;EVENTID&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
---Создание индексов&lt;br /&gt;
CREATE INDEX pc_keyinfo1_idx ON PC_KEYINFO (userID, expiration_date, is_deleted);&lt;br /&gt;
CREATE INDEX pc_delayedkeyinfo1_idx ON PC_DELAYEDKEYINFO (userID, is_deleted);&lt;br /&gt;
CREATE INDEX pc_device1_idx ON PC_DEVICE (userID, is_deleted); &lt;br /&gt;
CREATE INDEX pc_transaction1_idx ON PC_TRANSACTION (userID, status);&lt;br /&gt;
CREATE INDEX pc_device2_idx ON PC_DEVICE (userID); &lt;br /&gt;
CREATE INDEX pc_keyinfo2_idx ON PC_KEYINFO (userID); &lt;br /&gt;
CREATE INDEX pc_transaction2_idx ON PC_TRANSACTION (userID); &lt;br /&gt;
CREATE INDEX pc_user1_idx ON PC_USER (systemID);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
---Создание очередей---&lt;br /&gt;
create sequence PC_ATTEMPT_SEQ start with 1 increment by 1;&lt;br /&gt;
create sequence PC_DELAYEDKEYINFO_SEQ start with 1 increment by 1;&lt;br /&gt;
create sequence PC_DEVICE_SEQ start with 1 increment by 1;&lt;br /&gt;
create sequence PC_KEYINFO_SEQ start with 1 increment by 1;&lt;br /&gt;
create sequence PC_PUBLICKEY_SEQ start with 1 increment by 1;&lt;br /&gt;
create sequence PC_SETTING_SEQ start with 1 increment by 1;&lt;br /&gt;
create sequence PC_EVENT_SEQ start with 1 increment by 1;&lt;br /&gt;
create sequence PC_PUSH_SEQ start with 1 increment by 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Добавление источников данных для PC Server==&lt;br /&gt;
[[PC_Pusher_5.2|&#039;&#039;&#039;При установке PC Pusher версии 5.2 и выше, подключение к БД PC Pusher не требуется&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
===PostgreSQL===&lt;br /&gt;
====PC Server====&lt;br /&gt;
В файл &#039;&#039;WF_PATH/standalone/configuration/standalone.xml&#039;&#039; внести следующие изменения добавить новый источник данных в секцию &#039;&#039;&amp;lt;datasources&amp;gt;&amp;lt;/datasources&amp;gt;&#039;&#039; заменив pcs-db-host, port, pcs-db, pcs-user, pcs-pass:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;datasource jta=&amp;quot;true&amp;quot; jndi-name=&amp;quot;java:jboss/datasources/PayControlDS&amp;quot; pool-name=&amp;quot;PayControlDS&amp;quot; enabled=&amp;quot;true&amp;quot; use-ccm=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;connection-url&amp;gt;jdbc:postgresql://pcs-db-host:port/pcs-db&amp;lt;/connection-url&amp;gt;&lt;br /&gt;
    &amp;lt;driver-class&amp;gt;org.postgresql.Driver&amp;lt;/driver-class&amp;gt;&lt;br /&gt;
    &amp;lt;driver&amp;gt;pgsql&amp;lt;/driver&amp;gt;&lt;br /&gt;
    &amp;lt;security&amp;gt;&lt;br /&gt;
        &amp;lt;user-name&amp;gt;pcs-user&amp;lt;/user-name&amp;gt;&lt;br /&gt;
        &amp;lt;password&amp;gt;pcs-pass&amp;lt;/password&amp;gt;&lt;br /&gt;
    &amp;lt;/security&amp;gt;&lt;br /&gt;
    &amp;lt;validation&amp;gt;&lt;br /&gt;
        &amp;lt;valid-connection-checker class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;background-validation&amp;gt;true&amp;lt;/background-validation&amp;gt;&lt;br /&gt;
        &amp;lt;exception-sorter class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/validation&amp;gt;&lt;br /&gt;
&amp;lt;/datasource&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===MS SQL===&lt;br /&gt;
====PC Server====&lt;br /&gt;
В файл &#039;&#039;WF_PATH/standalone/configuration/standalone.xml&#039;&#039; внести следующие изменения добавить новый источник данных в секцию &#039;&#039;&amp;lt;datasources&amp;gt;&amp;lt;/datasources&amp;gt;&#039;&#039; заменив pcs-db-host, port, pcs-db-host, pcs-db, pcs-user, pcs-pass:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;datasource jta=&amp;quot;true&amp;quot; jndi-name=&amp;quot;java:jboss/datasources/PayControlDS&amp;quot; pool-name=&amp;quot;PayControlDS&amp;quot; enabled=&amp;quot;true&amp;quot; use-ccm=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;connection-url&amp;gt;jdbc:sqlserver://pcs-db-host:port;databaseName=pcs-db&amp;lt;/connection-url&amp;gt;&lt;br /&gt;
	&amp;lt;driver&amp;gt;mssql&amp;lt;/driver&amp;gt;&lt;br /&gt;
	&amp;lt;security&amp;gt;&lt;br /&gt;
		&amp;lt;user-name&amp;gt;pcs-user&amp;lt;/user-name&amp;gt;&lt;br /&gt;
		&amp;lt;password&amp;gt;pcs-pass&amp;lt;/password&amp;gt;&lt;br /&gt;
	&amp;lt;/security&amp;gt;&lt;br /&gt;
	&amp;lt;pool&amp;gt;&lt;br /&gt;
		&amp;lt;min-pool-size&amp;gt;5&amp;lt;/min-pool-size&amp;gt;&lt;br /&gt;
		&amp;lt;max-pool-size&amp;gt;50&amp;lt;/max-pool-size&amp;gt;&lt;br /&gt;
		&amp;lt;prefill&amp;gt;false&amp;lt;/prefill&amp;gt;&lt;br /&gt;
		&amp;lt;use-strict-min&amp;gt;false&amp;lt;/use-strict-min&amp;gt;&lt;br /&gt;
		&amp;lt;flush-strategy&amp;gt;FailingConnectionOnly&amp;lt;/flush-strategy&amp;gt;&lt;br /&gt;
	&amp;lt;/pool&amp;gt;&lt;br /&gt;
	&amp;lt;validation&amp;gt;&lt;br /&gt;
		&amp;lt;valid-connection-checker class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker&amp;quot;&amp;gt;&amp;lt;/valid-connection-checker&amp;gt;&lt;br /&gt;
	&amp;lt;/validation&amp;gt;&lt;br /&gt;
&amp;lt;/datasource&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Oracle===&lt;br /&gt;
====PC Server====&lt;br /&gt;
В файл &#039;&#039;WF_PATH/standalone/configuration/standalone.xml&#039;&#039; внести следующие изменения добавить новый источник данных в секцию &#039;&#039;&amp;lt;datasources&amp;gt;&amp;lt;/datasources&amp;gt;&#039;&#039; заменив pcs-db-host, port, pcs-db, pcs-user, pcs-pass:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;datasource jta=&amp;quot;true&amp;quot; jndi-name=&amp;quot;java:jboss/datasources/PayControlDS&amp;quot; pool-name=&amp;quot;PayControlDS&amp;quot; enabled=&amp;quot;true&amp;quot; use-ccm=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;connection-url&amp;gt;jdbc:oracle:thin:@pcs-db-host:port:sid&amp;lt;/connection-url&amp;gt;&lt;br /&gt;
    &amp;lt;driver-class&amp;gt;org.postgresql.Driver&amp;lt;/driver-class&amp;gt;&lt;br /&gt;
    &amp;lt;driver&amp;gt;oracle&amp;lt;/driver&amp;gt;&lt;br /&gt;
    &amp;lt;security&amp;gt;&lt;br /&gt;
        &amp;lt;user-name&amp;gt;pcs-user&amp;lt;/user-name&amp;gt;&lt;br /&gt;
        &amp;lt;password&amp;gt;pcs-pass&amp;lt;/password&amp;gt;&lt;br /&gt;
    &amp;lt;/security&amp;gt;&lt;br /&gt;
    &amp;lt;pool&amp;gt;&lt;br /&gt;
        &amp;lt;min-pool-size&amp;gt;1&amp;lt;/min-pool-size&amp;gt;&lt;br /&gt;
        &amp;lt;max-pool-size&amp;gt;5&amp;lt;/max-pool-size&amp;gt;&lt;br /&gt;
        &amp;lt;prefill&amp;gt;true&amp;lt;/prefill&amp;gt;&lt;br /&gt;
    &amp;lt;/pool&amp;gt;&lt;br /&gt;
    &amp;lt;validation&amp;gt;&lt;br /&gt;
        &amp;lt;check-valid-connection-sql&amp;gt;select 1 from dual&amp;lt;/check-valid-connection-sql&amp;gt;&lt;br /&gt;
        &amp;lt;validate-on-match&amp;gt;false&amp;lt;/validate-on-match&amp;gt;&lt;br /&gt;
        &amp;lt;background-validation&amp;gt;true&amp;lt;/background-validation&amp;gt;&lt;br /&gt;
        &amp;lt;background-validation-millis&amp;gt;10000&amp;lt;/background-validation-millis&amp;gt;&lt;br /&gt;
    &amp;lt;/validation&amp;gt;&lt;br /&gt;
&amp;lt;/datasource&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Настройка подключения PCIS External к PC Server=&lt;br /&gt;
На сервере PCIS External необходимо установить адрес сервера PC Server (host и port заменить на реальные значения). Для этого:&lt;br /&gt;
* на Linux в файл &#039;&#039;WF_PATH/bin/standalone.conf&#039;&#039; нужно добавить &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;JAVA_OPTS=&amp;quot;$JAVA_OPTS -Dpcservice.endpoint=http://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/ws/PayControlServiceV3?wsdl -Duser.language=ru -Dpaycontrol.locale=ru&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* на Windows в файл &#039;&#039;WF_PATH/bin/standalone.conf.bat&#039;&#039; нужно добавить &amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;set &amp;quot;JAVA_OPTS=%JAVA_OPTS% -Dpcservice.endpoint=http://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/ws/PayControlServiceV3?wsdl -Duser.language=ru -Dpaycontrol.locale=ru&amp;quot;&amp;lt;/syntaxhighlight&amp;gt; выше метки :JAVA_OPTS_SET&lt;br /&gt;
&lt;br /&gt;
=Настройка выделения памяти серверу=&lt;br /&gt;
На всех серверах установить максимальный объем доступной для использования памяти:&lt;br /&gt;
* на Linux в &#039;&#039;WF_PATH/bin/standalone.conf&#039;&#039; указать объём «ОбщийОбъёмОЗУ - 512MB»&lt;br /&gt;
* на Windows в &#039;&#039;WF_PATH\bin\standalone.conf.bat&#039;&#039; указать объём «ОбщийОбъёмОЗУ - 1536MB»&lt;br /&gt;
Для этого в строке&lt;br /&gt;
&#039;&#039;JAVA_OPTS=&amp;quot;-Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true&amp;quot;&#039;&#039; поменять значение параметра &#039;&#039;Xmx&#039;&#039; на выделяемый объём.&lt;br /&gt;
==Запуск проекта==&lt;br /&gt;
* Загрузить файлы модулей требуемых компонентов последних версий из репозитория по адресу https://repo.paycontrol.org/server/maven/tech/paycon/server/ (при этом модуль PCPusher необходимо взять из ветки 5.x):&lt;br /&gt;
** PC Server — https://repo.paycontrol.org/server/maven/tech/paycon/server/PayControl-services-module/, файл &#039;&#039;PayControl-services-module-&amp;lt;VERSION&amp;gt;.ear&#039;&#039;&lt;br /&gt;
** PC Pusher — https://repo.paycontrol.org/server/maven/tech/paycon/server/pc-pusher/, файл &#039;&#039;pc-pusher-&amp;lt;VERSION&amp;gt;.war&#039;&#039;&lt;br /&gt;
** PCIS External — https://repo.paycontrol.org/server/maven/tech/paycon/server/PayControl-interaction-rest/, файл &#039;&#039;PayControl-interaction-rest-&amp;lt;VERSION&amp;gt;.war&#039;&#039;&lt;br /&gt;
* Скопировать файл приложения сервера &#039;&#039;WF_PATH\standalone\deployments\&#039;&#039;. Один сервер WildFly может запускать одно или несколько приложений сервера.&lt;br /&gt;
* Запустить&lt;br /&gt;
** Linux &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;WF_PATH/bin/standalone.sh -b 0.0.0.0&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** Windows &amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;WF_PATH\bin\standalone.bat -b 0.0.0.0&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*:  где -b 0.0.0.0 - позволяет подключаться к серверу используя любой его интерфейс (опция bind)&lt;br /&gt;
* Дождаться старта WF, проверить, что нет ошибок запуска.&lt;br /&gt;
&lt;br /&gt;
==Настройка автозапуска службы сервера==&lt;br /&gt;
===Linux===&lt;br /&gt;
Для настройки автозапуска службы, перейти в каталог WF_PATH/docs/contrib/scripts/systemd/ и выполнить шаги, описанные в файле README в этом каталоге, за исключением пунктов распаковки и создания символьной ссылки на каталог.&lt;br /&gt;
Пункт &amp;lt;code&amp;gt;chown -R wildfly:wildfly /opt/wildfly&amp;lt;/code&amp;gt; необходимо выполнить с параметрами «-RH» (параметр «H» указывает, что если на вход подана символьная ссылка, то нужно пойти вглубь каталога, на который она ссылается). Таким образом команда должна выглядеть следующим образом:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;chown -RHv wildfly:wildfly /opt/wildfly&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Чтобы исключить возможность отклонения запросов при запуске в качестве службы, необходимо установить параметры JAVA_OPTS в файле standalone.conf:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;JAVA_OPTS=&amp;quot;$JAVA_OPTS -Djboss.bind.address=0.0.0.0&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Windows===&lt;br /&gt;
Скопировать папку&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;WF_PATH\docs\contrib\scripts\service\&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
в папку&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;WF_PATH\bin\&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выполнить&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;WF_PATH\bin\service\service.bat install /startup&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Чтобы исключить возможность отклонения запросов при запуске в качестве службы, необходимо установить параметры JAVA_OPTS в файле standalone.conf.bat выше метки :JAVA_OPTS_SET.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;set &amp;quot;JAVA_OPTS=%JAVA_OPTS% -Djboss.bind.address=0.0.0.0&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После создания службы, вы можете создать отдельного пользователя, например &amp;quot;wildfly&amp;quot;, с правами группы &amp;quot;Пользователи&amp;quot;, сделать его владельцем папки, где находятся файлы Wildfly, с полным доступом и в &amp;quot;Службах&amp;quot; Windows настроить запуск службы Wildfly от этого пользователя.&lt;br /&gt;
&lt;br /&gt;
==URL-фильтрация при совмещении PC Pusher и PCIS External==&lt;br /&gt;
При совмещении ролей PC Pusher и PCIS External на одном сервере необходимо исключить возможность выполнения запросов PC Pusher со стороны сети интернет. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо со стороны сети интернет разрешить подключения только на конечную точку PCIS External. &amp;lt;br&amp;gt;&lt;br /&gt;
Конечная точка PCIS External - &#039;&#039;&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/PayControl-interaction-rest/*&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Доступ к другим конечным точкам должен быть запрещен.&lt;br /&gt;
&lt;br /&gt;
При этом доступ к PC Pusher со стороны PC Server должен сохраниться. &amp;lt;br&amp;gt;&lt;br /&gt;
Конечная точка PC Pusher - &#039;&#039;&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/pc-pusher-api/*&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Внесение изменений в БД=&lt;br /&gt;
==Создание индексов БД PC Server==&lt;br /&gt;
После первого запуска приложения, в базе данных будут созданы необходимые таблицы.&lt;br /&gt;
&lt;br /&gt;
На продуктивной среде после этого необходимо создать индексы в базе данных(&#039;&#039;&#039;за исключением Oracle&#039;&#039;&#039;) PC Server.&lt;br /&gt;
&lt;br /&gt;
Для этого выполните SQL скрипт:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
create index pc_keyinfo1_idx on PC_KEYINFO (userID, expiration_date, is_deleted);&lt;br /&gt;
create index pc_delayedkeyinfo1_idx on PC_DELAYEDKEYINFO (userID, is_deleted);&lt;br /&gt;
create index pc_device1_idx on PC_DEVICE (userID, is_deleted); &lt;br /&gt;
create index pc_transaction1_idx on PC_TRANSACTION (userID, status);&lt;br /&gt;
create index pc_device2_idx on PC_DEVICE (userID); &lt;br /&gt;
create index pc_keyinfo2_idx on PC_KEYINFO (userID); &lt;br /&gt;
create index pc_transaction2_idx on PC_TRANSACTION (userID); &lt;br /&gt;
create index pc_user1_idx on PC_USER (systemID);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Корректировка типов данных для MS SQL==&lt;br /&gt;
Java-приложение при создании таблиц БД неоптимально устанавливает тип для одного из полей для СУБД MS SQL.&lt;br /&gt;
&lt;br /&gt;
Для его корректировки после того, как таблицы созданы, выполните запрос&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
ALTER TABLE PC_TRANSACTION ALTER COLUMN DATA_BINARY image;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Регистрация системы==&lt;br /&gt;
После успешного запуска приложения PC Server до начала работы необходимо зарегистрировать прикладную систему.&lt;br /&gt;
&lt;br /&gt;
Это действие выполняется путем отправки на PC Server HTTP POST запроса, сформированного ST/Airome. Содержание запроса предоставляется дополнительно.&lt;br /&gt;
&lt;br /&gt;
Для отправки запроса можно использовать любое средство отправки HTTP-запросов.&lt;br /&gt;
===Примеры===&lt;br /&gt;
&lt;br /&gt;
====Curl====&lt;br /&gt;
cURL (в ОС Linux доступна в репозиториях, для ОС Windows можно скачать с сайта разработчика https://curl.haxx.se/download.html):&lt;br /&gt;
* 1. Скопировать файл RegisterSystemRequest.xml (если название файла с запросом на регистрацию отличается, то необходимо либо переименовать его, либо изменить имя этого файла в параметрах команды curl) на сервер в любую директорию на машину, с которой будет производиться запуск команды curl.&lt;br /&gt;
* 2. Проверить содержимое файла. Если файл выглядит как&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;soapenv:Envelope xmlns:soapenv=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:pay=&amp;quot;http://ws.safetech.ru/PayControlV3/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;soapenv:Header/&amp;gt;&lt;br /&gt;
   &amp;lt;soapenv:Body&amp;gt;&lt;br /&gt;
      &amp;lt;pay:registerSystemRequest&amp;gt;&lt;br /&gt;
         &amp;lt;request&amp;gt;PD94bWwgdmVyc2lvbj0iMJlIHhtbG5zPSJodHRwOi8vd3Muc2FmZXRlY2gucS4w... ...ZXF1JlIHhtbG5zPSJodHRwOi8vd3Muc2FmZXRlY2gucnUZ==&amp;lt;/request&amp;gt;&lt;br /&gt;
      &amp;lt;/pay:registerSystemRequest&amp;gt;&lt;br /&gt;
   &amp;lt;/soapenv:Body&amp;gt;&lt;br /&gt;
&amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
то, перейти к п.4.&lt;br /&gt;
* 3. Если файл выглядит как&lt;br /&gt;
&amp;lt;code&amp;gt;PD94bWwgdmVyc2lvbj0iMJlIHhtbG5zPSJodHRwOi8vd3Muc2FmZXRlY2gucS4w... ...ZXF1JlIHhtbG5zPSJodHRwOi8vd3Muc2FmZXRlY2gucnUZ==&amp;lt;/code&amp;gt;&lt;br /&gt;
то необходимо добавить в его начало&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;soapenv:Envelope xmlns:soapenv=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:pay=&amp;quot;http://ws.safetech.ru/PayControlV3/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;soapenv:Header/&amp;gt;&lt;br /&gt;
   &amp;lt;soapenv:Body&amp;gt;&lt;br /&gt;
      &amp;lt;pay:registerSystemRequest&amp;gt;&lt;br /&gt;
         &amp;lt;request&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
и в его конец&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/request&amp;gt;&lt;br /&gt;
      &amp;lt;/pay:registerSystemRequest&amp;gt;&lt;br /&gt;
   &amp;lt;/soapenv:Body&amp;gt;&lt;br /&gt;
&amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
чтобы он принял вид, как представлено в п.2.&lt;br /&gt;
* 4. Выполнить команду (в той-же директории, где располагается скопированный/изменённый файл), заменив &amp;lt;PCServer_IP/localhost&amp;gt; на DNS-имя сервера или его IP-адрес:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl --header &amp;quot;Content-Type: text/xml;charset=UTF-8&amp;quot; --header &amp;quot;SOAPAction: registerSystem&amp;quot; --data @RegisterSystemRequest.xml  &amp;lt;PCServer_IP/localhost&amp;gt;:8080/ws/PayControlServiceV3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Если в составе ответа пришла строка &amp;lt;systemId&amp;gt;SYSTEMID ВАШЕЙ ПРИКЛАДНОЙ СИСТЕМЫ&amp;lt;/systemId&amp;gt;, значит прикладная система зарегистрирована. &lt;br /&gt;
* Если в составе ответа было &amp;lt;soap:Fault&amp;gt;, значит возникла проблема на этапе регистрации.&lt;br /&gt;
* После успешной регистрации прикладной системы на сервере, файл registerSystem.xml больше не нужен.&lt;br /&gt;
&lt;br /&gt;
====SOAP UI====&lt;br /&gt;
* 1. Добавить подключение к серверу PCS, указав адрес WSDL схемы:&lt;br /&gt;
[[Файл:Soap add conn.jpg]]&lt;br /&gt;
* 2. Создать новый запрос из категории registerSystem&lt;br /&gt;
[[Файл:Soap register system.jpg]]&lt;br /&gt;
* 3. Выполнить запрос&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Если в составе ответа пришла строка &amp;lt;systemId&amp;gt;SYSTEMID ВАШЕЙ ПРИКЛАДНОЙ СИСТЕМЫ&amp;lt;/systemId&amp;gt;, значит прикладная система зарегистрирована. &lt;br /&gt;
* Если в составе ответа было &amp;lt;soap:Fault&amp;gt;, значит возникла проблема на этапе регистрации.&lt;br /&gt;
&lt;br /&gt;
==Доступ к сервисам==&lt;br /&gt;
Сервис PC Server доступен по ссылкам (при запросе на эти 2 адреса ниже, должна возвратиться WSDL-схема):&lt;br /&gt;
* http://&amp;lt;IP или имя сервера с WF &amp;gt;:8080/ws/PayControlServiceV3?wsdl&lt;br /&gt;
* http://&amp;lt;IP или имя сервера с WF &amp;gt;:8080/ws/PayControlReportService?wsdl&lt;br /&gt;
&lt;br /&gt;
Адрес конечной точки PC Pusher по умолчанию:&lt;br /&gt;
* http://&amp;lt;IP или имя сервера с WF &amp;gt;:8080/pc-pusher-api/&lt;br /&gt;
Адрес PC Pusher health check:&lt;br /&gt;
* http://&amp;lt;IP или имя сервера с WF &amp;gt;:8080/pc-pusher-api/health_check&lt;br /&gt;
&lt;br /&gt;
PCIS External (при запросе на этот адрес должно возвратиться «Not Found». Также необходимо обратить внимание, на то, какой протокол разрешён – HTTP или HTTPS):&lt;br /&gt;
* http://&amp;lt;IP или имя сервера с WF &amp;gt;:8080/PayControl-interaction-rest/&lt;br /&gt;
=Настройка PC Pusher для отправки пушей в другое приложение (при необходимости)=&lt;br /&gt;
Необходимо выполнить пункты описанные по ссылке [[Обновление_с_3.6_до_3.8#Настройка PC Pusher|&amp;quot;Настройка PCS и PC Pusher&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
=Корректировка (смена) адресов серверов PayControl (при необходимости)=&lt;br /&gt;
{{Предупреждение|Не рекомендуется дополнительно указывать номер порта, в случаях, если для HTTP используется порт 80, или для HTTPS используется порт 443}}&lt;br /&gt;
==Учёт изменения адреса сервера PCS==&lt;br /&gt;
&lt;br /&gt;
Для учёта изменения адреса сервера PCS необходимо произвести изменения в настройках PCIS External. В строке, нужно указать правильный адрес и при необходимости порт сервера PCS, а также уточнить протокол подключения (HTTP/HTTPS):&lt;br /&gt;
* на Linux в файле &amp;lt;code&amp;gt;/opt/wildfly/bin/standalone.conf&amp;lt;/code&amp;gt;: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
JAVA_OPTS=&amp;quot;$JAVA_OPTS -Dpcservice.endpoint=http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/ws/PayControlServiceV3?wsdl -Duser.language=ru -Dpaycontrol.locale=ru&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Windows, в файле &amp;lt;code&amp;gt;WF_PATH/bin/standalone.conf.bat&amp;lt;/code&amp;gt;: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
set &amp;quot;JAVA_OPTS=%JAVA_OPTS% -Dpcservice.endpoint=http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/ws/PayControlServiceV3?wsdl -Duser.language=ru -Dpaycontrol.locale=ru&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После корректировки адреса необходимо перезапустить службу WildFly для вступления изменений в силу.&lt;br /&gt;
&lt;br /&gt;
==Учёт изменения адреса сервера PC Pusher==&lt;br /&gt;
Для учёта изменения адреса сервера PC Pusher, необходимо, предварительно указав корректные данные (протокол (HTTP/HTTPS), имя или IP сервера, порт, идентификатор системы), выполнить запрос к БД PCS: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_internal_url = &#039;http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/pc-pusher-api/&#039; where systemid=&#039;&amp;lt;SYSTEMID&amp;gt;&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Учёт изменения внешнего адреса сервера PCIS External==&lt;br /&gt;
{{Предупреждение|Если система была переведена в промышленную эксплуатацию, при смене адреса для доступа мобильных устройств, не рекомендуется выводить из действия предыдущий адрес на протяжении всего срока действия выпущенных ключей пользователя. Иначе мобильное приложение потеряет доступ к серверу PayControl и для восстановления будет необходимо перевыпустить ключ и заново добавить его в приложение пользователя.}}&lt;br /&gt;
Для учёта изменения внешнего адреса сервера PayControl, по которому связываются мобильное приложение с сервером PayControl, необходимо, предварительно указав корректные данные (протокол (HTTP/HTTPS), имя или IP сервера, порт, идентификатор системы), выполнить запрос к БД PCS:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_external_url = &#039;http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/PayControl-interaction-rest/&#039; where systemid=&#039;&amp;lt;SYSTEMID&amp;gt;&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_PayControl_v3.9_%D0%B2%D1%80%D1%83%D1%87%D0%BD%D1%83%D1%8E&amp;diff=794</id>
		<title>Установка компонентов сервера PayControl v3.9 вручную</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_PayControl_v3.9_%D0%B2%D1%80%D1%83%D1%87%D0%BD%D1%83%D1%8E&amp;diff=794"/>
		<updated>2023-08-16T11:23:43Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: /* Учёт изменения адреса сервера PCS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Подготовка БД=&lt;br /&gt;
* Создать базу данных и пользователя на сервере СУБД, где будет работать база данных PC Server (pcs-user, pcs-pass, pcs-db, pcs-db-host). Предоставить права на доступ пользователю к БД.&lt;br /&gt;
&lt;br /&gt;
=Установка Java=&lt;br /&gt;
Установить последнюю версию JDK 11.&lt;br /&gt;
&lt;br /&gt;
=Установка Wildfly=&lt;br /&gt;
* Скачать WildFly Server 26.1.3 (Jakarta EE 8 Full &amp;amp; Web Distribution) – https://wildfly.org/downloads/&lt;br /&gt;
Далее по тексту, под &#039;&#039;&#039;WF_PATH&#039;&#039;&#039; имеется в виду адрес созданной символьной ссылки.&lt;br /&gt;
==Linux==&lt;br /&gt;
При распаковке рекомендуется исключить кириллические символы в пути, а также пробелы.&lt;br /&gt;
* Распаковать Wildfly, например, в /opt/.&lt;br /&gt;
* Создать символьную ссылку /opt/wildfly на распакованную директорию. Пример команды:&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;ln -s /opt/wildfly-26.1.3.Final/ /opt/wildfly&amp;lt;/source&amp;gt;&lt;br /&gt;
==Windows==&lt;br /&gt;
При распаковке рекомендуется исключить кириллические символы в пути, а также пробелы.&lt;br /&gt;
* Распаковать Wildfly, например, в C:\.&lt;br /&gt;
* Создать символьную ссылку, к примеру &#039;&#039;C:\wildfly&#039;&#039;, на распакованную директорию. Пример команды:&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;mklink /D C:\wildfly C:\wildfly-26.1.3.Final\&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Удаление настроек WildFly по-умолчанию==&lt;br /&gt;
Для удаления настроек по-умолчанию, необходимо выполнить пункты описанные по ссылке [[Wildfly#Удаление настроек по умолчанию|Wildfly - Удаление настроек по умолчанию]]&lt;br /&gt;
&lt;br /&gt;
=Настройка подключения к БД PC Server=&lt;br /&gt;
==Добавление JDBC-драйвера СУБД==&lt;br /&gt;
===PostgreSQL===&lt;br /&gt;
* Скачать актуальный JDBC-драйвер по адресу https://jdbc.postgresql.org/&lt;br /&gt;
* Создать директорию &#039;&#039;WF_PATH/modules/org/postgresql/main/&#039;&#039;&lt;br /&gt;
* В директорию &#039;&#039;WF_PATH/modules/org/postgresql/main/&#039;&#039; поместить скачанный postgresql-*.*.*.jar&lt;br /&gt;
* Создать в этой же папке файл &#039;&#039;module.xml&#039;&#039; следующего содержания, указав имя файла драйвера вместо &amp;quot;JAR_PATH&amp;quot;:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;module xmlns=&amp;quot;urn:jboss:module:1.0&amp;quot; name=&amp;quot;org.postgresql&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;resources&amp;gt;&lt;br /&gt;
     &amp;lt;resource-root path=&amp;quot;JAR_PATH&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/resources&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.api&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.transaction.api&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.servlet.api&amp;quot; optional=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Добавить установленный модуль в качестве драйвера для подключения к СУБД в файл &#039;&#039;WF_PATH/standalone/configuration/standalone.xml&#039;&#039;, в секцию &#039;&#039;&amp;lt;datasources/drivers&amp;gt;&#039;&#039;, добавив следующий блок:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;driver name=&amp;quot;pgsql&amp;quot; module=&amp;quot;org.postgresql&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;driver-class&amp;gt;org.postgresql.Driver&amp;lt;/driver-class&amp;gt;&lt;br /&gt;
&amp;lt;/driver&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===MS SQL===&lt;br /&gt;
* Скачать JDBC-драйвер с сайта Microsoft https://docs.microsoft.com/ru-ru/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver15&lt;br /&gt;
* Создать директорию &#039;&#039;WF_PATH/modules/system/layers/base/com/microsoft/sqlserver/main/&#039;&#039;&lt;br /&gt;
* В директорию распаковать файлы и директории драйвера. Файлы драйвера (*.jar) должны располагаться непосредственно в директории &#039;&#039;main/&#039;&#039;&lt;br /&gt;
* Создать в этой же папке файл module.xml следующего содержания, заменив JAR_PATH на имя файла драйвера, например на &#039;&#039;mssql-jdbc-8.2.2.jre8.jar&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;module xmlns=&amp;quot;urn:jboss:module:1.3&amp;quot; name=&amp;quot;com.microsoft.sqlserver&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;resources&amp;gt;&lt;br /&gt;
    &amp;lt;resource-root path=&amp;quot;JAR_PATH&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/resources&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.api&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.transaction.api&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.xml.bind.api&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Добавить установленный модуль в качестве драйвера для подключения к СУБД в файл &#039;&#039;WF_PATH/standalone/configuration/standalone.xml&#039;&#039;, в секцию &#039;&#039;&amp;lt;datasources/drivers&amp;gt;&#039;&#039;, добавив следующий блок:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;driver name=&amp;quot;mssql&amp;quot; module=&amp;quot;com.microsoft.sqlserver&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;driver-class&amp;gt;com.microsoft.sqlserver.jdbc.SQLServerDriver&amp;lt;/driver-class&amp;gt;&lt;br /&gt;
&amp;lt;/driver&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Oracle===&lt;br /&gt;
* Скачать актуальный JDBC-драйвер по адресу https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html&lt;br /&gt;
* Создать директорию &#039;&#039;WF_PATH/modules/org/postgresql/main/&#039;&#039;&lt;br /&gt;
* В директорию &#039;&#039;WF_PATH/modules/system/layers/base/com/oracle/main/&#039;&#039; поместить скачанный ojdbc*.jar.&lt;br /&gt;
* Создать в этой же папке файл &#039;&#039;module.xml&#039;&#039; следующего содержания, указав имя файла драйвера вместо &amp;quot;JAR_PATH&amp;quot;:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;module xmlns=&amp;quot;urn:jboss:module:1.0&amp;quot; name=&amp;quot;com.oracle&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;resources&amp;gt;&lt;br /&gt;
     &amp;lt;resource-root path=&amp;quot;JAR_PATH&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/resources&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.api&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.transaction.api&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Добавить установленный модуль в качестве драйвера для подключения к СУБД в файл &#039;&#039;WF_PATH/standalone/configuration/standalone.xml&#039;&#039;, в секцию &#039;&#039;&amp;lt;datasources/drivers&amp;gt;&#039;&#039;, добавив следующий блок:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;driver name=&amp;quot;oracle&amp;quot; module=&amp;quot;com.oracle&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;driver-class&amp;gt;oracle.jdbc.driver.OracleDriver&amp;lt;/driver-class&amp;gt;&lt;br /&gt;
&amp;lt;/driver&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Особенности маппинга Oracle==&lt;br /&gt;
Для корректной установки PC Server с подключением к БД Oracle требуется создать/изменить некоторые таблицы вручную:&lt;br /&gt;
&lt;br /&gt;
Инструкция:&lt;br /&gt;
* Заменить по содержимому ниже &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TABLESPACE_NAME&amp;gt;&lt;br /&gt;
&amp;lt;USER_NAME&amp;gt;&lt;br /&gt;
&amp;lt;USER_PASS&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Из-под пользователя с правами на создание пользователей и табличных пространств выполнить:&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
---Создание табличного пространства и пользователя---&lt;br /&gt;
CREATE TABLESPACE &amp;lt;TABLESPACE_NAME&amp;gt; DATAFILE &#039;&amp;lt;TABLESPACE_NAME&amp;gt;.DAT&#039; SIZE 50M AUTOEXTEND ON;&lt;br /&gt;
CREATE USER &amp;quot;&amp;lt;USER_NAME&amp;gt;&amp;quot; IDENTIFIED BY &amp;quot;&amp;lt;USER_PASS&amp;gt;&amp;quot; DEFAULT TABLESPACE &amp;lt;TABLESPACE_NAME&amp;gt;;&lt;br /&gt;
GRANT CREATE SESSION TO &amp;quot;&amp;lt;USER_NAME&amp;gt;&amp;quot;;&lt;br /&gt;
GRANT CREATE TABLE TO &amp;quot;&amp;lt;USER_NAME&amp;gt;&amp;quot;;&lt;br /&gt;
GRANT CREATE SEQUENCE TO &amp;quot;&amp;lt;USER_NAME&amp;gt;&amp;quot;;&lt;br /&gt;
GRANT UNLIMITED TABLESPACE TO &amp;quot;&amp;lt;USER_NAME&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Из-под созданного пользователя, под которым будет производиться подключение PC к БД выполнить:&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
---Создание таблиц---&lt;br /&gt;
   CREATE TABLE &amp;quot;PC_SYS_PROPERTY&amp;quot; &lt;br /&gt;
   (&amp;quot;SETTING_ID&amp;quot; NUMBER(19,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;SETTING_NAME&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;SETTING_VALUE&amp;quot; VARCHAR2(255),&lt;br /&gt;
	 PRIMARY KEY (&amp;quot;SETTING_ID&amp;quot;),&lt;br /&gt;
	 CONSTRAINT &amp;quot;UK_BYEQYB1KICGD7SNXKM5L52582&amp;quot; UNIQUE (&amp;quot;SETTING_NAME&amp;quot;));&lt;br /&gt;
 &lt;br /&gt;
	CREATE TABLE &amp;quot;PC_SYSTEM&amp;quot; &lt;br /&gt;
   (	&amp;quot;SYSTEMID&amp;quot; VARCHAR2(36) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;EVENTS_POST_URL&amp;quot; VARCHAR2(1024), &lt;br /&gt;
	&amp;quot;NAME&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;PC_IS_EXTERNAL_URL&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;PC_IS_INTERNAL_URL&amp;quot; VARCHAR2(255), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;SYSTEMID&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
	CREATE TABLE &amp;quot;PC_SYSTEM_PARAMS&amp;quot; &lt;br /&gt;
(	&amp;quot;SYSTEMID&amp;quot; VARCHAR2(36) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;BILLED_DATE_REQUEST&amp;quot; CLOB, &lt;br /&gt;
	&amp;quot;BILLING_PERIOD&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;BILLED_DATE&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;BILLING_TYPE&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;DESCRIPTION&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;FRONT_END_URL&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;LICENSE&amp;quot; VARCHAR2(2048), &lt;br /&gt;
	&amp;quot;ONLINE_CONFIRMATION_URL&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;REGISTER_REQUEST&amp;quot; CLOB, &lt;br /&gt;
	&amp;quot;REPORT_TEMPLATE_PATH&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;USER_KEYS_EXPIRATION_PERIOD&amp;quot; NUMBER(10,0),&lt;br /&gt;
	 PRIMARY KEY (&amp;quot;SYSTEMID&amp;quot;));&lt;br /&gt;
 &lt;br /&gt;
	  CREATE TABLE &amp;quot;PC_USER&amp;quot; &lt;br /&gt;
   (&amp;quot;USERID&amp;quot; VARCHAR2(64) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;BILLED_DATE&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;SYSTEMID&amp;quot; VARCHAR2(36), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;USERID&amp;quot;),&lt;br /&gt;
	 CONSTRAINT &amp;quot;FKGLUVAW7N4TKK6V6XALY8IK3S2&amp;quot; FOREIGN KEY (&amp;quot;SYSTEMID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_SYSTEM&amp;quot; (&amp;quot;SYSTEMID&amp;quot;) ENABLE&lt;br /&gt;
   );&lt;br /&gt;
 &lt;br /&gt;
  CREATE TABLE &amp;quot;PC_TRANSACTION&amp;quot; &lt;br /&gt;
   (	&amp;quot;TRANSACTIONID&amp;quot; VARCHAR2(36) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;CALLBACK_URL&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;IS_CLEANED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;CONFIRM_CODE_LENGTH&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;CONFIRMATION_TYPE&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;DECLINE_REASON&amp;quot; VARCHAR2(64), &lt;br /&gt;
	&amp;quot;DATA_HASH&amp;quot; RAW(255), &lt;br /&gt;
	&amp;quot;NOTIF_ID&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;STATUS&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;TIME_TO_LIVE&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;DATA_BINARY&amp;quot; BLOB, &lt;br /&gt;
	&amp;quot;DATA_TEXT&amp;quot; VARCHAR2(3095), &lt;br /&gt;
	&amp;quot;USERID&amp;quot; VARCHAR2(64), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;TRANSACTIONID&amp;quot;),&lt;br /&gt;
	 CONSTRAINT &amp;quot;FKARQ3VEGMNJXEJK8ONU4HRHEN3&amp;quot; FOREIGN KEY (&amp;quot;USERID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_USER&amp;quot; (&amp;quot;USERID&amp;quot;) ENABLE&lt;br /&gt;
	 );&lt;br /&gt;
 &lt;br /&gt;
	CREATE TABLE &amp;quot;PC_CONFIRM_ATTEMPT&amp;quot; &lt;br /&gt;
   (	&amp;quot;CONFIRM_ATTEMPT_ID&amp;quot; NUMBER(19,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;CONFIRM_CODE&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;CONFIRM_RESULT&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;DATA_HASH&amp;quot; RAW(255), &lt;br /&gt;
	&amp;quot;SIGNATURE&amp;quot; VARCHAR2(512), &lt;br /&gt;
	&amp;quot;TRANSACTIONID&amp;quot; VARCHAR2(36), &lt;br /&gt;
	&amp;quot;USERID&amp;quot; VARCHAR2(64), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;CONFIRM_ATTEMPT_ID&amp;quot;), &lt;br /&gt;
	 CONSTRAINT &amp;quot;FK5258W9Y6WQ4FY55U41WB30OWG&amp;quot; FOREIGN KEY (&amp;quot;TRANSACTIONID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_TRANSACTION&amp;quot; (&amp;quot;TRANSACTIONID&amp;quot;) ENABLE, &lt;br /&gt;
	 CONSTRAINT &amp;quot;FKHEJP6UYKY6U4X8QFDPV4VA63Y&amp;quot; FOREIGN KEY (&amp;quot;USERID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_USER&amp;quot; (&amp;quot;USERID&amp;quot;) ENABLE&lt;br /&gt;
   );&lt;br /&gt;
 &lt;br /&gt;
	CREATE TABLE &amp;quot;PC_DELAYEDKEYINFO&amp;quot; &lt;br /&gt;
   (	&amp;quot;TYPE&amp;quot; NUMBER(10,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;DELAYEDKEYID&amp;quot; NUMBER(19,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;KEY_CONTAINER_ID&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;KEY_CONTENT&amp;quot; RAW(255), &lt;br /&gt;
	&amp;quot;EXPIRATION_DATE&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;USER_KEY_VERSION&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;USERID&amp;quot; VARCHAR2(64), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;DELAYEDKEYID&amp;quot;), &lt;br /&gt;
	 CONSTRAINT &amp;quot;FK73X95ORVBL8BA0T3A3WEWADRF&amp;quot; FOREIGN KEY (&amp;quot;USERID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_USER&amp;quot; (&amp;quot;USERID&amp;quot;) ENABLE&lt;br /&gt;
   );&lt;br /&gt;
 &lt;br /&gt;
CREATE TABLE &amp;quot;PC_DEVICE&amp;quot; &lt;br /&gt;
   (	&amp;quot;TYPE&amp;quot; NUMBER(10,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;DEVICEID&amp;quot; NUMBER(19,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;DEVICE_PUSH_ID&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;USERID&amp;quot; VARCHAR2(64), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;DEVICEID&amp;quot;), &lt;br /&gt;
	 CONSTRAINT &amp;quot;FK8CMG562COTMP53MVGRDDF1EYA&amp;quot; FOREIGN KEY (&amp;quot;USERID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_USER&amp;quot; (&amp;quot;USERID&amp;quot;) ENABLE&lt;br /&gt;
   );&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    CREATE TABLE &amp;quot;PC_KEYINFO&amp;quot; &lt;br /&gt;
   (	&amp;quot;TYPE&amp;quot; NUMBER(10,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;KEYID&amp;quot; NUMBER(19,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;KEY_CONTAINER_ID&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;KEY_CONTENT&amp;quot; RAW(255), &lt;br /&gt;
	&amp;quot;EXPIRATION_DATE&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;DEVICE_FINGERPRINT&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;USER_KEY_VERSION&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;USERID&amp;quot; VARCHAR2(64), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;KEYID&amp;quot;), &lt;br /&gt;
	 CONSTRAINT &amp;quot;FKN3VEB4OTVNAIE35AWBD0HDS90&amp;quot; FOREIGN KEY (&amp;quot;USERID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_USER&amp;quot; (&amp;quot;USERID&amp;quot;) ENABLE&lt;br /&gt;
   );&lt;br /&gt;
 &lt;br /&gt;
  CREATE TABLE &amp;quot;PC_PUBLICKEY&amp;quot; &lt;br /&gt;
   (	&amp;quot;PUBLICKEYID&amp;quot; NUMBER(19,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;PUBLIC_KEY&amp;quot; RAW(512), &lt;br /&gt;
	&amp;quot;KEYID&amp;quot; NUMBER(19,0), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;PUBLICKEYID&amp;quot;), &lt;br /&gt;
	 CONSTRAINT &amp;quot;FKEMTGHSA74S1WI903R2TN7T3N&amp;quot; FOREIGN KEY (&amp;quot;KEYID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_KEYINFO&amp;quot; (&amp;quot;KEYID&amp;quot;) ENABLE&lt;br /&gt;
   );&lt;br /&gt;
&lt;br /&gt;
  CREATE TABLE &amp;quot;PC_EVENT&amp;quot; &lt;br /&gt;
   (	&amp;quot;EVENTID&amp;quot; NUMBER(19,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;AUTH_CODE&amp;quot; VARCHAR2(64), &lt;br /&gt;
	&amp;quot;DEVICE_EVENTID&amp;quot; VARCHAR2(36), &lt;br /&gt;
	&amp;quot;DEVICE_INFO&amp;quot; CLOB, &lt;br /&gt;
	&amp;quot;DEVICE_TIME&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;EVENTPOSTURL&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;REQUEST_HMAC&amp;quot; VARCHAR2(64), &lt;br /&gt;
	&amp;quot;REQUEST_HASH&amp;quot; VARCHAR2(64), &lt;br /&gt;
	&amp;quot;REQUEST_RESULT&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;REQUEST_TYPE&amp;quot; VARCHAR2(36), &lt;br /&gt;
	&amp;quot;REQUESTER_IP&amp;quot; VARCHAR2(15), &lt;br /&gt;
	&amp;quot;SESSIONID&amp;quot; VARCHAR2(36), &lt;br /&gt;
	&amp;quot;TRANSACTIONID&amp;quot; VARCHAR2(36), &lt;br /&gt;
	&amp;quot;USERID&amp;quot; VARCHAR2(64), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;EVENTID&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
---Создание индексов&lt;br /&gt;
CREATE INDEX pc_keyinfo1_idx ON PC_KEYINFO (userID, expiration_date, is_deleted);&lt;br /&gt;
CREATE INDEX pc_delayedkeyinfo1_idx ON PC_DELAYEDKEYINFO (userID, is_deleted);&lt;br /&gt;
CREATE INDEX pc_device1_idx ON PC_DEVICE (userID, is_deleted); &lt;br /&gt;
CREATE INDEX pc_transaction1_idx ON PC_TRANSACTION (userID, status);&lt;br /&gt;
CREATE INDEX pc_device2_idx ON PC_DEVICE (userID); &lt;br /&gt;
CREATE INDEX pc_keyinfo2_idx ON PC_KEYINFO (userID); &lt;br /&gt;
CREATE INDEX pc_transaction2_idx ON PC_TRANSACTION (userID); &lt;br /&gt;
CREATE INDEX pc_user1_idx ON PC_USER (systemID);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
---Создание очередей---&lt;br /&gt;
create sequence PC_ATTEMPT_SEQ start with 1 increment by 1;&lt;br /&gt;
create sequence PC_DELAYEDKEYINFO_SEQ start with 1 increment by 1;&lt;br /&gt;
create sequence PC_DEVICE_SEQ start with 1 increment by 1;&lt;br /&gt;
create sequence PC_KEYINFO_SEQ start with 1 increment by 1;&lt;br /&gt;
create sequence PC_PUBLICKEY_SEQ start with 1 increment by 1;&lt;br /&gt;
create sequence PC_SETTING_SEQ start with 1 increment by 1;&lt;br /&gt;
create sequence PC_EVENT_SEQ start with 1 increment by 1;&lt;br /&gt;
create sequence PC_PUSH_SEQ start with 1 increment by 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Добавление источников данных для PC Server==&lt;br /&gt;
[[PC_Pusher_5.2|&#039;&#039;&#039;При установке PC Pusher версии 5.2 и выше, подключение к БД PC Pusher не требуется&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
===PostgreSQL===&lt;br /&gt;
====PC Server====&lt;br /&gt;
В файл &#039;&#039;WF_PATH/standalone/configuration/standalone.xml&#039;&#039; внести следующие изменения добавить новый источник данных в секцию &#039;&#039;&amp;lt;datasources&amp;gt;&amp;lt;/datasources&amp;gt;&#039;&#039; заменив pcs-db-host, port, pcs-db, pcs-user, pcs-pass:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;datasource jta=&amp;quot;true&amp;quot; jndi-name=&amp;quot;java:jboss/datasources/PayControlDS&amp;quot; pool-name=&amp;quot;PayControlDS&amp;quot; enabled=&amp;quot;true&amp;quot; use-ccm=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;connection-url&amp;gt;jdbc:postgresql://pcs-db-host:port/pcs-db&amp;lt;/connection-url&amp;gt;&lt;br /&gt;
    &amp;lt;driver-class&amp;gt;org.postgresql.Driver&amp;lt;/driver-class&amp;gt;&lt;br /&gt;
    &amp;lt;driver&amp;gt;pgsql&amp;lt;/driver&amp;gt;&lt;br /&gt;
    &amp;lt;security&amp;gt;&lt;br /&gt;
        &amp;lt;user-name&amp;gt;pcs-user&amp;lt;/user-name&amp;gt;&lt;br /&gt;
        &amp;lt;password&amp;gt;pcs-pass&amp;lt;/password&amp;gt;&lt;br /&gt;
    &amp;lt;/security&amp;gt;&lt;br /&gt;
    &amp;lt;validation&amp;gt;&lt;br /&gt;
        &amp;lt;valid-connection-checker class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;background-validation&amp;gt;true&amp;lt;/background-validation&amp;gt;&lt;br /&gt;
        &amp;lt;exception-sorter class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/validation&amp;gt;&lt;br /&gt;
&amp;lt;/datasource&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===MS SQL===&lt;br /&gt;
====PC Server====&lt;br /&gt;
В файл &#039;&#039;WF_PATH/standalone/configuration/standalone.xml&#039;&#039; внести следующие изменения добавить новый источник данных в секцию &#039;&#039;&amp;lt;datasources&amp;gt;&amp;lt;/datasources&amp;gt;&#039;&#039; заменив pcs-db-host, port, pcs-db-host, pcs-db, pcs-user, pcs-pass:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;datasource jta=&amp;quot;true&amp;quot; jndi-name=&amp;quot;java:jboss/datasources/PayControlDS&amp;quot; pool-name=&amp;quot;PayControlDS&amp;quot; enabled=&amp;quot;true&amp;quot; use-ccm=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;connection-url&amp;gt;jdbc:sqlserver://pcs-db-host:port;databaseName=pcs-db&amp;lt;/connection-url&amp;gt;&lt;br /&gt;
	&amp;lt;driver&amp;gt;mssql&amp;lt;/driver&amp;gt;&lt;br /&gt;
	&amp;lt;security&amp;gt;&lt;br /&gt;
		&amp;lt;user-name&amp;gt;pcs-user&amp;lt;/user-name&amp;gt;&lt;br /&gt;
		&amp;lt;password&amp;gt;pcs-pass&amp;lt;/password&amp;gt;&lt;br /&gt;
	&amp;lt;/security&amp;gt;&lt;br /&gt;
	&amp;lt;pool&amp;gt;&lt;br /&gt;
		&amp;lt;min-pool-size&amp;gt;5&amp;lt;/min-pool-size&amp;gt;&lt;br /&gt;
		&amp;lt;max-pool-size&amp;gt;50&amp;lt;/max-pool-size&amp;gt;&lt;br /&gt;
		&amp;lt;prefill&amp;gt;false&amp;lt;/prefill&amp;gt;&lt;br /&gt;
		&amp;lt;use-strict-min&amp;gt;false&amp;lt;/use-strict-min&amp;gt;&lt;br /&gt;
		&amp;lt;flush-strategy&amp;gt;FailingConnectionOnly&amp;lt;/flush-strategy&amp;gt;&lt;br /&gt;
	&amp;lt;/pool&amp;gt;&lt;br /&gt;
	&amp;lt;validation&amp;gt;&lt;br /&gt;
		&amp;lt;valid-connection-checker class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker&amp;quot;&amp;gt;&amp;lt;/valid-connection-checker&amp;gt;&lt;br /&gt;
	&amp;lt;/validation&amp;gt;&lt;br /&gt;
&amp;lt;/datasource&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Oracle===&lt;br /&gt;
====PC Server====&lt;br /&gt;
В файл &#039;&#039;WF_PATH/standalone/configuration/standalone.xml&#039;&#039; внести следующие изменения добавить новый источник данных в секцию &#039;&#039;&amp;lt;datasources&amp;gt;&amp;lt;/datasources&amp;gt;&#039;&#039; заменив pcs-db-host, port, pcs-db, pcs-user, pcs-pass:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;datasource jta=&amp;quot;true&amp;quot; jndi-name=&amp;quot;java:jboss/datasources/PayControlDS&amp;quot; pool-name=&amp;quot;PayControlDS&amp;quot; enabled=&amp;quot;true&amp;quot; use-ccm=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;connection-url&amp;gt;jdbc:oracle:thin:@pcs-db-host:port:sid&amp;lt;/connection-url&amp;gt;&lt;br /&gt;
    &amp;lt;driver-class&amp;gt;org.postgresql.Driver&amp;lt;/driver-class&amp;gt;&lt;br /&gt;
    &amp;lt;driver&amp;gt;oracle&amp;lt;/driver&amp;gt;&lt;br /&gt;
    &amp;lt;security&amp;gt;&lt;br /&gt;
        &amp;lt;user-name&amp;gt;pcs-user&amp;lt;/user-name&amp;gt;&lt;br /&gt;
        &amp;lt;password&amp;gt;pcs-pass&amp;lt;/password&amp;gt;&lt;br /&gt;
    &amp;lt;/security&amp;gt;&lt;br /&gt;
    &amp;lt;pool&amp;gt;&lt;br /&gt;
        &amp;lt;min-pool-size&amp;gt;1&amp;lt;/min-pool-size&amp;gt;&lt;br /&gt;
        &amp;lt;max-pool-size&amp;gt;5&amp;lt;/max-pool-size&amp;gt;&lt;br /&gt;
        &amp;lt;prefill&amp;gt;true&amp;lt;/prefill&amp;gt;&lt;br /&gt;
    &amp;lt;/pool&amp;gt;&lt;br /&gt;
    &amp;lt;validation&amp;gt;&lt;br /&gt;
        &amp;lt;check-valid-connection-sql&amp;gt;select 1 from dual&amp;lt;/check-valid-connection-sql&amp;gt;&lt;br /&gt;
        &amp;lt;validate-on-match&amp;gt;false&amp;lt;/validate-on-match&amp;gt;&lt;br /&gt;
        &amp;lt;background-validation&amp;gt;true&amp;lt;/background-validation&amp;gt;&lt;br /&gt;
        &amp;lt;background-validation-millis&amp;gt;10000&amp;lt;/background-validation-millis&amp;gt;&lt;br /&gt;
    &amp;lt;/validation&amp;gt;&lt;br /&gt;
&amp;lt;/datasource&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Настройка подключения PCIS External к PC Server=&lt;br /&gt;
На сервере PCIS External необходимо установить адрес сервера PC Server (host и port заменить на реальные значения). Для этого:&lt;br /&gt;
* на Linux в файл &#039;&#039;WF_PATH/bin/standalone.conf&#039;&#039; нужно добавить &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;JAVA_OPTS=&amp;quot;$JAVA_OPTS -Dpcservice.endpoint=http://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/ws/PayControlServiceV3?wsdl -Duser.language=ru -Dpaycontrol.locale=ru&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* на Windows в файл &#039;&#039;WF_PATH/bin/standalone.conf.bat&#039;&#039; нужно добавить &amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;set &amp;quot;JAVA_OPTS=%JAVA_OPTS% -Dpcservice.endpoint=http://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/ws/PayControlServiceV3?wsdl -Duser.language=ru -Dpaycontrol.locale=ru&amp;quot;&amp;lt;/syntaxhighlight&amp;gt; выше метки :JAVA_OPTS_SET&lt;br /&gt;
&lt;br /&gt;
=Настройка выделения памяти серверу=&lt;br /&gt;
На всех серверах установить максимальный объем доступной для использования памяти:&lt;br /&gt;
* на Linux в &#039;&#039;WF_PATH/bin/standalone.conf&#039;&#039; указать объём «ОбщийОбъёмОЗУ - 512MB»&lt;br /&gt;
* на Windows в &#039;&#039;WF_PATH\bin\standalone.conf.bat&#039;&#039; указать объём «ОбщийОбъёмОЗУ - 1536MB»&lt;br /&gt;
Для этого в строке&lt;br /&gt;
&#039;&#039;JAVA_OPTS=&amp;quot;-Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true&amp;quot;&#039;&#039; поменять значение параметра &#039;&#039;Xmx&#039;&#039; на выделяемый объём.&lt;br /&gt;
==Запуск проекта==&lt;br /&gt;
* Загрузить файлы модулей требуемых компонентов последних версий из репозитория по адресу https://repo.paycontrol.org/server/maven/tech/paycon/server/ (при этом модуль PCPusher необходимо взять из ветки 5.x):&lt;br /&gt;
** PC Server — https://repo.paycontrol.org/server/maven/tech/paycon/server/PayControl-services-module/, файл &#039;&#039;PayControl-services-module-&amp;lt;VERSION&amp;gt;.ear&#039;&#039;&lt;br /&gt;
** PC Pusher — https://repo.paycontrol.org/server/maven/tech/paycon/server/pc-pusher/, файл &#039;&#039;pc-pusher-&amp;lt;VERSION&amp;gt;.war&#039;&#039;&lt;br /&gt;
** PCIS External — https://repo.paycontrol.org/server/maven/tech/paycon/server/PayControl-interaction-rest/, файл &#039;&#039;PayControl-interaction-rest-&amp;lt;VERSION&amp;gt;.war&#039;&#039;&lt;br /&gt;
* Скопировать файл приложения сервера &#039;&#039;WF_PATH\standalone\deployments\&#039;&#039;. Один сервер WildFly может запускать одно или несколько приложений сервера.&lt;br /&gt;
* Запустить&lt;br /&gt;
** Linux &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;WF_PATH/bin/standalone.sh -b 0.0.0.0&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** Windows &amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;WF_PATH\bin\standalone.bat -b 0.0.0.0&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*:  где -b 0.0.0.0 - позволяет подключаться к серверу используя любой его интерфейс (опция bind)&lt;br /&gt;
* Дождаться старта WF, проверить, что нет ошибок запуска.&lt;br /&gt;
&lt;br /&gt;
==Настройка автозапуска службы сервера==&lt;br /&gt;
===Linux===&lt;br /&gt;
Для настройки автозапуска службы, перейти в каталог WF_PATH/docs/contrib/scripts/systemd/ и выполнить шаги, описанные в файле README в этом каталоге, за исключением пунктов распаковки и создания символьной ссылки на каталог.&lt;br /&gt;
Пункт &amp;lt;code&amp;gt;chown -R wildfly:wildfly /opt/wildfly&amp;lt;/code&amp;gt; необходимо выполнить с параметрами «-RH» (параметр «H» указывает, что если на вход подана символьная ссылка, то нужно пойти вглубь каталога, на который она ссылается). Таким образом команда должна выглядеть следующим образом:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;chown -RHv wildfly:wildfly /opt/wildfly&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Чтобы исключить возможность отклонения запросов при запуске в качестве службы, необходимо установить параметры JAVA_OPTS в файле standalone.conf:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;JAVA_OPTS=&amp;quot;$JAVA_OPTS -Djboss.bind.address=0.0.0.0&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Windows===&lt;br /&gt;
Скопировать папку&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;WF_PATH\docs\contrib\scripts\service\&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
в папку&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;WF_PATH\bin\&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выполнить&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;WF_PATH\bin\service\service.bat install /startup&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Чтобы исключить возможность отклонения запросов при запуске в качестве службы, необходимо установить параметры JAVA_OPTS в файле standalone.conf.bat выше метки :JAVA_OPTS_SET.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;set &amp;quot;JAVA_OPTS=%JAVA_OPTS% -Djboss.bind.address=0.0.0.0&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После создания службы, вы можете создать отдельного пользователя, например &amp;quot;wildfly&amp;quot;, с правами группы &amp;quot;Пользователи&amp;quot;, сделать его владельцем папки, где находятся файлы Wildfly, с полным доступом и в &amp;quot;Службах&amp;quot; Windows настроить запуск службы Wildfly от этого пользователя.&lt;br /&gt;
&lt;br /&gt;
==URL-фильтрация при совмещении PC Pusher и PCIS External==&lt;br /&gt;
При совмещении ролей PC Pusher и PCIS External на одном сервере необходимо исключить возможность выполнения запросов PC Pusher со стороны сети интернет. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо со стороны сети интернет разрешить подключения только на конечную точку PCIS External. &amp;lt;br&amp;gt;&lt;br /&gt;
Конечная точка PCIS External - &#039;&#039;&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/PayControl-interaction-rest/*&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Доступ к другим конечным точкам должен быть запрещен.&lt;br /&gt;
&lt;br /&gt;
При этом доступ к PC Pusher со стороны PC Server должен сохраниться. &amp;lt;br&amp;gt;&lt;br /&gt;
Конечная точка PC Pusher - &#039;&#039;&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/pc-pusher-api/*&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Внесение изменений в БД=&lt;br /&gt;
==Создание индексов БД PC Server==&lt;br /&gt;
После первого запуска приложения, в базе данных будут созданы необходимые таблицы.&lt;br /&gt;
&lt;br /&gt;
На продуктивной среде после этого необходимо создать индексы в базе данных(&#039;&#039;&#039;за исключением Oracle&#039;&#039;&#039;) PC Server.&lt;br /&gt;
&lt;br /&gt;
Для этого выполните SQL скрипт:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
create index pc_keyinfo1_idx on PC_KEYINFO (userID, expiration_date, is_deleted);&lt;br /&gt;
create index pc_delayedkeyinfo1_idx on PC_DELAYEDKEYINFO (userID, is_deleted);&lt;br /&gt;
create index pc_device1_idx on PC_DEVICE (userID, is_deleted); &lt;br /&gt;
create index pc_transaction1_idx on PC_TRANSACTION (userID, status);&lt;br /&gt;
create index pc_device2_idx on PC_DEVICE (userID); &lt;br /&gt;
create index pc_keyinfo2_idx on PC_KEYINFO (userID); &lt;br /&gt;
create index pc_transaction2_idx on PC_TRANSACTION (userID); &lt;br /&gt;
create index pc_user1_idx on PC_USER (systemID);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Корректировка типов данных для MS SQL==&lt;br /&gt;
Java-приложение при создании таблиц БД неоптимально устанавливает тип для одного из полей для СУБД MS SQL.&lt;br /&gt;
&lt;br /&gt;
Для его корректировки после того, как таблицы созданы, выполните запрос&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
ALTER TABLE PC_TRANSACTION ALTER COLUMN DATA_BINARY image;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Регистрация системы==&lt;br /&gt;
После успешного запуска приложения PC Server до начала работы необходимо зарегистрировать прикладную систему.&lt;br /&gt;
&lt;br /&gt;
Это действие выполняется путем отправки на PC Server HTTP POST запроса, сформированного ST/Airome. Содержание запроса предоставляется дополнительно.&lt;br /&gt;
&lt;br /&gt;
Для отправки запроса можно использовать любое средство отправки HTTP-запросов.&lt;br /&gt;
===Примеры===&lt;br /&gt;
&lt;br /&gt;
====Curl====&lt;br /&gt;
cURL (в ОС Linux доступна в репозиториях, для ОС Windows можно скачать с сайта разработчика https://curl.haxx.se/download.html):&lt;br /&gt;
* 1. Скопировать файл RegisterSystemRequest.xml (если название файла с запросом на регистрацию отличается, то необходимо либо переименовать его, либо изменить имя этого файла в параметрах команды curl) на сервер в любую директорию на машину, с которой будет производиться запуск команды curl.&lt;br /&gt;
* 2. Проверить содержимое файла. Если файл выглядит как&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;soapenv:Envelope xmlns:soapenv=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:pay=&amp;quot;http://ws.safetech.ru/PayControlV3/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;soapenv:Header/&amp;gt;&lt;br /&gt;
   &amp;lt;soapenv:Body&amp;gt;&lt;br /&gt;
      &amp;lt;pay:registerSystemRequest&amp;gt;&lt;br /&gt;
         &amp;lt;request&amp;gt;PD94bWwgdmVyc2lvbj0iMJlIHhtbG5zPSJodHRwOi8vd3Muc2FmZXRlY2gucS4w... ...ZXF1JlIHhtbG5zPSJodHRwOi8vd3Muc2FmZXRlY2gucnUZ==&amp;lt;/request&amp;gt;&lt;br /&gt;
      &amp;lt;/pay:registerSystemRequest&amp;gt;&lt;br /&gt;
   &amp;lt;/soapenv:Body&amp;gt;&lt;br /&gt;
&amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
то, перейти к п.4.&lt;br /&gt;
* 3. Если файл выглядит как&lt;br /&gt;
&amp;lt;code&amp;gt;PD94bWwgdmVyc2lvbj0iMJlIHhtbG5zPSJodHRwOi8vd3Muc2FmZXRlY2gucS4w... ...ZXF1JlIHhtbG5zPSJodHRwOi8vd3Muc2FmZXRlY2gucnUZ==&amp;lt;/code&amp;gt;&lt;br /&gt;
то необходимо добавить в его начало&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;soapenv:Envelope xmlns:soapenv=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:pay=&amp;quot;http://ws.safetech.ru/PayControlV3/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;soapenv:Header/&amp;gt;&lt;br /&gt;
   &amp;lt;soapenv:Body&amp;gt;&lt;br /&gt;
      &amp;lt;pay:registerSystemRequest&amp;gt;&lt;br /&gt;
         &amp;lt;request&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
и в его конец&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/request&amp;gt;&lt;br /&gt;
      &amp;lt;/pay:registerSystemRequest&amp;gt;&lt;br /&gt;
   &amp;lt;/soapenv:Body&amp;gt;&lt;br /&gt;
&amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
чтобы он принял вид, как представлено в п.2.&lt;br /&gt;
* 4. Выполнить команду (в той-же директории, где располагается скопированный/изменённый файл), заменив &amp;lt;PCServer_IP/localhost&amp;gt; на DNS-имя сервера или его IP-адрес:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl --header &amp;quot;Content-Type: text/xml;charset=UTF-8&amp;quot; --header &amp;quot;SOAPAction: registerSystem&amp;quot; --data @RegisterSystemRequest.xml  &amp;lt;PCServer_IP/localhost&amp;gt;:8080/ws/PayControlServiceV3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Если в составе ответа пришла строка &amp;lt;systemId&amp;gt;SYSTEMID ВАШЕЙ ПРИКЛАДНОЙ СИСТЕМЫ&amp;lt;/systemId&amp;gt;, значит прикладная система зарегистрирована. &lt;br /&gt;
* Если в составе ответа было &amp;lt;soap:Fault&amp;gt;, значит возникла проблема на этапе регистрации.&lt;br /&gt;
* После успешной регистрации прикладной системы на сервере, файл registerSystem.xml больше не нужен.&lt;br /&gt;
&lt;br /&gt;
====SOAP UI====&lt;br /&gt;
* 1. Добавить подключение к серверу PCS, указав адрес WSDL схемы:&lt;br /&gt;
[[Файл:Soap add conn.jpg]]&lt;br /&gt;
* 2. Создать новый запрос из категории registerSystem&lt;br /&gt;
[[Файл:Soap register system.jpg]]&lt;br /&gt;
* 3. Выполнить запрос&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Если в составе ответа пришла строка &amp;lt;systemId&amp;gt;SYSTEMID ВАШЕЙ ПРИКЛАДНОЙ СИСТЕМЫ&amp;lt;/systemId&amp;gt;, значит прикладная система зарегистрирована. &lt;br /&gt;
* Если в составе ответа было &amp;lt;soap:Fault&amp;gt;, значит возникла проблема на этапе регистрации.&lt;br /&gt;
&lt;br /&gt;
==Доступ к сервисам==&lt;br /&gt;
Сервис PC Server доступен по ссылкам (при запросе на эти 2 адреса ниже, должна возвратиться WSDL-схема):&lt;br /&gt;
* http://&amp;lt;IP или имя сервера с WF &amp;gt;:8080/ws/PayControlServiceV3?wsdl&lt;br /&gt;
* http://&amp;lt;IP или имя сервера с WF &amp;gt;:8080/ws/PayControlReportService?wsdl&lt;br /&gt;
&lt;br /&gt;
Адрес конечной точки PC Pusher по умолчанию:&lt;br /&gt;
* http://&amp;lt;IP или имя сервера с WF &amp;gt;:8080/pc-pusher-api/&lt;br /&gt;
Адрес PC Pusher health check:&lt;br /&gt;
* http://&amp;lt;IP или имя сервера с WF &amp;gt;:8080/pc-pusher-api/health_check&lt;br /&gt;
&lt;br /&gt;
PCIS External (при запросе на этот адрес должно возвратиться «Not Found». Также необходимо обратить внимание, на то, какой протокол разрешён – HTTP или HTTPS):&lt;br /&gt;
* http://&amp;lt;IP или имя сервера с WF &amp;gt;:8080/PayControl-interaction-rest/&lt;br /&gt;
=Настройка PC Pusher для отправки пушей в другое приложение (при необходимости)=&lt;br /&gt;
Необходимо выполнить пункты описанные по ссылке [[Обновление_с_3.6_до_3.8#Настройка PC Pusher|&amp;quot;Настройка PCS и PC Pusher&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
=Корректировка (смена) адресов серверов PayControl (при необходимости)=&lt;br /&gt;
{{Предупреждение|Не рекомендуется дополнительно указывать номер порта, в случаях, если для HTTP используется порт 80, или для HTTPS используется порт 443}}&lt;br /&gt;
==Учёт изменения адреса сервера PCS==&lt;br /&gt;
Для учёта изменения адреса сервера PCS необходимо произвести изменения в настройках PCIS External. В файле /opt/wildfly/bin/standalone.conf, в следующей строке, указав правильный адрес и при необходимости порт сервера PCS, а также уточнив протокол подключения (HTTP/HTTPS):&lt;br /&gt;
* Linux &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
JAVA_OPTS=&amp;quot;$JAVA_OPTS -Dpcservice.endpoint=http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/ws/PayControlServiceV3?wsdl -Duser.language=ru -Dpaycontrol.locale=ru&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Windows &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
set &amp;quot;JAVA_OPTS=%JAVA_OPTS% -Dpcservice.endpoint=http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/ws/PayControlServiceV3?wsdl -Duser.language=ru -Dpaycontrol.locale=ru&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После корректировки адреса необходимо перезапустить службу WildFly для вступления изменений в силу.&lt;br /&gt;
&lt;br /&gt;
==Учёт изменения адреса сервера PC Pusher==&lt;br /&gt;
Для учёта изменения адреса сервера PC Pusher, необходимо, предварительно указав корректные данные (протокол (HTTP/HTTPS), имя или IP сервера, порт, идентификатор системы), выполнить запрос к БД PCS: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_internal_url = &#039;http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/pc-pusher-api/&#039; where systemid=&#039;&amp;lt;SYSTEMID&amp;gt;&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Учёт изменения внешнего адреса сервера PCIS External==&lt;br /&gt;
{{Предупреждение|Если система была переведена в промышленную эксплуатацию, при смене адреса для доступа мобильных устройств, не рекомендуется выводить из действия предыдущий адрес на протяжении всего срока действия выпущенных ключей пользователя. Иначе мобильное приложение потеряет доступ к серверу PayControl и для восстановления будет необходимо перевыпустить ключ и заново добавить его в приложение пользователя.}}&lt;br /&gt;
Для учёта изменения внешнего адреса сервера PayControl, по которому связываются мобильное приложение с сервером PayControl, необходимо, предварительно указав корректные данные (протокол (HTTP/HTTPS), имя или IP сервера, порт, идентификатор системы), выполнить запрос к БД PCS:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_external_url = &#039;http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/PayControl-interaction-rest/&#039; where systemid=&#039;&amp;lt;SYSTEMID&amp;gt;&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_PayControl_v3.9_Linux&amp;diff=793</id>
		<title>Установка PayControl v3.9 Linux</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_PayControl_v3.9_Linux&amp;diff=793"/>
		<updated>2023-07-14T11:13:07Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: /* Учёт изменения адреса сервера PCS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Статья описывает установку с помощью инсталляционного скрипта.&lt;br /&gt;
=Справка скрипта инсталляции=&lt;br /&gt;
&amp;lt;pre&amp;gt;Execution modes:&lt;br /&gt;
  -i  Install. Set it for process installation. &lt;br /&gt;
  -h  Help. Will show this help.&lt;br /&gt;
&lt;br /&gt;
Installation options:&lt;br /&gt;
  -r  Register system (only on PCS, matters with -i option). Optional. For registration you must put you register system request file to &amp;quot;customer&amp;quot; directory before. Contact you supplier for obtain this request file.&lt;br /&gt;
&lt;br /&gt;
 PC roles (must selected at least one of them):&lt;br /&gt;
  -S  PC Server&lt;br /&gt;
  -P  PC Pusher&lt;br /&gt;
  -E  External / PCIS External&lt;br /&gt;
  -G  PC Server Signer (only for version 5.2 and above)&lt;br /&gt;
&lt;br /&gt;
Install wildfly database driver (mandatory for PCS and PCSS modules):&lt;br /&gt;
  -p  PostgreSQL&lt;br /&gt;
  -o  Oracle&lt;br /&gt;
    Need to set up parameter - jdbc version:&lt;br /&gt;
    8  JDBCv8. Certified with JDK8 and JDK11. Supports Oracle Database versions - 21c, 19c, 18c, and 12.2&lt;br /&gt;
    0  JDBCv10. Implements JDBC 4.3 spec and certified with JDK11. Supports Oracle Database versions - 21c, 19c, 18c, and 12.2&lt;br /&gt;
    1  JDBCv11. Implements JDBC 4.3 spec and certified with JDK11 and JDK17. Supports Oracle Database versions - 21c, 19c, 18c, and 12.2&lt;br /&gt;
  -m  MS SQL&lt;br /&gt;
&lt;br /&gt;
Examples&lt;br /&gt;
  install.sh -i -SPEG -r -o8&lt;br /&gt;
  also like&lt;br /&gt;
  install.sh -iSPEGro8&lt;br /&gt;
    will install PCS, PCP, PCE, PCSS, Oracle JDBC8 Driver and execute register system request&lt;br /&gt;
&lt;br /&gt;
  install.sh -i -Sp&lt;br /&gt;
  also like&lt;br /&gt;
  install.sh -Sp&lt;br /&gt;
    will install PCS with Postgres drivers&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Перед установкой PayControl =&lt;br /&gt;
&lt;br /&gt;
Установить последнюю версию JDK 11.&lt;br /&gt;
&lt;br /&gt;
= Конфигурирование =&lt;br /&gt;
&lt;br /&gt;
Конфигурирование производится путём редактирования раздела &amp;lt;code&amp;gt;CUSTOMER Config&amp;lt;/code&amp;gt; файла &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Подключение к БД для PCS==&lt;br /&gt;
&lt;br /&gt;
Необходимо установить корректные значения адресов и портов СУБД, имена пользователей и пароли.&lt;br /&gt;
&lt;br /&gt;
=== СУБД Oracle ===&lt;br /&gt;
&lt;br /&gt;
При использовании СУБД Oracle необходимо указать, каким образом происходит выбор необходимой БД - с помощью SID или Service Name.&lt;br /&gt;
&lt;br /&gt;
Также &#039;&#039;&#039;необходимо&#039;&#039;&#039; следуя высланной инструкции &#039;&#039;&#039;Oracle. Создание пользователя, табличного пространства и таблиц&#039;&#039;&#039; выполнить ее 3-й пункт.&lt;br /&gt;
&lt;br /&gt;
== Настройка PCE для подключения к PCS ==&lt;br /&gt;
&lt;br /&gt;
Для соединения PCE с PCS необходимо указать правильный адрес сервера PCS по которому он сможет получить к нему доступ.&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;###################################################&lt;br /&gt;
#&lt;br /&gt;
# CUSTOMER Config&lt;br /&gt;
#&lt;br /&gt;
###################################################&lt;br /&gt;
&lt;br /&gt;
PC_PATH=&#039;/opt/pc&#039;&lt;br /&gt;
PC_PRODUCT=&#039;PayControl&#039;&lt;br /&gt;
&lt;br /&gt;
#	PC Servers Settings&lt;br /&gt;
##	PCS&lt;br /&gt;
### DB&lt;br /&gt;
PCSDB_HOST=&#039;hostname:port&#039;&lt;br /&gt;
PCSDB=&#039;DB&#039;&lt;br /&gt;
PCSDB_USER=&#039;user&#039;&lt;br /&gt;
PCSDB_PASSWD=&#039;password&#039;&lt;br /&gt;
&lt;br /&gt;
# Oracle connection string delimiters:&lt;br /&gt;
# - use &#039;:&#039;, if PCSDB contains SID&lt;br /&gt;
# - use &#039;/&#039;, if PCSDB contains Service Name &lt;br /&gt;
PCSDB_Oracle_delimiter=&#039;:&#039; &lt;br /&gt;
&lt;br /&gt;
###	PCE&lt;br /&gt;
&lt;br /&gt;
PCS_HOSTNAME_PORT=&#039;localhost:8080&#039;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Установка =&lt;br /&gt;
&lt;br /&gt;
У пользователя, осуществляющего установку должны быть права на выполнение действий с уровнем привилегий root, либо возможность использовать учётную запись root.&lt;br /&gt;
# Скопировать файлы дистрибутива на сервер, например в домашнюю папку пользователя.&lt;br /&gt;
# Перейти в директорию с дистрибутивом.&lt;br /&gt;
# Запустить установочный скрипт с привилегиями root, с необходимыми параметрами.&lt;br /&gt;
&lt;br /&gt;
== PC Pusher ==&lt;br /&gt;
&lt;br /&gt;
Установка PC Pusher на сервере вместе с другим уже установленным модулем PC выполняется следующим образом:&lt;br /&gt;
&lt;br /&gt;
* Скопировать файл приложения сервера в &#039;&#039;WF_PATH\standalone\deployments\&#039;&#039;:&lt;br /&gt;
** на PC Pusher - файл &#039;&#039;pc-pusher-&amp;lt;VERSION&amp;gt;.war&#039;&#039;&lt;br /&gt;
* Дождаться старта WF, проверить, что нет ошибок запуска.&lt;br /&gt;
* После развёртывания новых файлов, в директории deployments будут созданы файлы:&lt;br /&gt;
** с расширением *.deployed, где вместо * будут указаны названия новых модулей.&lt;br /&gt;
** После того, как появятся файлы *.deployed, рекомендуется перезапустить Wildfly&lt;br /&gt;
** При появлении файлов с расширением *.failed, необходимо перезапустить Wildfly.&lt;br /&gt;
&lt;br /&gt;
= Результат выполнения инсталляционного скрипта =&lt;br /&gt;
&lt;br /&gt;
Результат выполнения инсталляционного скрипта является:&lt;br /&gt;
&lt;br /&gt;
* установка службы wildflу (директория /opt);&lt;br /&gt;
* включение автозапуска службы wildfly;&lt;br /&gt;
* добавление драйверов СУБД (опционально);&lt;br /&gt;
* добавление источников данных (только для PCS);&lt;br /&gt;
* развёртывание файлов сервера в wildfly;&lt;br /&gt;
* регистрация прикладной системы в PayControl (при установленном параметре &amp;quot;&#039;&#039;&#039;r&#039;&#039;&#039;&amp;quot;). Результат регистрации - вывод на экран идентификатора системы в конце журнала работы инсталляционного скрипта (systemid). Пример:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;soap:Envelope xmlns:soap=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot;&amp;gt;&amp;lt;soap:Body&amp;gt;&amp;lt;ns3:registerSystemResponse xmlns:ns2=&amp;quot;http://ws.safetech.ru/PayControl/services/ws/common/&amp;quot; xmlns:ns3=&amp;quot;http://ws.safetech.ru/PayControlV3/&amp;quot;&amp;gt;&amp;lt;systemId&amp;gt;e64a67c9-73e9-462c-9c27-2d0195a2bd23&amp;lt;/systemId&amp;gt;&amp;lt;/ns3:registerSystemResponse&amp;gt;&amp;lt;/soap:Body&amp;gt;&amp;lt;/soap:Envelope&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; В приведённом примере идентификатором зарегистрированной прикладной системы является &#039;&#039;e64a67c9-73e9-462c-9c27-2d0195a2bd23&#039;&#039;. В дальнейшем этот идентификатор понадобится при настройке прикладной системы на работу с PayControl. Если значение идентификатора прикладной системы утеряно, свяжитесь с компанией СэйфТек для его уточнения.&lt;br /&gt;
&lt;br /&gt;
== Примеры параметров запуска ==&lt;br /&gt;
&lt;br /&gt;
Примеры ниже приведены для установки PayControl с драйвером PostgreSQL (параметр &amp;quot;&#039;&#039;&#039;p&#039;&#039;&#039;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== Всё на одном сервере ===&lt;br /&gt;
&lt;br /&gt;
==== Без регистрации прикладной системы ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo ./install.sh -ipSE&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== С регистрацией прикладной системы ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo ./install.sh -ipSEr&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PCS ===&lt;br /&gt;
&lt;br /&gt;
==== Без регистрации прикладной системы ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo ./install.sh -ipS&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== С регистрацией прикладной системы ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo ./install.sh -ipSr&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PCE ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo ./install.sh -iE&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Контроль =&lt;br /&gt;
&lt;br /&gt;
== Вывод журнала в консоль в реальном времени ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;tail -n 300 -f /opt/wildfly/standalone/log/server.log&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Просмотр успешности развёртывания компонентов сервера ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;ls -la /opt/pc/deployments/&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если компонент сервера развёрнут успешно, рядом с файлом компонента сервера создаётся файл с аналогичным именем файлу сервера с расширением &amp;quot;&#039;&#039;&#039;.deployed&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Проверка доступности сервисов ==&lt;br /&gt;
&lt;br /&gt;
=== PCS ===&lt;br /&gt;
&lt;br /&gt;
Сервисы доступны по ссылкам (при запросе на эти адреса должна возвратиться WSDL-схема):&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;IP или имя сервера PCS&amp;gt;:8080/ws/PayControlServiceV3?wsdl&lt;br /&gt;
http://&amp;lt;IP или имя сервера PCS&amp;gt;:8080/ws/PayControlReportService?wsdl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PCP ===&lt;br /&gt;
&lt;br /&gt;
Сервис доступен по адресу:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;IP или имя сервера PC Pusher&amp;gt;:8080/pc-pusher-api/health_check&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PCE ===&lt;br /&gt;
&lt;br /&gt;
Сервис доступен по адресу&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;IP или имя сервера PCIS External&amp;gt;:8080/PayControl-interaction-rest/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При запросе на этот адрес должно возвратиться текст «Not Found» с HTTP-кодом 404. В Internet Explorer будет выведена своя страница браузера, сообщающая о том, что страница не найдена.&lt;br /&gt;
&lt;br /&gt;
= Внесение изменений в БД =&lt;br /&gt;
&lt;br /&gt;
== Создание индексов БД PCS ==&lt;br /&gt;
&lt;br /&gt;
Для создания индексов необходимо выполнить следующие запросы к БД PCS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;create index pc_keyinfo1_idx on PC_KEYINFO (userID, expiration_date, is_deleted);&lt;br /&gt;
create index pc_delayedkeyinfo1_idx on PC_DELAYEDKEYINFO (userID, is_deleted);&lt;br /&gt;
create index pc_device1_idx on PC_DEVICE (userID, is_deleted); &lt;br /&gt;
create index pc_transaction1_idx on PC_TRANSACTION (userID, status);&lt;br /&gt;
create index pc_device2_idx on PC_DEVICE (userID); &lt;br /&gt;
create index pc_keyinfo2_idx on PC_KEYINFO (userID); &lt;br /&gt;
create index pc_transaction2_idx on PC_TRANSACTION (userID); &lt;br /&gt;
create index pc_user1_idx on PC_USER (systemID);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Корректировка типов данных для MS SQL ==&lt;br /&gt;
&lt;br /&gt;
Для корректировки типов данных необходимо выполнить следующий запрос к БД PCS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;ALTER TABLE PC_TRANSACTION ALTER COLUMN DATA_BINARY image;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Настройка PC Pusher для отправки пушей в другое приложение (при необходимости) =&lt;br /&gt;
Необходимо выполнить пункты описанные по ссылке [[Обновление_с_3.6_до_3.8#Настройка PC Pusher|&amp;quot;Настройка PCS и PC Pusher&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
= Корректировка (смена) адресов серверов PayControl (при необходимости) =&lt;br /&gt;
&lt;br /&gt;
{{Предупреждение|Не рекомендуется дополнительно указывать номер порта, в случаях, если для HTTP используется порт 80, или для HTTPS используется порт 443}}&lt;br /&gt;
&lt;br /&gt;
== Учёт изменения адреса сервера PCS ==&lt;br /&gt;
&lt;br /&gt;
Для учёта изменения адреса сервера PCS необходимо произвести изменения в настройках PCE. В файле /opt/wildfly/bin/standalone.conf, в следующей строке, указав правильный адрес и при необходимости порт сервера PCS, а также уточнив протокол подключения (HTTP/HTTPS):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
JAVA_OPTS=&amp;quot;$JAVA_OPTS -Dpcservice.endpoint=http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/ws/PayControlServiceV3?wsdl -Duser.language=ru -Dpaycontrol.locale=ru&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После установки нового значения необходимо перезапустить службу wildfly.&lt;br /&gt;
&lt;br /&gt;
== Учёт изменения адреса сервера PC Pusher ==&lt;br /&gt;
&lt;br /&gt;
Для учёта изменения адреса сервера PC Pusher, необходимо, предварительно указав корректные данные (протокол (HTTP/HTTPS), имя или IP сервера, порт, идентификатор системы), выполнить запрос к БД PCS: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_internal_url = &#039;http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/pc-pusher-api/&#039; where systemid=&#039;&amp;lt;SYSTEMID&amp;gt;&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Учёт изменения внешнего адреса сервера PCE ==&lt;br /&gt;
&lt;br /&gt;
{{Предупреждение|Если система была переведена в промышленную эксплуатацию, при смене адреса для доступа мобильных устройств, не рекомендуется выводить из действия предыдущий адрес на протяжении всего срока действия выпущенных ключей пользователя. Иначе мобильное приложение потеряет доступ к серверу PayControl и для восстановления будет необходимо перевыпустить ключ и заново добавить его в приложение пользователя.}}&lt;br /&gt;
Для учёта изменения внешнего адреса сервера PayControl, по которому связываются мобильное приложение с сервером PayControl, необходимо, предварительно указав корректные данные (протокол (HTTP/HTTPS), имя или IP сервера, порт, идентификатор системы), выполнить запрос к БД PCS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_external_url = &#039;http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/PayControl-interaction-rest/&#039; where systemid=&#039;&amp;lt;SYSTEMID&amp;gt;&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B_%D0%BA%D0%BB%D1%8E%D1%87%D0%B0&amp;diff=780</id>
		<title>Параметры ключа</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B_%D0%BA%D0%BB%D1%8E%D1%87%D0%B0&amp;diff=780"/>
		<updated>2023-06-02T14:23:51Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: /* Флаги */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;При создании запроса на генерацию [[Ключевая информация|ключевой информации]] пользователя, могут быть установлены параметры, перечисленные ниже.&lt;br /&gt;
=Описание=&lt;br /&gt;
==Отпечаток устройства==&lt;br /&gt;
&#039;&#039;&#039;withFingerPrint&#039;&#039;&#039; – указывает, осуществлять ли привязку устройства к Пользователю PayControl. В случае наличия в запросе на создание пользователя параметра «флаг привязки пользователя к устройству» со значением «true» при проверке кода подтверждения будет использован отпечаток устройства пользователя. Отпечаток устройства вносится в информацию о пользователе путем вызова метода «Сохранение отпечатка устройства»;&lt;br /&gt;
&lt;br /&gt;
==Сбор событий==&lt;br /&gt;
&#039;&#039;&#039;collectEvent&#039;&#039;&#039; – флаг, указывающий необходимость передачи мобильным приложением информации о событиях и сохранения её сервером в базе данных PayControl;&lt;br /&gt;
===Информация об устройстве===&lt;br /&gt;
&#039;&#039;&#039;collectDeviceInfo&#039;&#039;&#039; – флаг, указывающий необходимость сбора информации об устройстве в составе информации о событии. Учитывается только в случае, если установлен флаг collectEvent;&lt;br /&gt;
====Информация о сим-карте====&lt;br /&gt;
&#039;&#039;&#039;collectDeviceSIMInfo&#039;&#039;&#039; – флаг, указывающий необходимость сбора информации о телефоне (SIM-карте). При включении – мобильное устройство передаёт информацию, относящуюся к телефону и SIM-карте в составе информации об устройстве. Учитывается только если установлен флаг collectDeviceInfo. На Android-устройстве необходимо дополнительное разрешение приложению на доступ к информации о телефоне;&lt;br /&gt;
&lt;br /&gt;
====Информация о местоположении устройства====&lt;br /&gt;
&#039;&#039;&#039;collectDeviceLocation&#039;&#039;&#039; – флаг, указывающий необходимость сбора информации о местоположении устройства. При включении – мобильное устройство передаёт координаты местоположения устройства в составе информации об устройстве. Учитывается только если установлен флаг collectDeviceInfo. На мобильном устройстве необходимо дополнительное разрешение на доступ к геолокации;&lt;br /&gt;
&lt;br /&gt;
==Запрет перерегистрации открытого ключа==&lt;br /&gt;
&#039;&#039;&#039;denyRenewPublicKey&#039;&#039;&#039; – флаг, запрещающий перерегистарцию открытого ключа сервере, если открытый ключ уже был зарегистрирован ранее;&lt;br /&gt;
&lt;br /&gt;
==Параметры сохранения ключевой информации на устройстве==&lt;br /&gt;
===Запрет использования механизмов безопасности ОС===&lt;br /&gt;
&#039;&#039;&#039;denyStoreWithOSProtection&#039;&#039;&#039; – флаг, запрещающий сохранение ключа с использованием механизмов безопасности операционной системы мобильного устройства (TouchID/FaceID, Google Key Store);&lt;br /&gt;
===Требования к паролю===&lt;br /&gt;
Также может быть указан вариант требований к сложности пароля при сохранении ключевой информации на мобильном устройстве, путём задания значения passPolicy. Доступны следующие варианты:&lt;br /&gt;
* «0» – минимум 6 символов, пароль не обязателен;&lt;br /&gt;
* «1» – минимум 6 символов, пароль обязателен;&lt;br /&gt;
* «2» – минимум 8 символов (обязательно использование A-Z и a-z) пароль обязателен;&lt;br /&gt;
* «3» – минимум 8 символов (обязательно использование A-Z, a-z и 0-9) пароль обязателен.&lt;br /&gt;
Если опциональное значение passPolicy не установлено, принимается значение равное «0».&lt;br /&gt;
==Скоринг и автоподпись==&lt;br /&gt;
===Скоринг===&lt;br /&gt;
&#039;&#039;&#039;scoring_enabled&#039;&#039;&#039; - разрешение &amp;quot;скоринга&amp;quot; устройства и поведенческого анализа с помощью дополнительного антифрод-модуля Secure Bank от Group IB. Лицензируется отдельно.&lt;br /&gt;
===Автоподписание===&lt;br /&gt;
&#039;&#039;&#039;autosign_enabled&#039;&#039;&#039; - разрешение автоподписи транзакций на основе результата скоринга устройства и поведенческого анализа. Для автоподписи используется дополнительная асимметричная ключевая пара.&lt;br /&gt;
==Отложенный ввод в действие ключевой информации==&lt;br /&gt;
&#039;&#039;&#039;delayed&#039;&#039;&#039; – флаг отложенного ввода в действие ключа. При его установке ключ, используемый для подтверждения транзакций и проверки кодов аутентификации, не заменяется. Сгенерированный новый ключ помечается как отложенный. Его ввод в действие выполняется одним из следующих способов:&lt;br /&gt;
*	путем вызова метода Ввод отложенного ключа в действие;&lt;br /&gt;
*	путем вызова одного из методов: Сохранение отпечатка устройства, Регистрация открытого ключа, Регистрация устройства для отправки PUSH-уведомлений с кодом аутентификации, сформированным на отложенном ключе.&lt;br /&gt;
Выполнять обновление ключевой информации с флагом отложенного ввода можно неограниченное количество раз. При этом сформированная ранее отложенная ключевая информация будет заменена новой отложенной ключевой информацией.&lt;br /&gt;
При выполнении обновления без данного флага вся отложенная ключевая информация далее считается недействительной и не может быть введена в действие.&lt;br /&gt;
Если значение опционального флага не указано, принимается значение равное «false».&lt;br /&gt;
==Параметры NFC==&lt;br /&gt;
&#039;&#039;&#039;nfc_policy&#039;&#039;&#039; - флаг, который определяет использования NFC на мобильном устройстве. Доступны следующие варианты:&lt;br /&gt;
* «0» – использование NFC-карты, хранащей закрытый ключ, на мобильном устройстве запрещено. Для всех криптографических операций используется ключевая пара генерируемая на самом мобильном устройстве;&lt;br /&gt;
* «1» – использование NFC-карты, хранащей закрытый ключ, на мобильном устройстве опционально. В криптографических операциях может быть использована как ключевая пара, генерируемая на мобильном устройстве, так и ключевой контейнер, хранящийся на NFC-карте;&lt;br /&gt;
* «2» – использование NFC-карты, хранащей закрытый ключ, на мобильном устройстве обязательно. Для всех криптографических операций используется ключевая пара, хранящаяся в контейнере на NFC-карте;&lt;br /&gt;
&lt;br /&gt;
Если опциональное значение nfc_policy не установлено, принимается значение равное «0».&lt;br /&gt;
=Флаги=&lt;br /&gt;
В составе QR-кода, значения передаются в 7-ой строке данных (для версии сервера 3.x) или в параметре &amp;quot;key_flags&amp;quot; (для версии сервера 5 и выше), целым числом. Значения флагов вычисляются с помощью битовой маски.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
KEYFLAG_WITH_FINGERPRINT = (1 &amp;lt;&amp;lt; 0);&lt;br /&gt;
KEYFLAG_COLLECT_EVENTS = (1 &amp;lt;&amp;lt; 1);&lt;br /&gt;
KEYFLAG_COLLECT_DEVICEINFO = (1 &amp;lt;&amp;lt; 2);&lt;br /&gt;
KEYFLAG_COLLECT_SIMINFO = (1 &amp;lt;&amp;lt; 3);&lt;br /&gt;
KEYFLAG_COLLECT_LOCATION = (1 &amp;lt;&amp;lt; 4);&lt;br /&gt;
KEYFLAG_PASS_POLICY_POS = (1 &amp;lt;&amp;lt; 5); // password policy encoded by 2 bits (4 values)&lt;br /&gt;
KEYFLAG_PASS_POLICY_POS = (1 &amp;lt;&amp;lt; 6); // password policy encoded by 2 bits (4 values)&lt;br /&gt;
KEYFLAG_DENY_STORE_WITH_OS_PROTECTION = (1 &amp;lt;&amp;lt; 7);&lt;br /&gt;
KEYFLAG_DENY_RENEW_PUBKEY = (1 &amp;lt;&amp;lt; 8);&lt;br /&gt;
KEYFLAG_SCORING_ENABLED = (1 &amp;lt;&amp;lt; 9);&lt;br /&gt;
KEYFLAG_AUTOSIGN_ENABLED = (1 &amp;lt;&amp;lt; 10);&lt;br /&gt;
KEYFLAG_REMOTE_UPDATE_ENABLED = (1 &amp;lt;&amp;lt; 11);&lt;br /&gt;
KEYFLAG_SERVERSIGNER = (1 &amp;lt;&amp;lt; 12);&lt;br /&gt;
KEYFLAG_NFC_ENABLED_POS = (1 &amp;lt;&amp;lt; 13);&lt;br /&gt;
KEYFLAG_NFC_ENABLED_POS = (1 &amp;lt;&amp;lt; 14);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=Wildfly&amp;diff=779</id>
		<title>Wildfly</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=Wildfly&amp;diff=779"/>
		<updated>2023-05-10T17:18:38Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: /* Установка лимитов потребляемой памяти */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Настройка=&lt;br /&gt;
==Из командной строки==&lt;br /&gt;
Подключение к консоли:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo /opt/wildfly/bin/jboss-cli.sh --connect&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Выполнение команд в неинтерактивном режиме:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo /opt/wildfly/bin/jboss-cli.sh --connect --commands=ls\ deployment&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Настройка PayControl===&lt;br /&gt;
Удаление настроек по умолчанию:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
data-source remove --name=ExampleDS&lt;br /&gt;
/subsystem=ee/service=default-bindings:remove()&lt;br /&gt;
reload&lt;br /&gt;
/subsystem=datasources/jdbc-driver=h2:remove&lt;br /&gt;
/subsystem=undertow/server=default-server/host=default-host/location=\/:remove()&lt;br /&gt;
/subsystem=undertow/configuration=handler:remove()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Добавление драйвера (postgresql) и источников данных:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
module add --name=org.postgresql --resources=/opt/paycontrol/postgresql-42.2.5.jar --dependencies=javax.api,javax.transaction.api,javax.servlet.api&lt;br /&gt;
/subsystem=datasources/jdbc-driver=postgres:add(driver-name=&amp;quot;postgres&amp;quot;,driver-module-name=&amp;quot;org.postgresql&amp;quot;,driver-class-name=org.postgresql.Driver)&lt;br /&gt;
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&lt;br /&gt;
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&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Установка wsdl-host&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/subsystem=webservices:write-attribute\(name=wsdl-host,value=docker.loc\)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление источников данных (разные СУБД)===&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Datasource!!Connection URL&lt;br /&gt;
|-&lt;br /&gt;
|IBM DB2||jdbc:db2://SERVER_NAME:PORT/DATABASE_NAME&lt;br /&gt;
|-&lt;br /&gt;
|MariaDB||jdbc:mariadb://SERVER_NAME:PORT/DATABASE_NAME&lt;br /&gt;
|-&lt;br /&gt;
|Microsoft SQL Server||jdbc:sqlserver://SERVER_NAME:PORT;DatabaseName=DATABASE_NAME&lt;br /&gt;
|-&lt;br /&gt;
|MySQL||jdbc:mysql://SERVER_NAME:PORT/DATABASE_NAME&lt;br /&gt;
|-&lt;br /&gt;
|Oracle||jdbc:oracle:thin:@SERVER_NAME:PORT:ORACLE_SID&lt;br /&gt;
|-&lt;br /&gt;
|PostgreSQL||jdbc:postgresql://SERVER_NAME:PORT/DATABASE_NAME&lt;br /&gt;
|-&lt;br /&gt;
|Sybase||jdbc:sybase:Tds:SERVER_NAME:PORT/DATABASE_NAME&lt;br /&gt;
|}&lt;br /&gt;
==Удаление настроек по умолчанию==&lt;br /&gt;
При конфигурировании Wildfly можно (при [[Перевод в промышленную эксплуатацию|переводе системы в промышленную эксплуатацию]] - рекомендуется) удалить пример источника данных и страницу-приветствие. Для этого в файле standalone.xml необходимо убрать (либо закомментировать) следующие объекты:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;datasource jndi-name=&amp;quot;java:jboss/datasources/ExampleDS&amp;quot; pool-name=&amp;quot;ExampleDS&amp;quot; enabled=&amp;quot;true&amp;quot; use-java-context=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;connection-url&amp;gt;jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE&amp;lt;/connection-url&amp;gt;&lt;br /&gt;
                    &amp;lt;driver&amp;gt;h2&amp;lt;/driver&amp;gt;&lt;br /&gt;
                    &amp;lt;security&amp;gt;&lt;br /&gt;
                        &amp;lt;user-name&amp;gt;sa&amp;lt;/user-name&amp;gt;&lt;br /&gt;
                        &amp;lt;password&amp;gt;sa&amp;lt;/password&amp;gt;&lt;br /&gt;
                    &amp;lt;/security&amp;gt;&lt;br /&gt;
                &amp;lt;/datasource&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;driver name=&amp;quot;h2&amp;quot; module=&amp;quot;com.h2database.h2&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xa-datasource-class&amp;gt;org.h2.jdbcx.JdbcDataSource&amp;lt;/xa-datasource-class&amp;gt;&lt;br /&gt;
                    &amp;lt;/driver&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
             &amp;lt;default-bindings context-service=&amp;quot;java:jboss/ee/concurrency/context/default&amp;quot; datasource=&amp;quot;java:jboss/datasources/ExampleDS&amp;quot; managed-executor-service=&amp;quot;java:jboss/ee/concurrency/executor/default&amp;quot; managed-scheduled-executor-service=&amp;quot;java:jboss/ee/concurrency/scheduler/default&amp;quot; managed-thread-factory=&amp;quot;java:jboss/ee/concurrency/factory/default&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;location name=&amp;quot;/&amp;quot; handler=&amp;quot;welcome-content&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;  &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;handlers&amp;gt;&lt;br /&gt;
                &amp;lt;file name=&amp;quot;welcome-content&amp;quot; path=&amp;quot;${jboss.home.dir}/welcome-content&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/handlers&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Добавление сертификатов корпоративных УЦ==&lt;br /&gt;
java keytool – с его помощью установить корневой сертификат в keystore. Если есть промежуточные, то их тоже.&lt;br /&gt;
&lt;br /&gt;
java keystore password по умолчанию – “changeit”.&lt;br /&gt;
&lt;br /&gt;
Примеры инструкций:&lt;br /&gt;
* https://docs.microsoft.com/ru-ru/java/azure/java-sdk-add-certificate-ca-store?view=azure-java-stable&lt;br /&gt;
* https://www.ibm.com/docs/en/cognos-tm1/10.2.2?topic=ictocyoiatwas-add-certificates-jre-keystore&lt;br /&gt;
* https://connect2id.com/blog/importing-ca-root-cert-into-jvm-trust-store&lt;br /&gt;
* https://www.ibm.com/support/knowledgecenter/en/SSFUEU_6.2.1/com.ibm.swg.ba.cognos.administrators_guide.6.2.1.doc/t_shi_import_the_root_certificate_for_java.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Как минимум в CN сертификата должен быть адрес, по которому происходит обращение к серверу (DNS или IP). Если этого будет недостаточно, тогда добавить в SAN сертификата.&lt;br /&gt;
&lt;br /&gt;
==Включение и конфигурирование [[HTTPS]]==&lt;br /&gt;
===Добавление сертификата===&lt;br /&gt;
Для добавления/обновления сертификата необходимо выполнить следующие действия:&lt;br /&gt;
# Составить цепочку сертификатов.&amp;lt;br&amp;gt;Из файлов сертификатов в формате PEM (Base64) составить цепочку путём соединения в новом файле с расширением crt, например fullchain.crt. Для этого в новый файл с помощью текстового редактора нужно добавить сертификат корневого УЦ, промежуточных, и собственно сертификат сервера.&lt;br /&gt;
# Создать контейнер формата pkcs12:&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;openssl pkcs12 -export -in fullchain.crt -inkey private_key.key -out keycontainer.p12&amp;lt;/syntaxhighlight&amp;gt; при экспорте следует задать пароль &amp;lt;password&amp;gt; для приватного ключа.&lt;br /&gt;
# Создать JKS-контейнер из PKCS12:&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;keytool -importkeystore -srckeystore keycontainer.p12 \&lt;br /&gt;
        -srcstoretype PKCS12 \&lt;br /&gt;
        -destkeystore &amp;lt;container-name&amp;gt;.jks \&lt;br /&gt;
        -deststoretype JKS&amp;lt;/syntaxhighlight&amp;gt; при импорте указываем &amp;lt;password&amp;gt;, при экспорте указываем пароль к контейнеру.&lt;br /&gt;
# Скопировать &amp;lt;container-name&amp;gt;.jks например в /opt/wildfly/standalone/configuration/ (для Linux), либо в C:\wildfly\standalone\configuration\ (для Windows).&lt;br /&gt;
# Имя файла-контейнера (относительный путь от директории &amp;lt;code&amp;gt;configuration&amp;lt;/code&amp;gt;) и пароли указать в файле /opt/wildfly/standalone/configuration/standalone.xml (для Linux), либо в C:\wildfly\standalone\configuration\standalone.xml (для Windows), для WildFly 25 и выше, :&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;tls&amp;gt;&lt;br /&gt;
                &amp;lt;key-stores&amp;gt;&lt;br /&gt;
                    &amp;lt;key-store name=&amp;quot;applicationKS&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;credential-reference clear-text=&amp;quot;ПАРОЛЬ К КОНТЕЙНЕРУ&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;implementation type=&amp;quot;JKS&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;file path=&amp;quot;ИМЯ ФАЙЛА-КОНТЕЙНЕРА.jks&amp;quot; relative-to=&amp;quot;jboss.server.config.dir&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/key-store&amp;gt;&lt;br /&gt;
                &amp;lt;/key-stores&amp;gt;&lt;br /&gt;
                &amp;lt;key-managers&amp;gt;&lt;br /&gt;
                    &amp;lt;key-manager name=&amp;quot;applicationKM&amp;quot; key-store=&amp;quot;applicationKS&amp;quot; generate-self-signed-certificate-host=&amp;quot;localhost&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;credential-reference clear-text=&amp;quot;ПАРОЛЬ К ПРИВАТНОМУ КЛЮЧУ&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/key-manager&amp;gt;&lt;br /&gt;
                &amp;lt;/key-managers&amp;gt;&lt;br /&gt;
                &amp;lt;server-ssl-contexts&amp;gt;&lt;br /&gt;
                    &amp;lt;server-ssl-context name=&amp;quot;applicationSSC&amp;quot; key-manager=&amp;quot;applicationKM&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/server-ssl-contexts&amp;gt;&lt;br /&gt;
            &amp;lt;/tls&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;До версии 25, в объекте keystore (если АЛИАС не был задан, по умолчанию устанавливается значение &amp;quot;1&amp;quot;):&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;security-realm name=&amp;quot;ApplicationRealm&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;server-identities&amp;gt;&lt;br /&gt;
                    &amp;lt;ssl&amp;gt;&lt;br /&gt;
                        &amp;lt;keystore path=&amp;quot;ИМЯ ФАЙЛА-КОНТЕЙНЕРА.jks&amp;quot; relative-to=&amp;quot;jboss.server.config.dir&amp;quot; keystore-password=&amp;quot;ПАРОЛЬ К КОНТЕЙНЕРУ&amp;quot; alias=&amp;quot;АЛИАС&amp;quot; key-password=&amp;quot;ПАРОЛЬ К ПРИВАТНОМУ КЛЮЧУ&amp;quot; generate-self-signed-certificate-host=&amp;quot;localhost&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/ssl&amp;gt;&lt;br /&gt;
                &amp;lt;/server-identities&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Перезапустить сервис WildFly.&lt;br /&gt;
# Проверить подключение:&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;openssl s_client -connect &amp;lt;server-name&amp;gt;:8443&amp;lt;/syntaxhighlight&amp;gt;Verify Result должен быть 0.&lt;br /&gt;
&lt;br /&gt;
===Отключение HTTP порта (8080)===&lt;br /&gt;
{{Предупреждение|Приведённый ниже порядок действий применим для приложений, не публикующих WSDL-схему. Для приложений с WSDL потребуется дополнительная донастройка.}}&lt;br /&gt;
Для того, чтобы на сервере PCIS External отключить доступ к REST-интерфейсу по порту 8080 необходимо в файле &#039;&#039;/opt/wildfly/standalone/configuration/standalone.xml&#039;&#039; (для Linux), либо в &#039;&#039;C:\wildfly\standalone\configuration\standalone.xml&#039;&#039; (для Windows) (перед этим лучше сделать его резервную копию) в блоке &amp;lt;code&amp;gt;&amp;lt;server name=&amp;quot;default-server&amp;quot;&amp;gt;&amp;lt;/code&amp;gt; удалить строку&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;http-listener name=&amp;quot;default&amp;quot; socket-binding=&amp;quot;http&amp;quot; redirect-socket=&amp;quot;https&amp;quot; enable-http2=&amp;quot;true&amp;quot;/&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В блоке &amp;lt;code&amp;gt;&amp;lt;socket-binding-group name=&amp;quot;standard-sockets&amp;quot; default-interface=&amp;quot;public&amp;quot; port-offset=&amp;quot;${jboss.socket.binding.port-offset:0}&amp;quot;&amp;gt;&amp;lt;/code&amp;gt; удалить строку:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;socket-binding name=&amp;quot;http&amp;quot; port=&amp;quot;${jboss.http.port:8080}&amp;quot;/&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Изменить параметр &amp;lt;code&amp;gt;&amp;lt;http-connector name=&amp;quot;http-remoting-connector&amp;quot; connector-ref=&amp;quot;default&amp;quot; security-realm=&amp;quot;ApplicationRealm&amp;quot;/&amp;gt;&amp;lt;/code&amp;gt; следующим образом (изменить значение &amp;lt;code&amp;gt;connector-ref&amp;lt;/code&amp;gt; с &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; на &amp;lt;code&amp;gt;https&amp;lt;/code&amp;gt;):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;http-connector name=&amp;quot;http-remoting-connector&amp;quot; connector-ref=&amp;quot;https&amp;quot; security-realm=&amp;quot;ApplicationRealm&amp;quot;/&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Переключение публикации схемы на HTTPS===&lt;br /&gt;
Для того, чтобы, располагающаяся в WSDL, ссылка на схему была также корректна, необходимо в &amp;lt;code&amp;gt;&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:webservices:2.0&amp;quot;&amp;gt;&amp;lt;/code&amp;gt; добавить (заменив значения wsdl-host и, при необходимости, wsdl-port и wsdl-secure-port на необходимые) следующее:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-host&amp;gt;yoursite.com&amp;lt;/wsdl-host&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-port&amp;gt;8080&amp;lt;/wsdl-port&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-secure-port&amp;gt;8443&amp;lt;/wsdl-secure-port&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-uri-scheme&amp;gt;https&amp;lt;/wsdl-uri-scheme&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Пример результата:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:webservices:2.0&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-host&amp;gt;paycontrol.org&amp;lt;/wsdl-host&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-port&amp;gt;8080&amp;lt;/wsdl-port&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-secure-port&amp;gt;8443&amp;lt;/wsdl-secure-port&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-uri-scheme&amp;gt;https&amp;lt;/wsdl-uri-scheme&amp;gt;&lt;br /&gt;
            &amp;lt;endpoint-config name=&amp;quot;Standard-Endpoint-Config&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;endpoint-config name=&amp;quot;Recording-Endpoint-Config&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;pre-handler-chain name=&amp;quot;recording-handlers&amp;quot; protocol-bindings=&amp;quot;##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;handler name=&amp;quot;RecordingHandler&amp;quot; class=&amp;quot;org.jboss.ws.common.invocation.RecordingServerHandler&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/pre-handler-chain&amp;gt;&lt;br /&gt;
            &amp;lt;/endpoint-config&amp;gt;&lt;br /&gt;
            &amp;lt;client-config name=&amp;quot;Standard-Client-Config&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/subsystem&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Указание определённых стандартов защиты и алгоритмов===&lt;br /&gt;
Для выбора стандарта защиты HTTPS, только, например, TLS 1.2, нужно в &#039;&#039;объект https-listener объекта &amp;lt;nowiki&amp;gt;&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:undertow:X.X&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039; добавить, &#039;&#039;&#039;enabled-protocols=&amp;quot;TLSv1.2&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для выбора определённых криптографических алгоритмов, необходимо их указать в &#039;&#039;объекте https-listener объекта &amp;lt;nowiki&amp;gt;&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:undertow:X.X&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039;. Например, для запрета режимов работы без использования алгоритмов Диффи-Хеллмана, нужно добавить &#039;&#039;&#039;enabled-cipher-suites=&amp;quot;ALL:!kRSA&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:undertow:1.2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;server name=&amp;quot;default-server&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;https-listener name=&amp;quot;https&amp;quot; socket-binding=&amp;quot;https&amp;quot; security-realm=&amp;quot;ApplicationRealm&amp;quot; enable-http2=&amp;quot;true&amp;quot; enabled-cipher-suites=&amp;quot;ALL:!kRSA&amp;quot; enabled-protocols=&amp;quot;TLSv1.2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/server&amp;gt;&lt;br /&gt;
&amp;lt;/subsystem&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://security.stackexchange.com/questions/145855/how-to-enforce-perfect-forward-secrecy-using-jvm-properties&lt;br /&gt;
&lt;br /&gt;
https://www.openssl.org/docs/manmaster/man1/ciphers.html&lt;br /&gt;
&lt;br /&gt;
===Включение дополнительных заголовков===&lt;br /&gt;
Для включения дополнительных HTTP заголовков необходимо в файл&lt;br /&gt;
* Linux:&lt;br /&gt;
*: /opt/wildfly/standalone/configuration/standalone.xml&lt;br /&gt;
* Windows:&lt;br /&gt;
*: C:\wildfly\standalone\configuration\standalone.xml&lt;br /&gt;
# добавить фильтры в раздел &#039;&#039;&amp;lt;nowiki&amp;gt;&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:undertow:X.X&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039; добавив блок (при его отсутствии) &amp;lt;code&amp;gt;&amp;lt;filters&amp;gt;&amp;lt;/filters&amp;gt;&amp;lt;/code&amp;gt; следующего содержания:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;filters&amp;gt;&lt;br /&gt;
                &amp;lt;response-header name=&amp;quot;transport-security&amp;quot; header-name=&amp;quot;Strict-Transport-Security&amp;quot; header-value=&amp;quot;max-age=31536000&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;response-header name=&amp;quot;x-frame-options&amp;quot; header-name=&amp;quot;X-Frame-Options&amp;quot; header-value=&amp;quot;DENY&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;response-header name=&amp;quot;x-content-type-options&amp;quot; header-name=&amp;quot;X-Content-Type-Options&amp;quot; header-value=&amp;quot;nosniff&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;response-header name=&amp;quot;Content-Security-Policy&amp;quot; header-name=&amp;quot;Content-Security-Policy&amp;quot; header-value=&amp;quot;default-src &#039;self&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/filters&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# добавить ссылки на эти фильтры в раздел &#039;&#039;&amp;lt;nowiki&amp;gt;&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:undertow:X.X&amp;quot;&amp;gt; в &amp;lt;server name=&amp;quot;default-server&amp;quot;&amp;gt; в &amp;lt;host name=&amp;quot;default-host&amp;quot; alias=&amp;quot;localhost&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039; включив следующие строки:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;filter-ref name=&amp;quot;transport-security&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;filter-ref name=&amp;quot;x-frame-options&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;filter-ref name=&amp;quot;x-content-type-options&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;filter-ref name=&amp;quot;Content-Security-Policy&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:undertow:11.0&amp;quot; default-server=&amp;quot;default-server&amp;quot; default-virtual-host=&amp;quot;default-host&amp;quot; default-servlet-container=&amp;quot;default&amp;quot; default-security-domain=&amp;quot;other&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;buffer-cache name=&amp;quot;default&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;server name=&amp;quot;default-server&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;http-listener name=&amp;quot;default&amp;quot; socket-binding=&amp;quot;http&amp;quot; redirect-socket=&amp;quot;https&amp;quot; enable-http2=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;https-listener name=&amp;quot;https&amp;quot; socket-binding=&amp;quot;https&amp;quot; security-realm=&amp;quot;ApplicationRealm&amp;quot; enable-http2=&amp;quot;true&amp;quot; enabled-cipher-suites=&amp;quot;ALL:!kRSA&amp;quot; enabled-protocols=&amp;quot;TLSv1.2&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;host name=&amp;quot;default-host&amp;quot; alias=&amp;quot;localhost&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;http-invoker security-realm=&amp;quot;ApplicationRealm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;filter-ref name=&amp;quot;transport-security&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;filter-ref name=&amp;quot;x-frame-options&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;filter-ref name=&amp;quot;x-content-type-options&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;filter-ref name=&amp;quot;Content-Security-Policy&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/host&amp;gt;&lt;br /&gt;
    &amp;lt;/server&amp;gt;&lt;br /&gt;
    &amp;lt;servlet-container name=&amp;quot;default&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;jsp-config/&amp;gt;&lt;br /&gt;
        &amp;lt;websockets/&amp;gt;&lt;br /&gt;
    &amp;lt;/servlet-container&amp;gt;&lt;br /&gt;
    &amp;lt;filters&amp;gt;&lt;br /&gt;
        &amp;lt;response-header name=&amp;quot;transport-security&amp;quot; header-name=&amp;quot;Strict-Transport-Security&amp;quot; header-value=&amp;quot;max-age=31536000&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;response-header name=&amp;quot;x-frame-options&amp;quot; header-name=&amp;quot;X-Frame-Options&amp;quot; header-value=&amp;quot;DENY&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;response-header name=&amp;quot;x-content-type-options&amp;quot; header-name=&amp;quot;X-Content-Type-Options&amp;quot; header-value=&amp;quot;nosniff&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;response-header name=&amp;quot;Content-Security-Policy&amp;quot; header-name=&amp;quot;Content-Security-Policy&amp;quot; header-value=&amp;quot;default-src &#039;self&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/filters&amp;gt;&lt;br /&gt;
&amp;lt;/subsystem&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Изменение номера порта==&lt;br /&gt;
{{Предупреждение|ОС Linux не позволяет сервисам работающим не от имени root использовать порты с номерами ниже 1024. Для использования портов ниже 1024 необходимо выполнять трансляцию, например с помощью netfilter (iptables/firewalld).}}&lt;br /&gt;
Для изменения номера порта необходимо в файле /opt/wildfly/standalone/configuration/standalone.xml (Linux) или в C:\wildfly\standalone\configuration\standalone.xml (Windows), в блоке &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;socket-binding-group name=&amp;quot;standard-sockets&amp;quot; default-interface=&amp;quot;public&amp;quot; port-offset=&amp;quot;${jboss.socket.binding.port-offset:0}&amp;quot;&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; в нужном (для http, либо https) параметре &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;socket-binding name=&amp;quot;http&amp;quot; port=&amp;quot;${jboss.http.port:8080}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;socket-binding name=&amp;quot;https&amp;quot; port=&amp;quot;${jboss.https.port:8443}&amp;quot;/&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; изменить номер используемого порта.&lt;br /&gt;
&lt;br /&gt;
После изменения номера порта, службу WildFly необходимо перезапустить.&lt;br /&gt;
&lt;br /&gt;
При использовании «сервером» стандартных портов (80 для HTTP или 443 для HTTPS), при установке параметров настроек «клиента» для подключения к «серверу», номер порта в адресе дополнительно указывать не рекомендуется во избежании проблем, т.к. в этих случаях, согласно RFC2616 используется порт по умолчанию. При дополнительном указании в адресе порта по умолчанию бывали случаи возникновения проблем подключения.&lt;br /&gt;
&lt;br /&gt;
Приведённые ниже примеры описаны для протокола HTTP. При использовании HTTPS, необходимо также скорректировать название используемого протокола в адресе подключения.&lt;br /&gt;
===Изменение порта PCS===&lt;br /&gt;
При изменении порта для подключения к PCS, необходимо:&lt;br /&gt;
* установить новый порт для обращения к PC в настройках [[Прикладная система|прикладной системы]];&lt;br /&gt;
* изменить номер порта в настройках [[Сервер PayControl|PCIS External]].&lt;br /&gt;
Для изменения номера порта для обращения к PCS, в настройках PCIS External в файле /opt/wildfly/bin/standalone.conf (Linux) или C:\opt\wildfly\bin\standalone.conf.bat (Windows), в строке&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;JAVA_OPTS=&amp;quot;$JAVA_OPTS -Dpcservice.endpoint=http://localhost:8080/ws/PayControlServiceV3?wsdl -Duser.language=ru -Dpaycontrol.locale=ru&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
в параметре -Dpcservice.endpoint=http://&amp;lt;HOSTNAME&amp;gt;:&amp;lt;PORT&amp;gt;/ws/PayControlServiceV3?wsdl установить новое значение &amp;lt;PORT&amp;gt;.&lt;br /&gt;
===Изменение порта PCIS Internal===&lt;br /&gt;
Для изменения порта для подключения к [[Сервер PayControl|PCIS Internal]] необходимо в БД PCS выполнить следующий запрос:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_internal_url=&#039;http://&amp;lt;HOSTNASME&amp;gt;:&amp;lt;PORT&amp;gt;/wsis/PayControlInteractionService?wsdl&#039; where systemid=&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
где&lt;br /&gt;
* &amp;lt;HOSTNASME&amp;gt; - имя хоста PCIS Internal;&lt;br /&gt;
* &amp;lt;PORT&amp;gt; новое значение порта;&lt;br /&gt;
* XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - UUID идентификатор прикладной системы.&lt;br /&gt;
&lt;br /&gt;
Допускается выполнять запрос к БД PCS на обновление адреса PCIS Internal без указания systemid, в случае, если подключена только одна прикладная система, или необходимо обновить адрес PCIS Internal для всех прикладных систем.&lt;br /&gt;
&lt;br /&gt;
После изменения номера порта, службу wildfly необходимо перезапустить.&lt;br /&gt;
===Изменение порта PCIS External===&lt;br /&gt;
{{Предупреждение|При изменении порта PCIS External мобильное приложение потеряет возможность подключения к серверу PayControl до тех пор, пока пользователю мобильного приложения не будет перевыпущен ключ с новым адресом подключения к серверу.}}&lt;br /&gt;
&lt;br /&gt;
{{Предупреждение|Изменение порта, на котором сервер PCIS External ожидает подключения не всегда ведёт к изменению порта назначения, который используется мобильным приложением для доступа к серверу PayControl. Такая ситуация, например, может возникнуть, если перед сервером PCIS External со стороны сети Интернет установлено оборудование/ПО, выполняющее трансляцию сетевых портов.}}&lt;br /&gt;
При изменении порта PCIS External необходимо в БД PCS выполнить следующий запрос:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_external_url=&#039;http://&amp;lt;HOSTNASME&amp;gt;:&amp;lt;PORT&amp;gt;/PayControl-interaction-rest/&#039; where systemid=&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
где&lt;br /&gt;
* &amp;lt;HOSTNASME&amp;gt; - имя хоста PCIS External, используемое мобильными устройствами для доступа к серверу PayControl;&lt;br /&gt;
* &amp;lt;PORT&amp;gt; новое значение порта;&lt;br /&gt;
* XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - UUID идентификатор прикладной системы.&lt;br /&gt;
&lt;br /&gt;
Допускается выполнять запрос к БД PCS на обновление адреса PCIS External без указания systemid, в случае, если подключена только одна прикладная система, или необходимо обновить адрес PCIS External для всех прикладных систем.&lt;br /&gt;
&lt;br /&gt;
После изменения номера порта, службу wildfly необходимо перезапустить.&lt;br /&gt;
== Валидация подключения ==&lt;br /&gt;
=== PostgreSQL ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;validation&amp;gt;&lt;br /&gt;
      &amp;lt;valid-connection-checker class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker&amp;quot;&amp;gt;&amp;lt;/valid-connection-checker&amp;gt;&lt;br /&gt;
      &amp;lt;exception-sorter class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter&amp;quot;&amp;gt;&amp;lt;/exception-sorter&amp;gt;&lt;br /&gt;
    &amp;lt;/validation&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Oracle ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;validation&amp;gt;&lt;br /&gt;
        &amp;lt;check-valid-connection-sql&amp;gt;select 1 from dual&amp;lt;/check-valid-connection-sql&amp;gt;&lt;br /&gt;
        &amp;lt;validate-on-match&amp;gt;false&amp;lt;/validate-on-match&amp;gt;&lt;br /&gt;
        &amp;lt;background-validation&amp;gt;true&amp;lt;/background-validation&amp;gt;&lt;br /&gt;
        &amp;lt;background-validation-millis&amp;gt;10000&amp;lt;/background-validation-millis&amp;gt;&lt;br /&gt;
    &amp;lt;/validation&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== MS SQL ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;validation&amp;gt;&lt;br /&gt;
      &amp;lt;valid-connection-checker class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker&amp;quot;&amp;gt;&amp;lt;/valid-connection-checker&amp;gt;&lt;br /&gt;
    &amp;lt;/validation&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Установка лимитов потребляемой памяти ==&lt;br /&gt;
&lt;br /&gt;
Лимиты доступа к памяти необходимо выбирать исходя из нагрузки и ресурсов сервера.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
JAVA_OPTS=-Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Контроль =&lt;br /&gt;
&lt;br /&gt;
== Потребление ресурсов ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
/opt/jboss/wildfly/bin/jboss-cli.sh --connect&lt;br /&gt;
/core-service=platform-mbean/type=memory:read-resource(recursive=true,proxies=true,include-runtime=true,include-defaults=true)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Вывод:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;outcome&amp;quot; =&amp;gt; &amp;quot;success&amp;quot;,&lt;br /&gt;
    &amp;quot;result&amp;quot; =&amp;gt; {&lt;br /&gt;
        &amp;quot;heap-memory-usage&amp;quot; =&amp;gt; {&lt;br /&gt;
            &amp;quot;init&amp;quot; =&amp;gt; 641728512L,&lt;br /&gt;
            &amp;quot;used&amp;quot; =&amp;gt; 1746929168L,&lt;br /&gt;
            &amp;quot;committed&amp;quot; =&amp;gt; 4097835008L,&lt;br /&gt;
            &amp;quot;max&amp;quot; =&amp;gt; 10257170432L&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;non-heap-memory-usage&amp;quot; =&amp;gt; {&lt;br /&gt;
            &amp;quot;init&amp;quot; =&amp;gt; 7667712L,&lt;br /&gt;
            &amp;quot;used&amp;quot; =&amp;gt; 331419120L,&lt;br /&gt;
            &amp;quot;committed&amp;quot; =&amp;gt; 357740544L,&lt;br /&gt;
            &amp;quot;max&amp;quot; =&amp;gt; -1L&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;object-name&amp;quot; =&amp;gt; &amp;quot;java.lang:type=Memory&amp;quot;,&lt;br /&gt;
        &amp;quot;object-pending-finalization-count&amp;quot; =&amp;gt; 0,&lt;br /&gt;
        &amp;quot;verbose&amp;quot; =&amp;gt; false&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Вывод параметров конфигурации в журнал при старте ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
JAVA_OPTS=-XshowSettings:all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Журналирование ==&lt;br /&gt;
&lt;br /&gt;
=== Доступ к данным журнала ===&lt;br /&gt;
&lt;br /&gt;
Журнал работы сервера PayControl записываются общий лог функционирования Wildfly.&lt;br /&gt;
&lt;br /&gt;
Файлы журналов за текущий день доступны по следующему пути:&lt;br /&gt;
* Linux:&lt;br /&gt;
*: /opt/wildfly/standalone/log/server.log&lt;br /&gt;
* Windows:&lt;br /&gt;
*: C:\wildfly\standalone\log\server.log&lt;br /&gt;
Для просмотра журнала за другие дни, нужно добавить к имени файла требуемую дату в формате server.log.YYYY-MM-DD&lt;br /&gt;
&lt;br /&gt;
=== Включение журналирования SOAP-вызовов ===&lt;br /&gt;
&lt;br /&gt;
Для включения расширенного логирования необходимо:&lt;br /&gt;
# Остановить службу wildfly.&lt;br /&gt;
# Добавить после блока &amp;lt;extensions&amp;gt; ... &amp;lt;/extensions&amp;gt; в файл&lt;br /&gt;
#* Linux:&lt;br /&gt;
#*: /opt/wildfly/standalone/configuration/standalone.xml&lt;br /&gt;
#* Windows:&lt;br /&gt;
#*: C:\wildfly\standalone\configuration\standalone.xml&lt;br /&gt;
#: следующий блок:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;system-properties&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;org.apache.cxf.logging.enabled&amp;quot; value=&amp;quot;pretty&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/system-properties&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Запустить службу wildfly.&lt;br /&gt;
&lt;br /&gt;
=== Направление логов Wildfly в Kafka ===&lt;br /&gt;
&lt;br /&gt;
Исходник https://developer.jboss.org/docs/DOC-56423. Основное отличие - добавление &amp;lt;code&amp;gt;&amp;lt;module name=&amp;quot;com.fasterxml.jackson.core.jackson-databind&amp;quot;/&amp;gt;&amp;lt;/code&amp;gt; в зависимости модуля &#039;&#039;org.apache.kafka.clients&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Модули ====&lt;br /&gt;
&lt;br /&gt;
Файлы модулей можно загрузить с https://mvnrepository.com/&lt;br /&gt;
&lt;br /&gt;
===== org.apache.kafka.clients =====&lt;br /&gt;
&lt;br /&gt;
Создать файл &amp;lt;code&amp;gt;/opt/wildfly/modules/system/layers/base/org/apache/kafka/clients/main/module.xml&amp;lt;/code&amp;gt; с содержанием&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;module name=&amp;quot;org.apache.kafka.clients&amp;quot; xmlns=&amp;quot;urn:jboss:module:1.8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;resources&amp;gt;&lt;br /&gt;
        &amp;lt;resource-root path=&amp;quot;kafka-clients-2.6.0.jar&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;resource-root path=&amp;quot;snappy-java-1.1.8.2.jar&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;resource-root path=&amp;quot;lz4-java-1.7.1.jar&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/resources&amp;gt;&lt;br /&gt;
    &amp;lt;dependencies&amp;gt;&lt;br /&gt;
        &amp;lt;module name=&amp;quot;javax.api&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;module name=&amp;quot;org.slf4j&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;module name=&amp;quot;com.fasterxml.jackson.core.jackson-databind&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
и добавить в директорию указанные в блоке &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt; файлы.&lt;br /&gt;
&lt;br /&gt;
===== org.apache.kafka.log4jappender =====&lt;br /&gt;
&lt;br /&gt;
Создать файл &amp;lt;code&amp;gt;/opt/wildfly/modules/system/layers/base/org/apache/kafka/log4jappender/main/module.xml&amp;lt;/code&amp;gt; с содержанием&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;module name=&amp;quot;org.apache.kafka.log4jappender&amp;quot; xmlns=&amp;quot;urn:jboss:module:1.8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;resources&amp;gt;&lt;br /&gt;
        &amp;lt;resource-root path=&amp;quot;kafka-log4j-appender-2.6.0.jar&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;resource-root path=&amp;quot;slf4j-log4j12-1.7.30.jar&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/resources&amp;gt;&lt;br /&gt;
    &amp;lt;dependencies&amp;gt;&lt;br /&gt;
        &amp;lt;module name=&amp;quot;org.slf4j&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;module name=&amp;quot;org.apache.kafka.clients&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;module name=&amp;quot;org.jboss.log4j.logmanager&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
и добавить в директорию указанные в блоке &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt; файлы.&lt;br /&gt;
&lt;br /&gt;
===== org.apache.log4j =====&lt;br /&gt;
&lt;br /&gt;
Добавить модуль log4jappender в качестве зависимости в существующий org.apache.log4j модуль:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;module name=&amp;quot;org.apache.log4j&amp;quot; xmlns=&amp;quot;urn:jboss:module:1.6&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependencies&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;module name=&amp;quot;org.apache.kafka.log4jappender&amp;quot; export=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== org.jboss.as.standalone =====&lt;br /&gt;
&lt;br /&gt;
Указать в имеющемся модуле org.jboss.as.standalone в качестве зависимости модуль org.apache.kafka.clients.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;module name=&amp;quot;org.jboss.as.standalone&amp;quot; xmlns=&amp;quot;urn:jboss:module:1.6&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependencies&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;module name=&amp;quot;org.apache.kafka.clients&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Хэндлеры ====&lt;br /&gt;
&lt;br /&gt;
Необходимо добавить перечисленные ниже хэндлеры в файл standalone.xml в блок &amp;lt;code&amp;gt;&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:logging:8.0&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== kafka =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;custom-handler name=&amp;quot;kafka&amp;quot; class=&amp;quot;org.apache.kafka.log4jappender.KafkaLog4jAppender&amp;quot; module=&amp;quot;org.apache.log4j&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;level name=&amp;quot;INFO&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;formatter&amp;gt;&lt;br /&gt;
                    &amp;lt;named-formatter name=&amp;quot;PATTERN&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/formatter&amp;gt;&lt;br /&gt;
                &amp;lt;properties&amp;gt;&lt;br /&gt;
                    &amp;lt;property name=&amp;quot;brokerList&amp;quot; value=&amp;quot;localhost:9092&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;property name=&amp;quot;topic&amp;quot; value=&amp;quot;out-topic&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/properties&amp;gt;&lt;br /&gt;
            &amp;lt;/custom-handler&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== async-kafka-wrapper =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;async-handler name=&amp;quot;async-kafka-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;level name=&amp;quot;ALL&amp;quot;/&amp;gt; &lt;br /&gt;
                &amp;lt;queue-length value=&amp;quot;1024&amp;quot;/&amp;gt; &lt;br /&gt;
                &amp;lt;overflow-action value=&amp;quot;block&amp;quot;/&amp;gt; &lt;br /&gt;
                &amp;lt;subhandlers&amp;gt; &lt;br /&gt;
                    &amp;lt;handler name=&amp;quot;kafka&amp;quot;/&amp;gt; &lt;br /&gt;
                &amp;lt;/subhandlers&amp;gt; &lt;br /&gt;
            &amp;lt;/async-handler&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Включение хэндлера =====&lt;br /&gt;
&lt;br /&gt;
В блок &amp;lt;code&amp;gt;&amp;lt;handlers&amp;gt;&amp;lt;/code&amp;gt; добавить &amp;lt;code&amp;gt;&amp;lt;handler name=&amp;quot;async-kafka-wrapper&amp;quot;/&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Проблемы и способы их устранения =&lt;br /&gt;
&lt;br /&gt;
== Очень медленный старт через standalone.sh (каждый этап скрипта запуска - с большими задержками). Система отправляет сигнал на остановку сервиса ==&lt;br /&gt;
&lt;br /&gt;
Вероятная проблема - неверные настройки DNS сервера.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Решение&#039;&#039;&#039;:Необходимо скорректировать настройки DNS.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Проблема обнаружилась 2018-07-27 при развёртывании у заказчика.&#039;&#039; [[Участник:A.bursakov|A.bursakov]] ([[Обсуждение участника:A.bursakov|обсуждение]]) 19:56, 1 августа 2018 (MSK)&lt;br /&gt;
==Не происходит «биндинг» IP-адреса адаптера==&lt;br /&gt;
Вероятная проблема - отсутствие PTR-записи на DNS-сервере, или неправильная работа службы DNS.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Решение&#039;&#039;&#039;: Добавить в файл opt/wildfly/bin/standalone.conf (Linux) или C:\opt\wildfly\bin\standalone.conf.bat (Windows), в переменную JAVA_OPTS параметр -Djboss.bind.address=0.0.0.0&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Проблема проявилась на тестовом Windows-сервере&#039;&#039; [[Участник:A.bursakov|A.bursakov]] ([[Обсуждение участника:A.bursakov|обсуждение]]) 19:56, 1 августа 2018 (MSK)&lt;br /&gt;
&lt;br /&gt;
== Частое появление WARNING в логе ==&lt;br /&gt;
&lt;br /&gt;
Предупреждения в логе вида:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
Caused by: com.ctc.wstx.exc.WstxIOException: UT010029: Stream is closed&lt;br /&gt;
Caused by: java.io.IOException: UT010029: Stream is closed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
Caused by: java.io.IOException: Broken pipe&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Могут быть вызваны системой мониторинга, которая для проверки того, что сервер доступен, устанавливает соединение и обрывает его получив лишь только header.&lt;br /&gt;
&lt;br /&gt;
Для отключения предупреждений о непредвиденном закрытии соединения необходимо в файл /opt/wildfly/standalone/configuration/standalone.xml в блок &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;profile&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:logging:X.X&amp;quot;&amp;gt;&lt;br /&gt;
       ... &lt;br /&gt;
    &amp;lt;/subsystem&amp;gt;&lt;br /&gt;
&amp;lt;/profile&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; добавить:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- to prevent warnings on unsuspicious connection close --&amp;gt;&lt;br /&gt;
&amp;lt;logger category=&amp;quot;org.apache.cxf.phase.PhaseInterceptorChain&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;level name=&amp;quot;ERROR&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/logger&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==INFO: Disabling contextual LOB creation as createClob() method threw error==&lt;br /&gt;
Иногда смущает появление в журнале события, из-за присутствия в его составе слова &amp;quot;error&amp;quot;:&lt;br /&gt;
    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 &lt;br /&gt;
Для отключения этого сообщения необходимо установить &amp;lt;code&amp;gt;hibernate.temp.use_jdbc_metadata_defaults=false&amp;lt;/code&amp;gt;&lt;br /&gt;
в файл persistence.xml, располагающийся внутри модуля сервера следующим образом:&lt;br /&gt;
        &amp;lt;properties&amp;gt;&lt;br /&gt;
            ...&lt;br /&gt;
            &amp;lt;property name=&amp;quot;hibernate.temp.use_jdbc_metadata_defaults&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
            ...&lt;br /&gt;
        &amp;lt;/properties&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Wildfly не стартует как служба и нет логов ==&lt;br /&gt;
Возможные проблемы:&lt;br /&gt;
* Некорректные права на директории/файлы в /opt/wildfly.&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;chown -RHv wildfly:wildfly /opt/wildfly&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Проблемы с определением необходимой Java. Для восстановления необходимо выполнить &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;sudo update-alternatives --config java&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Серверная часть]]&lt;br /&gt;
[[Категория:Возможные проблемы]]&lt;br /&gt;
[[Категория:Отладка]]&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%92%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%84%D0%BE%D1%80%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B8%D0%BC%D0%B8%D1%82%D0%BE%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8&amp;diff=754</id>
		<title>Включение формирования имитовставки</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%92%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%84%D0%BE%D1%80%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B8%D0%BC%D0%B8%D1%82%D0%BE%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8&amp;diff=754"/>
		<updated>2023-04-24T13:17:00Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Значение имитовставки будет возвращаться в коллбэке и информации о подтверждённой транзакции в HEX-кодировке в поле &amp;lt;code&amp;gt;gost_imit&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для включения необходимо:&lt;br /&gt;
&lt;br /&gt;
* обновить модули сервера PC,&lt;br /&gt;
* модифицировать окружение сервера PC,&lt;br /&gt;
* включить формирование имитовставки в PC.&lt;br /&gt;
&lt;br /&gt;
= Обновление модулей сервера PC =&lt;br /&gt;
&lt;br /&gt;
Поддержка формирования имитовставки добавлена с версий &#039;&#039;3.9.х&#039;&#039; и &#039;&#039;5.5.х&#039;&#039;. Необходимо обновить модули сервера до версий не ниже указанных. Перед обновлением серверных компонентов необходимо убедиться, что конечные пользователи используют мобильные приложения, в которых версия SDK в первых двух разрядах не ниже версии сервера (например, при обновлении сервера на 5.5, версии SDK мобильных приложений должны быть не ниже 5.5).&lt;br /&gt;
&lt;br /&gt;
= Модификация окружения сервера PC =&lt;br /&gt;
&lt;br /&gt;
== Docker ==&lt;br /&gt;
&lt;br /&gt;
Необходимо загрузить и использовать свежий [https://repo.paycontrol.org/server/doc/latest/pc-install-guide/ru/#образы образ] (не старше чем от 08 декабря 2022 г.).&lt;br /&gt;
&lt;br /&gt;
== ОС ==&lt;br /&gt;
&lt;br /&gt;
=== Установка модуля КриптоПро JCP ===&lt;br /&gt;
&lt;br /&gt;
==== Добавление модуля в WildFly ====&lt;br /&gt;
&lt;br /&gt;
Можно установить двумя способами:&lt;br /&gt;
* путём копирования загруженных файлов модуля и добавления описания модуля в файл конфигурации WildFly&lt;br /&gt;
* с помощью &#039;&#039;jboss-cli&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Имя модуля - &#039;&#039;&#039;ru.cryptopro.jcp&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Файлы модуля доступны по ссылке https://repo.paycontrol.org/cdn/artefacts/wildfly/wf-module-ru.cryptoro.jcp.zip&lt;br /&gt;
&lt;br /&gt;
{{Уведомление|При неправильной установке модуля и конфигурации области его видимости подтверждение транзакций будет завершаться с ошибкой.}}&lt;br /&gt;
&lt;br /&gt;
===== Путём ручного копирования =====&lt;br /&gt;
&lt;br /&gt;
* Скопировать файлы из загруженного архива в &#039;&#039;wildfly/modules/ru/cryptopro/jcp/main&#039;&#039;&lt;br /&gt;
* В файл &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;wildfly/standalone/configuration/standalone.xml&amp;lt;/syntaxhighlight&amp;gt;в тег&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;subsystem xmlns=&amp;quot;urn:jboss:domain:ee:[version]&amp;lt;/syntaxhighlight&amp;gt; нужно добавить глобальную область видимости этого модуля путём добавления&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;global-modules&amp;gt;&lt;br /&gt;
   &amp;lt;module name=&amp;quot;ru.cryptopro.jcp&amp;quot; slot=&amp;quot;main&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/global-modules&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Пример секции:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:ee:6.0&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;global-modules&amp;gt;&lt;br /&gt;
		&amp;lt;module name=&amp;quot;ru.cryptopro.jcp&amp;quot; slot=&amp;quot;main&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/global-modules&amp;gt;&lt;br /&gt;
	...&lt;br /&gt;
&amp;lt;/subsystem&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание временной директории ===&lt;br /&gt;
&lt;br /&gt;
Необходимо создать &amp;quot;временную&amp;quot; директорию &#039;&#039;/var/opt/cprocsp/tmp&#039;&#039; с правом сервиса Wildfly на запись в неё.&lt;br /&gt;
&lt;br /&gt;
= Включение формирования имитовставки в PC =&lt;br /&gt;
&lt;br /&gt;
В таблицу &#039;&#039;pc_sys_property&#039;&#039; внести настройку&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
-[ RECORD 1 ]-+-------------------&lt;br /&gt;
setting_id    | ...&lt;br /&gt;
setting_name  | GOST_IMIT_PROVIDER&lt;br /&gt;
setting_value | CryptoPro JCP 2.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** Postgresql:&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
insert into pc_sys_property (setting_id, setting_name, setting_value) values (nextval(&#039;pc_setting_seq&#039;), &#039;GOST_IMIT_PROVIDER&#039;, &#039;CryptoPro JCP 2.0&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** Oracle:&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
insert into pc_sys_property values (PC_SETTING_SEQ.NEXTVAL, &#039;GOST_IMIT_PROVIDER&#039;, &#039;CryptoPro JCP 2.0&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** MSSQL:&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
insert into pc_sys_property values (NEXT VALUE FOR PC_SETTING_SEQ, &#039;GOST_IMIT_PROVIDER&#039;, &#039;CryptoPro JCP 2.0&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:A.bursakov&amp;diff=753</id>
		<title>Участник:A.bursakov</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:A.bursakov&amp;diff=753"/>
		<updated>2023-04-20T17:45:39Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Антон Бурсаков&lt;br /&gt;
&lt;br /&gt;
Менеджер по продуктам компании [https://safe-tech.ru/ SafeTech].&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=Wildfly&amp;diff=752</id>
		<title>Wildfly</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=Wildfly&amp;diff=752"/>
		<updated>2023-04-19T13:37:30Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Настройка=&lt;br /&gt;
==Из командной строки==&lt;br /&gt;
Подключение к консоли:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo /opt/wildfly/bin/jboss-cli.sh --connect&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Выполнение команд в неинтерактивном режиме:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo /opt/wildfly/bin/jboss-cli.sh --connect --commands=ls\ deployment&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Настройка PayControl===&lt;br /&gt;
Удаление настроек по умолчанию:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
data-source remove --name=ExampleDS&lt;br /&gt;
/subsystem=ee/service=default-bindings:remove()&lt;br /&gt;
reload&lt;br /&gt;
/subsystem=datasources/jdbc-driver=h2:remove&lt;br /&gt;
/subsystem=undertow/server=default-server/host=default-host/location=\/:remove()&lt;br /&gt;
/subsystem=undertow/configuration=handler:remove()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Добавление драйвера (postgresql) и источников данных:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
module add --name=org.postgresql --resources=/opt/paycontrol/postgresql-42.2.5.jar --dependencies=javax.api,javax.transaction.api,javax.servlet.api&lt;br /&gt;
/subsystem=datasources/jdbc-driver=postgres:add(driver-name=&amp;quot;postgres&amp;quot;,driver-module-name=&amp;quot;org.postgresql&amp;quot;,driver-class-name=org.postgresql.Driver)&lt;br /&gt;
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&lt;br /&gt;
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&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Установка wsdl-host&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/subsystem=webservices:write-attribute\(name=wsdl-host,value=docker.loc\)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление источников данных (разные СУБД)===&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Datasource!!Connection URL&lt;br /&gt;
|-&lt;br /&gt;
|IBM DB2||jdbc:db2://SERVER_NAME:PORT/DATABASE_NAME&lt;br /&gt;
|-&lt;br /&gt;
|MariaDB||jdbc:mariadb://SERVER_NAME:PORT/DATABASE_NAME&lt;br /&gt;
|-&lt;br /&gt;
|Microsoft SQL Server||jdbc:sqlserver://SERVER_NAME:PORT;DatabaseName=DATABASE_NAME&lt;br /&gt;
|-&lt;br /&gt;
|MySQL||jdbc:mysql://SERVER_NAME:PORT/DATABASE_NAME&lt;br /&gt;
|-&lt;br /&gt;
|Oracle||jdbc:oracle:thin:@SERVER_NAME:PORT:ORACLE_SID&lt;br /&gt;
|-&lt;br /&gt;
|PostgreSQL||jdbc:postgresql://SERVER_NAME:PORT/DATABASE_NAME&lt;br /&gt;
|-&lt;br /&gt;
|Sybase||jdbc:sybase:Tds:SERVER_NAME:PORT/DATABASE_NAME&lt;br /&gt;
|}&lt;br /&gt;
==Удаление настроек по умолчанию==&lt;br /&gt;
При конфигурировании Wildfly можно (при [[Перевод в промышленную эксплуатацию|переводе системы в промышленную эксплуатацию]] - рекомендуется) удалить пример источника данных и страницу-приветствие. Для этого в файле standalone.xml необходимо убрать (либо закомментировать) следующие объекты:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;datasource jndi-name=&amp;quot;java:jboss/datasources/ExampleDS&amp;quot; pool-name=&amp;quot;ExampleDS&amp;quot; enabled=&amp;quot;true&amp;quot; use-java-context=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;connection-url&amp;gt;jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE&amp;lt;/connection-url&amp;gt;&lt;br /&gt;
                    &amp;lt;driver&amp;gt;h2&amp;lt;/driver&amp;gt;&lt;br /&gt;
                    &amp;lt;security&amp;gt;&lt;br /&gt;
                        &amp;lt;user-name&amp;gt;sa&amp;lt;/user-name&amp;gt;&lt;br /&gt;
                        &amp;lt;password&amp;gt;sa&amp;lt;/password&amp;gt;&lt;br /&gt;
                    &amp;lt;/security&amp;gt;&lt;br /&gt;
                &amp;lt;/datasource&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;driver name=&amp;quot;h2&amp;quot; module=&amp;quot;com.h2database.h2&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xa-datasource-class&amp;gt;org.h2.jdbcx.JdbcDataSource&amp;lt;/xa-datasource-class&amp;gt;&lt;br /&gt;
                    &amp;lt;/driver&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
             &amp;lt;default-bindings context-service=&amp;quot;java:jboss/ee/concurrency/context/default&amp;quot; datasource=&amp;quot;java:jboss/datasources/ExampleDS&amp;quot; managed-executor-service=&amp;quot;java:jboss/ee/concurrency/executor/default&amp;quot; managed-scheduled-executor-service=&amp;quot;java:jboss/ee/concurrency/scheduler/default&amp;quot; managed-thread-factory=&amp;quot;java:jboss/ee/concurrency/factory/default&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;location name=&amp;quot;/&amp;quot; handler=&amp;quot;welcome-content&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;  &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;handlers&amp;gt;&lt;br /&gt;
                &amp;lt;file name=&amp;quot;welcome-content&amp;quot; path=&amp;quot;${jboss.home.dir}/welcome-content&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/handlers&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Добавление сертификатов корпоративных УЦ==&lt;br /&gt;
java keytool – с его помощью установить корневой сертификат в keystore. Если есть промежуточные, то их тоже.&lt;br /&gt;
&lt;br /&gt;
java keystore password по умолчанию – “changeit”.&lt;br /&gt;
&lt;br /&gt;
Примеры инструкций:&lt;br /&gt;
* https://docs.microsoft.com/ru-ru/java/azure/java-sdk-add-certificate-ca-store?view=azure-java-stable&lt;br /&gt;
* https://www.ibm.com/docs/en/cognos-tm1/10.2.2?topic=ictocyoiatwas-add-certificates-jre-keystore&lt;br /&gt;
* https://connect2id.com/blog/importing-ca-root-cert-into-jvm-trust-store&lt;br /&gt;
* https://www.ibm.com/support/knowledgecenter/en/SSFUEU_6.2.1/com.ibm.swg.ba.cognos.administrators_guide.6.2.1.doc/t_shi_import_the_root_certificate_for_java.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Как минимум в CN сертификата должен быть адрес, по которому происходит обращение к серверу (DNS или IP). Если этого будет недостаточно, тогда добавить в SAN сертификата.&lt;br /&gt;
&lt;br /&gt;
==Включение и конфигурирование [[HTTPS]]==&lt;br /&gt;
===Добавление сертификата===&lt;br /&gt;
Для добавления/обновления сертификата необходимо выполнить следующие действия:&lt;br /&gt;
# Составить цепочку сертификатов.&amp;lt;br&amp;gt;Из файлов сертификатов в формате PEM (Base64) составить цепочку путём соединения в новом файле с расширением crt, например fullchain.crt. Для этого в новый файл с помощью текстового редактора нужно добавить сертификат корневого УЦ, промежуточных, и собственно сертификат сервера.&lt;br /&gt;
# Создать контейнер формата pkcs12:&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;openssl pkcs12 -export -in fullchain.crt -inkey private_key.key -out keycontainer.p12&amp;lt;/syntaxhighlight&amp;gt; при экспорте следует задать пароль &amp;lt;password&amp;gt; для приватного ключа.&lt;br /&gt;
# Создать JKS-контейнер из PKCS12:&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;keytool -importkeystore -srckeystore keycontainer.p12 \&lt;br /&gt;
        -srcstoretype PKCS12 \&lt;br /&gt;
        -destkeystore &amp;lt;container-name&amp;gt;.jks \&lt;br /&gt;
        -deststoretype JKS&amp;lt;/syntaxhighlight&amp;gt; при импорте указываем &amp;lt;password&amp;gt;, при экспорте указываем пароль к контейнеру.&lt;br /&gt;
# Скопировать &amp;lt;container-name&amp;gt;.jks например в /opt/wildfly/standalone/configuration/ (для Linux), либо в C:\wildfly\standalone\configuration\ (для Windows).&lt;br /&gt;
# Имя файла-контейнера (относительный путь от директории &amp;lt;code&amp;gt;configuration&amp;lt;/code&amp;gt;) и пароли указать в файле /opt/wildfly/standalone/configuration/standalone.xml (для Linux), либо в C:\wildfly\standalone\configuration\standalone.xml (для Windows), для WildFly 25 и выше, :&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;tls&amp;gt;&lt;br /&gt;
                &amp;lt;key-stores&amp;gt;&lt;br /&gt;
                    &amp;lt;key-store name=&amp;quot;applicationKS&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;credential-reference clear-text=&amp;quot;ПАРОЛЬ К КОНТЕЙНЕРУ&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;implementation type=&amp;quot;JKS&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;file path=&amp;quot;ИМЯ ФАЙЛА-КОНТЕЙНЕРА.jks&amp;quot; relative-to=&amp;quot;jboss.server.config.dir&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/key-store&amp;gt;&lt;br /&gt;
                &amp;lt;/key-stores&amp;gt;&lt;br /&gt;
                &amp;lt;key-managers&amp;gt;&lt;br /&gt;
                    &amp;lt;key-manager name=&amp;quot;applicationKM&amp;quot; key-store=&amp;quot;applicationKS&amp;quot; generate-self-signed-certificate-host=&amp;quot;localhost&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;credential-reference clear-text=&amp;quot;ПАРОЛЬ К ПРИВАТНОМУ КЛЮЧУ&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/key-manager&amp;gt;&lt;br /&gt;
                &amp;lt;/key-managers&amp;gt;&lt;br /&gt;
                &amp;lt;server-ssl-contexts&amp;gt;&lt;br /&gt;
                    &amp;lt;server-ssl-context name=&amp;quot;applicationSSC&amp;quot; key-manager=&amp;quot;applicationKM&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/server-ssl-contexts&amp;gt;&lt;br /&gt;
            &amp;lt;/tls&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;До версии 25, в объекте keystore (если АЛИАС не был задан, по умолчанию устанавливается значение &amp;quot;1&amp;quot;):&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;security-realm name=&amp;quot;ApplicationRealm&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;server-identities&amp;gt;&lt;br /&gt;
                    &amp;lt;ssl&amp;gt;&lt;br /&gt;
                        &amp;lt;keystore path=&amp;quot;ИМЯ ФАЙЛА-КОНТЕЙНЕРА.jks&amp;quot; relative-to=&amp;quot;jboss.server.config.dir&amp;quot; keystore-password=&amp;quot;ПАРОЛЬ К КОНТЕЙНЕРУ&amp;quot; alias=&amp;quot;АЛИАС&amp;quot; key-password=&amp;quot;ПАРОЛЬ К ПРИВАТНОМУ КЛЮЧУ&amp;quot; generate-self-signed-certificate-host=&amp;quot;localhost&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/ssl&amp;gt;&lt;br /&gt;
                &amp;lt;/server-identities&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Перезапустить сервис WildFly.&lt;br /&gt;
# Проверить подключение:&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;openssl s_client -connect &amp;lt;server-name&amp;gt;:8443&amp;lt;/syntaxhighlight&amp;gt;Verify Result должен быть 0.&lt;br /&gt;
&lt;br /&gt;
===Отключение HTTP порта (8080)===&lt;br /&gt;
{{Предупреждение|Приведённый ниже порядок действий применим для приложений, не публикующих WSDL-схему. Для приложений с WSDL потребуется дополнительная донастройка.}}&lt;br /&gt;
Для того, чтобы на сервере PCIS External отключить доступ к REST-интерфейсу по порту 8080 необходимо в файле &#039;&#039;/opt/wildfly/standalone/configuration/standalone.xml&#039;&#039; (для Linux), либо в &#039;&#039;C:\wildfly\standalone\configuration\standalone.xml&#039;&#039; (для Windows) (перед этим лучше сделать его резервную копию) в блоке &amp;lt;code&amp;gt;&amp;lt;server name=&amp;quot;default-server&amp;quot;&amp;gt;&amp;lt;/code&amp;gt; удалить строку&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;http-listener name=&amp;quot;default&amp;quot; socket-binding=&amp;quot;http&amp;quot; redirect-socket=&amp;quot;https&amp;quot; enable-http2=&amp;quot;true&amp;quot;/&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В блоке &amp;lt;code&amp;gt;&amp;lt;socket-binding-group name=&amp;quot;standard-sockets&amp;quot; default-interface=&amp;quot;public&amp;quot; port-offset=&amp;quot;${jboss.socket.binding.port-offset:0}&amp;quot;&amp;gt;&amp;lt;/code&amp;gt; удалить строку:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;socket-binding name=&amp;quot;http&amp;quot; port=&amp;quot;${jboss.http.port:8080}&amp;quot;/&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Изменить параметр &amp;lt;code&amp;gt;&amp;lt;http-connector name=&amp;quot;http-remoting-connector&amp;quot; connector-ref=&amp;quot;default&amp;quot; security-realm=&amp;quot;ApplicationRealm&amp;quot;/&amp;gt;&amp;lt;/code&amp;gt; следующим образом (изменить значение &amp;lt;code&amp;gt;connector-ref&amp;lt;/code&amp;gt; с &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; на &amp;lt;code&amp;gt;https&amp;lt;/code&amp;gt;):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;http-connector name=&amp;quot;http-remoting-connector&amp;quot; connector-ref=&amp;quot;https&amp;quot; security-realm=&amp;quot;ApplicationRealm&amp;quot;/&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Переключение публикации схемы на HTTPS===&lt;br /&gt;
Для того, чтобы, располагающаяся в WSDL, ссылка на схему была также корректна, необходимо в &amp;lt;code&amp;gt;&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:webservices:2.0&amp;quot;&amp;gt;&amp;lt;/code&amp;gt; добавить (заменив значения wsdl-host и, при необходимости, wsdl-port и wsdl-secure-port на необходимые) следующее:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-host&amp;gt;yoursite.com&amp;lt;/wsdl-host&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-port&amp;gt;8080&amp;lt;/wsdl-port&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-secure-port&amp;gt;8443&amp;lt;/wsdl-secure-port&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-uri-scheme&amp;gt;https&amp;lt;/wsdl-uri-scheme&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Пример результата:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:webservices:2.0&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-host&amp;gt;paycontrol.org&amp;lt;/wsdl-host&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-port&amp;gt;8080&amp;lt;/wsdl-port&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-secure-port&amp;gt;8443&amp;lt;/wsdl-secure-port&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-uri-scheme&amp;gt;https&amp;lt;/wsdl-uri-scheme&amp;gt;&lt;br /&gt;
            &amp;lt;endpoint-config name=&amp;quot;Standard-Endpoint-Config&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;endpoint-config name=&amp;quot;Recording-Endpoint-Config&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;pre-handler-chain name=&amp;quot;recording-handlers&amp;quot; protocol-bindings=&amp;quot;##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;handler name=&amp;quot;RecordingHandler&amp;quot; class=&amp;quot;org.jboss.ws.common.invocation.RecordingServerHandler&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/pre-handler-chain&amp;gt;&lt;br /&gt;
            &amp;lt;/endpoint-config&amp;gt;&lt;br /&gt;
            &amp;lt;client-config name=&amp;quot;Standard-Client-Config&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/subsystem&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Указание определённых стандартов защиты и алгоритмов===&lt;br /&gt;
Для выбора стандарта защиты HTTPS, только, например, TLS 1.2, нужно в &#039;&#039;объект https-listener объекта &amp;lt;nowiki&amp;gt;&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:undertow:X.X&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039; добавить, &#039;&#039;&#039;enabled-protocols=&amp;quot;TLSv1.2&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для выбора определённых криптографических алгоритмов, необходимо их указать в &#039;&#039;объекте https-listener объекта &amp;lt;nowiki&amp;gt;&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:undertow:X.X&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039;. Например, для запрета режимов работы без использования алгоритмов Диффи-Хеллмана, нужно добавить &#039;&#039;&#039;enabled-cipher-suites=&amp;quot;ALL:!kRSA&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:undertow:1.2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;server name=&amp;quot;default-server&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;https-listener name=&amp;quot;https&amp;quot; socket-binding=&amp;quot;https&amp;quot; security-realm=&amp;quot;ApplicationRealm&amp;quot; enable-http2=&amp;quot;true&amp;quot; enabled-cipher-suites=&amp;quot;ALL:!kRSA&amp;quot; enabled-protocols=&amp;quot;TLSv1.2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/server&amp;gt;&lt;br /&gt;
&amp;lt;/subsystem&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://security.stackexchange.com/questions/145855/how-to-enforce-perfect-forward-secrecy-using-jvm-properties&lt;br /&gt;
&lt;br /&gt;
https://www.openssl.org/docs/manmaster/man1/ciphers.html&lt;br /&gt;
&lt;br /&gt;
===Включение дополнительных заголовков===&lt;br /&gt;
Для включения дополнительных HTTP заголовков необходимо в файл&lt;br /&gt;
* Linux:&lt;br /&gt;
*: /opt/wildfly/standalone/configuration/standalone.xml&lt;br /&gt;
* Windows:&lt;br /&gt;
*: C:\wildfly\standalone\configuration\standalone.xml&lt;br /&gt;
# добавить фильтры в раздел &#039;&#039;&amp;lt;nowiki&amp;gt;&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:undertow:X.X&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039; добавив блок (при его отсутствии) &amp;lt;code&amp;gt;&amp;lt;filters&amp;gt;&amp;lt;/filters&amp;gt;&amp;lt;/code&amp;gt; следующего содержания:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;filters&amp;gt;&lt;br /&gt;
                &amp;lt;response-header name=&amp;quot;transport-security&amp;quot; header-name=&amp;quot;Strict-Transport-Security&amp;quot; header-value=&amp;quot;max-age=31536000&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;response-header name=&amp;quot;x-frame-options&amp;quot; header-name=&amp;quot;X-Frame-Options&amp;quot; header-value=&amp;quot;DENY&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;response-header name=&amp;quot;x-content-type-options&amp;quot; header-name=&amp;quot;X-Content-Type-Options&amp;quot; header-value=&amp;quot;nosniff&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;response-header name=&amp;quot;Content-Security-Policy&amp;quot; header-name=&amp;quot;Content-Security-Policy&amp;quot; header-value=&amp;quot;default-src &#039;self&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/filters&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# добавить ссылки на эти фильтры в раздел &#039;&#039;&amp;lt;nowiki&amp;gt;&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:undertow:X.X&amp;quot;&amp;gt; в &amp;lt;server name=&amp;quot;default-server&amp;quot;&amp;gt; в &amp;lt;host name=&amp;quot;default-host&amp;quot; alias=&amp;quot;localhost&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039; включив следующие строки:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;filter-ref name=&amp;quot;transport-security&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;filter-ref name=&amp;quot;x-frame-options&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;filter-ref name=&amp;quot;x-content-type-options&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;filter-ref name=&amp;quot;Content-Security-Policy&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:undertow:11.0&amp;quot; default-server=&amp;quot;default-server&amp;quot; default-virtual-host=&amp;quot;default-host&amp;quot; default-servlet-container=&amp;quot;default&amp;quot; default-security-domain=&amp;quot;other&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;buffer-cache name=&amp;quot;default&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;server name=&amp;quot;default-server&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;http-listener name=&amp;quot;default&amp;quot; socket-binding=&amp;quot;http&amp;quot; redirect-socket=&amp;quot;https&amp;quot; enable-http2=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;https-listener name=&amp;quot;https&amp;quot; socket-binding=&amp;quot;https&amp;quot; security-realm=&amp;quot;ApplicationRealm&amp;quot; enable-http2=&amp;quot;true&amp;quot; enabled-cipher-suites=&amp;quot;ALL:!kRSA&amp;quot; enabled-protocols=&amp;quot;TLSv1.2&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;host name=&amp;quot;default-host&amp;quot; alias=&amp;quot;localhost&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;http-invoker security-realm=&amp;quot;ApplicationRealm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;filter-ref name=&amp;quot;transport-security&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;filter-ref name=&amp;quot;x-frame-options&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;filter-ref name=&amp;quot;x-content-type-options&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;filter-ref name=&amp;quot;Content-Security-Policy&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/host&amp;gt;&lt;br /&gt;
    &amp;lt;/server&amp;gt;&lt;br /&gt;
    &amp;lt;servlet-container name=&amp;quot;default&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;jsp-config/&amp;gt;&lt;br /&gt;
        &amp;lt;websockets/&amp;gt;&lt;br /&gt;
    &amp;lt;/servlet-container&amp;gt;&lt;br /&gt;
    &amp;lt;filters&amp;gt;&lt;br /&gt;
        &amp;lt;response-header name=&amp;quot;transport-security&amp;quot; header-name=&amp;quot;Strict-Transport-Security&amp;quot; header-value=&amp;quot;max-age=31536000&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;response-header name=&amp;quot;x-frame-options&amp;quot; header-name=&amp;quot;X-Frame-Options&amp;quot; header-value=&amp;quot;DENY&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;response-header name=&amp;quot;x-content-type-options&amp;quot; header-name=&amp;quot;X-Content-Type-Options&amp;quot; header-value=&amp;quot;nosniff&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;response-header name=&amp;quot;Content-Security-Policy&amp;quot; header-name=&amp;quot;Content-Security-Policy&amp;quot; header-value=&amp;quot;default-src &#039;self&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/filters&amp;gt;&lt;br /&gt;
&amp;lt;/subsystem&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Изменение номера порта==&lt;br /&gt;
{{Предупреждение|ОС Linux не позволяет сервисам работающим не от имени root использовать порты с номерами ниже 1024. Для использования портов ниже 1024 необходимо выполнять трансляцию, например с помощью netfilter (iptables/firewalld).}}&lt;br /&gt;
Для изменения номера порта необходимо в файле /opt/wildfly/standalone/configuration/standalone.xml (Linux) или в C:\wildfly\standalone\configuration\standalone.xml (Windows), в блоке &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;socket-binding-group name=&amp;quot;standard-sockets&amp;quot; default-interface=&amp;quot;public&amp;quot; port-offset=&amp;quot;${jboss.socket.binding.port-offset:0}&amp;quot;&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; в нужном (для http, либо https) параметре &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;socket-binding name=&amp;quot;http&amp;quot; port=&amp;quot;${jboss.http.port:8080}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;socket-binding name=&amp;quot;https&amp;quot; port=&amp;quot;${jboss.https.port:8443}&amp;quot;/&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; изменить номер используемого порта.&lt;br /&gt;
&lt;br /&gt;
После изменения номера порта, службу WildFly необходимо перезапустить.&lt;br /&gt;
&lt;br /&gt;
При использовании «сервером» стандартных портов (80 для HTTP или 443 для HTTPS), при установке параметров настроек «клиента» для подключения к «серверу», номер порта в адресе дополнительно указывать не рекомендуется во избежании проблем, т.к. в этих случаях, согласно RFC2616 используется порт по умолчанию. При дополнительном указании в адресе порта по умолчанию бывали случаи возникновения проблем подключения.&lt;br /&gt;
&lt;br /&gt;
Приведённые ниже примеры описаны для протокола HTTP. При использовании HTTPS, необходимо также скорректировать название используемого протокола в адресе подключения.&lt;br /&gt;
===Изменение порта PCS===&lt;br /&gt;
При изменении порта для подключения к PCS, необходимо:&lt;br /&gt;
* установить новый порт для обращения к PC в настройках [[Прикладная система|прикладной системы]];&lt;br /&gt;
* изменить номер порта в настройках [[Сервер PayControl|PCIS External]].&lt;br /&gt;
Для изменения номера порта для обращения к PCS, в настройках PCIS External в файле /opt/wildfly/bin/standalone.conf (Linux) или C:\opt\wildfly\bin\standalone.conf.bat (Windows), в строке&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;JAVA_OPTS=&amp;quot;$JAVA_OPTS -Dpcservice.endpoint=http://localhost:8080/ws/PayControlServiceV3?wsdl -Duser.language=ru -Dpaycontrol.locale=ru&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
в параметре -Dpcservice.endpoint=http://&amp;lt;HOSTNAME&amp;gt;:&amp;lt;PORT&amp;gt;/ws/PayControlServiceV3?wsdl установить новое значение &amp;lt;PORT&amp;gt;.&lt;br /&gt;
===Изменение порта PCIS Internal===&lt;br /&gt;
Для изменения порта для подключения к [[Сервер PayControl|PCIS Internal]] необходимо в БД PCS выполнить следующий запрос:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_internal_url=&#039;http://&amp;lt;HOSTNASME&amp;gt;:&amp;lt;PORT&amp;gt;/wsis/PayControlInteractionService?wsdl&#039; where systemid=&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
где&lt;br /&gt;
* &amp;lt;HOSTNASME&amp;gt; - имя хоста PCIS Internal;&lt;br /&gt;
* &amp;lt;PORT&amp;gt; новое значение порта;&lt;br /&gt;
* XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - UUID идентификатор прикладной системы.&lt;br /&gt;
&lt;br /&gt;
Допускается выполнять запрос к БД PCS на обновление адреса PCIS Internal без указания systemid, в случае, если подключена только одна прикладная система, или необходимо обновить адрес PCIS Internal для всех прикладных систем.&lt;br /&gt;
&lt;br /&gt;
После изменения номера порта, службу wildfly необходимо перезапустить.&lt;br /&gt;
===Изменение порта PCIS External===&lt;br /&gt;
{{Предупреждение|При изменении порта PCIS External мобильное приложение потеряет возможность подключения к серверу PayControl до тех пор, пока пользователю мобильного приложения не будет перевыпущен ключ с новым адресом подключения к серверу.}}&lt;br /&gt;
&lt;br /&gt;
{{Предупреждение|Изменение порта, на котором сервер PCIS External ожидает подключения не всегда ведёт к изменению порта назначения, который используется мобильным приложением для доступа к серверу PayControl. Такая ситуация, например, может возникнуть, если перед сервером PCIS External со стороны сети Интернет установлено оборудование/ПО, выполняющее трансляцию сетевых портов.}}&lt;br /&gt;
При изменении порта PCIS External необходимо в БД PCS выполнить следующий запрос:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_external_url=&#039;http://&amp;lt;HOSTNASME&amp;gt;:&amp;lt;PORT&amp;gt;/PayControl-interaction-rest/&#039; where systemid=&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
где&lt;br /&gt;
* &amp;lt;HOSTNASME&amp;gt; - имя хоста PCIS External, используемое мобильными устройствами для доступа к серверу PayControl;&lt;br /&gt;
* &amp;lt;PORT&amp;gt; новое значение порта;&lt;br /&gt;
* XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - UUID идентификатор прикладной системы.&lt;br /&gt;
&lt;br /&gt;
Допускается выполнять запрос к БД PCS на обновление адреса PCIS External без указания systemid, в случае, если подключена только одна прикладная система, или необходимо обновить адрес PCIS External для всех прикладных систем.&lt;br /&gt;
&lt;br /&gt;
После изменения номера порта, службу wildfly необходимо перезапустить.&lt;br /&gt;
== Валидация подключения ==&lt;br /&gt;
=== PostgreSQL ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;validation&amp;gt;&lt;br /&gt;
      &amp;lt;valid-connection-checker class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker&amp;quot;&amp;gt;&amp;lt;/valid-connection-checker&amp;gt;&lt;br /&gt;
      &amp;lt;exception-sorter class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter&amp;quot;&amp;gt;&amp;lt;/exception-sorter&amp;gt;&lt;br /&gt;
    &amp;lt;/validation&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Oracle ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;validation&amp;gt;&lt;br /&gt;
        &amp;lt;check-valid-connection-sql&amp;gt;select 1 from dual&amp;lt;/check-valid-connection-sql&amp;gt;&lt;br /&gt;
        &amp;lt;validate-on-match&amp;gt;false&amp;lt;/validate-on-match&amp;gt;&lt;br /&gt;
        &amp;lt;background-validation&amp;gt;true&amp;lt;/background-validation&amp;gt;&lt;br /&gt;
        &amp;lt;background-validation-millis&amp;gt;10000&amp;lt;/background-validation-millis&amp;gt;&lt;br /&gt;
    &amp;lt;/validation&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== MS SQL ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;validation&amp;gt;&lt;br /&gt;
      &amp;lt;valid-connection-checker class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker&amp;quot;&amp;gt;&amp;lt;/valid-connection-checker&amp;gt;&lt;br /&gt;
    &amp;lt;/validation&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Установка лимитов потребляемой памяти ==&lt;br /&gt;
&lt;br /&gt;
Пример. Лимиты доступа к памяти необходимо выбирать исходя из нагрузки и ресурсов сервера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
JAVA_OPTS=-Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Контроль =&lt;br /&gt;
&lt;br /&gt;
== Потребление ресурсов ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
/opt/jboss/wildfly/bin/jboss-cli.sh --connect&lt;br /&gt;
/core-service=platform-mbean/type=memory:read-resource(recursive=true,proxies=true,include-runtime=true,include-defaults=true)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Вывод:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;outcome&amp;quot; =&amp;gt; &amp;quot;success&amp;quot;,&lt;br /&gt;
    &amp;quot;result&amp;quot; =&amp;gt; {&lt;br /&gt;
        &amp;quot;heap-memory-usage&amp;quot; =&amp;gt; {&lt;br /&gt;
            &amp;quot;init&amp;quot; =&amp;gt; 641728512L,&lt;br /&gt;
            &amp;quot;used&amp;quot; =&amp;gt; 1746929168L,&lt;br /&gt;
            &amp;quot;committed&amp;quot; =&amp;gt; 4097835008L,&lt;br /&gt;
            &amp;quot;max&amp;quot; =&amp;gt; 10257170432L&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;non-heap-memory-usage&amp;quot; =&amp;gt; {&lt;br /&gt;
            &amp;quot;init&amp;quot; =&amp;gt; 7667712L,&lt;br /&gt;
            &amp;quot;used&amp;quot; =&amp;gt; 331419120L,&lt;br /&gt;
            &amp;quot;committed&amp;quot; =&amp;gt; 357740544L,&lt;br /&gt;
            &amp;quot;max&amp;quot; =&amp;gt; -1L&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;object-name&amp;quot; =&amp;gt; &amp;quot;java.lang:type=Memory&amp;quot;,&lt;br /&gt;
        &amp;quot;object-pending-finalization-count&amp;quot; =&amp;gt; 0,&lt;br /&gt;
        &amp;quot;verbose&amp;quot; =&amp;gt; false&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Вывод параметров конфигурации в журнал при старте ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
JAVA_OPTS=-XshowSettings:all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Журналирование ==&lt;br /&gt;
&lt;br /&gt;
=== Доступ к данным журнала ===&lt;br /&gt;
&lt;br /&gt;
Журнал работы сервера PayControl записываются общий лог функционирования Wildfly.&lt;br /&gt;
&lt;br /&gt;
Файлы журналов за текущий день доступны по следующему пути:&lt;br /&gt;
* Linux:&lt;br /&gt;
*: /opt/wildfly/standalone/log/server.log&lt;br /&gt;
* Windows:&lt;br /&gt;
*: C:\wildfly\standalone\log\server.log&lt;br /&gt;
Для просмотра журнала за другие дни, нужно добавить к имени файла требуемую дату в формате server.log.YYYY-MM-DD&lt;br /&gt;
&lt;br /&gt;
=== Включение журналирования SOAP-вызовов ===&lt;br /&gt;
&lt;br /&gt;
Для включения расширенного логирования необходимо:&lt;br /&gt;
# Остановить службу wildfly.&lt;br /&gt;
# Добавить после блока &amp;lt;extensions&amp;gt; ... &amp;lt;/extensions&amp;gt; в файл&lt;br /&gt;
#* Linux:&lt;br /&gt;
#*: /opt/wildfly/standalone/configuration/standalone.xml&lt;br /&gt;
#* Windows:&lt;br /&gt;
#*: C:\wildfly\standalone\configuration\standalone.xml&lt;br /&gt;
#: следующий блок:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;system-properties&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;org.apache.cxf.logging.enabled&amp;quot; value=&amp;quot;pretty&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/system-properties&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Запустить службу wildfly.&lt;br /&gt;
&lt;br /&gt;
=== Направление логов Wildfly в Kafka ===&lt;br /&gt;
&lt;br /&gt;
Исходник https://developer.jboss.org/docs/DOC-56423. Основное отличие - добавление &amp;lt;code&amp;gt;&amp;lt;module name=&amp;quot;com.fasterxml.jackson.core.jackson-databind&amp;quot;/&amp;gt;&amp;lt;/code&amp;gt; в зависимости модуля &#039;&#039;org.apache.kafka.clients&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Модули ====&lt;br /&gt;
&lt;br /&gt;
Файлы модулей можно загрузить с https://mvnrepository.com/&lt;br /&gt;
&lt;br /&gt;
===== org.apache.kafka.clients =====&lt;br /&gt;
&lt;br /&gt;
Создать файл &amp;lt;code&amp;gt;/opt/wildfly/modules/system/layers/base/org/apache/kafka/clients/main/module.xml&amp;lt;/code&amp;gt; с содержанием&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;module name=&amp;quot;org.apache.kafka.clients&amp;quot; xmlns=&amp;quot;urn:jboss:module:1.8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;resources&amp;gt;&lt;br /&gt;
        &amp;lt;resource-root path=&amp;quot;kafka-clients-2.6.0.jar&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;resource-root path=&amp;quot;snappy-java-1.1.8.2.jar&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;resource-root path=&amp;quot;lz4-java-1.7.1.jar&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/resources&amp;gt;&lt;br /&gt;
    &amp;lt;dependencies&amp;gt;&lt;br /&gt;
        &amp;lt;module name=&amp;quot;javax.api&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;module name=&amp;quot;org.slf4j&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;module name=&amp;quot;com.fasterxml.jackson.core.jackson-databind&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
и добавить в директорию указанные в блоке &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt; файлы.&lt;br /&gt;
&lt;br /&gt;
===== org.apache.kafka.log4jappender =====&lt;br /&gt;
&lt;br /&gt;
Создать файл &amp;lt;code&amp;gt;/opt/wildfly/modules/system/layers/base/org/apache/kafka/log4jappender/main/module.xml&amp;lt;/code&amp;gt; с содержанием&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;module name=&amp;quot;org.apache.kafka.log4jappender&amp;quot; xmlns=&amp;quot;urn:jboss:module:1.8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;resources&amp;gt;&lt;br /&gt;
        &amp;lt;resource-root path=&amp;quot;kafka-log4j-appender-2.6.0.jar&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;resource-root path=&amp;quot;slf4j-log4j12-1.7.30.jar&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/resources&amp;gt;&lt;br /&gt;
    &amp;lt;dependencies&amp;gt;&lt;br /&gt;
        &amp;lt;module name=&amp;quot;org.slf4j&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;module name=&amp;quot;org.apache.kafka.clients&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;module name=&amp;quot;org.jboss.log4j.logmanager&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
и добавить в директорию указанные в блоке &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt; файлы.&lt;br /&gt;
&lt;br /&gt;
===== org.apache.log4j =====&lt;br /&gt;
&lt;br /&gt;
Добавить модуль log4jappender в качестве зависимости в существующий org.apache.log4j модуль:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;module name=&amp;quot;org.apache.log4j&amp;quot; xmlns=&amp;quot;urn:jboss:module:1.6&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependencies&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;module name=&amp;quot;org.apache.kafka.log4jappender&amp;quot; export=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== org.jboss.as.standalone =====&lt;br /&gt;
&lt;br /&gt;
Указать в имеющемся модуле org.jboss.as.standalone в качестве зависимости модуль org.apache.kafka.clients.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;module name=&amp;quot;org.jboss.as.standalone&amp;quot; xmlns=&amp;quot;urn:jboss:module:1.6&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependencies&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;module name=&amp;quot;org.apache.kafka.clients&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Хэндлеры ====&lt;br /&gt;
&lt;br /&gt;
Необходимо добавить перечисленные ниже хэндлеры в файл standalone.xml в блок &amp;lt;code&amp;gt;&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:logging:8.0&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== kafka =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;custom-handler name=&amp;quot;kafka&amp;quot; class=&amp;quot;org.apache.kafka.log4jappender.KafkaLog4jAppender&amp;quot; module=&amp;quot;org.apache.log4j&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;level name=&amp;quot;INFO&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;formatter&amp;gt;&lt;br /&gt;
                    &amp;lt;named-formatter name=&amp;quot;PATTERN&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/formatter&amp;gt;&lt;br /&gt;
                &amp;lt;properties&amp;gt;&lt;br /&gt;
                    &amp;lt;property name=&amp;quot;brokerList&amp;quot; value=&amp;quot;localhost:9092&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;property name=&amp;quot;topic&amp;quot; value=&amp;quot;out-topic&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/properties&amp;gt;&lt;br /&gt;
            &amp;lt;/custom-handler&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== async-kafka-wrapper =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;async-handler name=&amp;quot;async-kafka-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;level name=&amp;quot;ALL&amp;quot;/&amp;gt; &lt;br /&gt;
                &amp;lt;queue-length value=&amp;quot;1024&amp;quot;/&amp;gt; &lt;br /&gt;
                &amp;lt;overflow-action value=&amp;quot;block&amp;quot;/&amp;gt; &lt;br /&gt;
                &amp;lt;subhandlers&amp;gt; &lt;br /&gt;
                    &amp;lt;handler name=&amp;quot;kafka&amp;quot;/&amp;gt; &lt;br /&gt;
                &amp;lt;/subhandlers&amp;gt; &lt;br /&gt;
            &amp;lt;/async-handler&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Включение хэндлера =====&lt;br /&gt;
&lt;br /&gt;
В блок &amp;lt;code&amp;gt;&amp;lt;handlers&amp;gt;&amp;lt;/code&amp;gt; добавить &amp;lt;code&amp;gt;&amp;lt;handler name=&amp;quot;async-kafka-wrapper&amp;quot;/&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Проблемы и способы их устранения =&lt;br /&gt;
&lt;br /&gt;
== Очень медленный старт через standalone.sh (каждый этап скрипта запуска - с большими задержками). Система отправляет сигнал на остановку сервиса ==&lt;br /&gt;
&lt;br /&gt;
Вероятная проблема - неверные настройки DNS сервера.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Решение&#039;&#039;&#039;:Необходимо скорректировать настройки DNS.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Проблема обнаружилась 2018-07-27 при развёртывании у заказчика.&#039;&#039; [[Участник:A.bursakov|A.bursakov]] ([[Обсуждение участника:A.bursakov|обсуждение]]) 19:56, 1 августа 2018 (MSK)&lt;br /&gt;
==Не происходит «биндинг» IP-адреса адаптера==&lt;br /&gt;
Вероятная проблема - отсутствие PTR-записи на DNS-сервере, или неправильная работа службы DNS.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Решение&#039;&#039;&#039;: Добавить в файл opt/wildfly/bin/standalone.conf (Linux) или C:\opt\wildfly\bin\standalone.conf.bat (Windows), в переменную JAVA_OPTS параметр -Djboss.bind.address=0.0.0.0&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Проблема проявилась на тестовом Windows-сервере&#039;&#039; [[Участник:A.bursakov|A.bursakov]] ([[Обсуждение участника:A.bursakov|обсуждение]]) 19:56, 1 августа 2018 (MSK)&lt;br /&gt;
&lt;br /&gt;
== Частое появление WARNING в логе ==&lt;br /&gt;
&lt;br /&gt;
Предупреждения в логе вида:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
Caused by: com.ctc.wstx.exc.WstxIOException: UT010029: Stream is closed&lt;br /&gt;
Caused by: java.io.IOException: UT010029: Stream is closed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
Caused by: java.io.IOException: Broken pipe&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Могут быть вызваны системой мониторинга, которая для проверки того, что сервер доступен, устанавливает соединение и обрывает его получив лишь только header.&lt;br /&gt;
&lt;br /&gt;
Для отключения предупреждений о непредвиденном закрытии соединения необходимо в файл /opt/wildfly/standalone/configuration/standalone.xml в блок &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;profile&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:logging:X.X&amp;quot;&amp;gt;&lt;br /&gt;
       ... &lt;br /&gt;
    &amp;lt;/subsystem&amp;gt;&lt;br /&gt;
&amp;lt;/profile&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; добавить:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- to prevent warnings on unsuspicious connection close --&amp;gt;&lt;br /&gt;
&amp;lt;logger category=&amp;quot;org.apache.cxf.phase.PhaseInterceptorChain&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;level name=&amp;quot;ERROR&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/logger&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==INFO: Disabling contextual LOB creation as createClob() method threw error==&lt;br /&gt;
Иногда смущает появление в журнале события, из-за присутствия в его составе слова &amp;quot;error&amp;quot;:&lt;br /&gt;
    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 &lt;br /&gt;
Для отключения этого сообщения необходимо установить &amp;lt;code&amp;gt;hibernate.temp.use_jdbc_metadata_defaults=false&amp;lt;/code&amp;gt;&lt;br /&gt;
в файл persistence.xml, располагающийся внутри модуля сервера следующим образом:&lt;br /&gt;
        &amp;lt;properties&amp;gt;&lt;br /&gt;
            ...&lt;br /&gt;
            &amp;lt;property name=&amp;quot;hibernate.temp.use_jdbc_metadata_defaults&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
            ...&lt;br /&gt;
        &amp;lt;/properties&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Wildfly не стартует как служба и нет логов ==&lt;br /&gt;
Возможные проблемы:&lt;br /&gt;
* Некорректные права на директории/файлы в /opt/wildfly.&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;chown -RHv wildfly:wildfly /opt/wildfly&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Проблемы с определением необходимой Java. Для восстановления необходимо выполнить &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;sudo update-alternatives --config java&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Серверная часть]]&lt;br /&gt;
[[Категория:Возможные проблемы]]&lt;br /&gt;
[[Категория:Отладка]]&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=709</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=709"/>
		<updated>2022-12-21T11:44:43Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ресурс содержит документацию и справочные сведения и предназначен для предоставления доступа к этой информации партнёрам компании SafeTech.&lt;br /&gt;
&lt;br /&gt;
= PayControl Wiki =&lt;br /&gt;
&lt;br /&gt;
== Список категорий ==&lt;br /&gt;
&lt;br /&gt;
{{Special:AllPages|namespace=14}}&lt;br /&gt;
&lt;br /&gt;
== Список статей ==&lt;br /&gt;
&lt;br /&gt;
{{Special:AllPages}}&lt;br /&gt;
&lt;br /&gt;
= Демо =&lt;br /&gt;
&lt;br /&gt;
== PayControl ==&lt;br /&gt;
&lt;br /&gt;
https://paycontrol.org/demo/&lt;br /&gt;
&lt;br /&gt;
== myDSS ==&lt;br /&gt;
&lt;br /&gt;
=== 2.0 ===&lt;br /&gt;
&lt;br /&gt;
https://mydss.safe-tech.ru/demo/&lt;br /&gt;
&lt;br /&gt;
=== v.1 ===&lt;br /&gt;
&lt;br /&gt;
https://paycontrol.org/mydss/&lt;br /&gt;
&lt;br /&gt;
= Открытый ключ для проверки подписи файлов в репозитории =&lt;br /&gt;
&lt;br /&gt;
* https://repo.paycontrol.org/keySafeTech.pub.asc (до 2022-02-10)&lt;br /&gt;
* https://repo.paycontrol.org/SafeTech.pub.asc (до 2024-09-15)&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_PC_%D0%B2%D1%80%D1%83%D1%87%D0%BD%D1%83%D1%8E_v3.6&amp;diff=708</id>
		<title>Установка компонентов сервера PC вручную v3.6</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_PC_%D0%B2%D1%80%D1%83%D1%87%D0%BD%D1%83%D1%8E_v3.6&amp;diff=708"/>
		<updated>2022-12-14T07:20:09Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: /* Установка Wildfly */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Подготовка БД=&lt;br /&gt;
* Создать базу данных и пользователя на сервере СУБД, где будет работать база данных PCS (pcs-user, pcs-pass, pcs-db, pcs-db-host). Предоставить права на доступ пользователю к БД.&lt;br /&gt;
* Создать базу данных и пользователя на сервере СУБД, где будет работать база данных PCP (pcp-user, pcp-pass, pcp-db, pcp-db-host). Предоставить права на доступ пользователю к БД.&lt;br /&gt;
=Установка Java=&lt;br /&gt;
Установить последнюю версию JRE 11&lt;br /&gt;
==Обновление Security==&lt;br /&gt;
===JRE 11===&lt;br /&gt;
Замена файлов библиотек не требуется.&lt;br /&gt;
&lt;br /&gt;
=Установка Wildfly=&lt;br /&gt;
* Скачать версию WildFly Server 26.1.2(Jakarta EE 8 Full &amp;amp; Web Distribution) – https://wildfly.org/downloads/&lt;br /&gt;
Далее по тексту, под &amp;lt;WF_PATH&amp;gt; имеется в виду адрес созданной символьной ссылки.&lt;br /&gt;
==Linux==&lt;br /&gt;
* Распаковать Wildfly, например, в /opt/.&lt;br /&gt;
* Создать символьную ссылку /opt/wildfly на распакованную директорию:&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;ln -s /opt/wildfly-26.1.2.Final/ /opt/wildfly&amp;lt;/source&amp;gt;&lt;br /&gt;
==Windows==&lt;br /&gt;
* Распаковать Wildfly, например, в C:\.&lt;br /&gt;
* Создать символьную ссылку, к примеру &#039;&#039;C:\wildfly&#039;&#039;, на распакованную директорию. Пример команды:&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;mklink /D c:\wildfly c:\wildfly-26.1.2.Final\&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Удаление настроек WildFly по-умолчанию==&lt;br /&gt;
Для удаления настроек по-умолчанию, необходимо выполнить пункты описанные по ссылке [[PCWiki:Wildfly#Удаление настроек по умолчанию|Wildfly - Удаление настроек по умолчанию]]&lt;br /&gt;
&lt;br /&gt;
=Настройка подключения к БД=&lt;br /&gt;
==Добавление JDBC-драйвера СУБД==&lt;br /&gt;
===PostgreSQL===&lt;br /&gt;
* Скачать актуальный JDBC-драйвер по адресу https://jdbc.postgresql.org/&lt;br /&gt;
* Создать директорию &amp;lt;WF_PATH&amp;gt;/modules/org/postgresql/main/&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo mkdir -p /opt/wildfly/modules/org/postgresql/main/&amp;lt;/source&amp;gt;&lt;br /&gt;
* В директорию поместить скачанный jar.&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo mv postgresql-42.2.2.jar /opt/wildfly/modules/org/postgresql/main/&amp;lt;/source&amp;gt;&lt;br /&gt;
* Создать в этой же папке файл module.xml&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo vi /opt/wildfly/modules/org/postgresql/main/module.xml&amp;lt;/source&amp;gt;следующего содержания, указав имя файла драйвера вместо &amp;quot;JAR_PATH&amp;quot;:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;module xmlns=&amp;quot;urn:jboss:module:1.0&amp;quot; name=&amp;quot;org.postgresql&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;resources&amp;gt;&lt;br /&gt;
     &amp;lt;resource-root path=&amp;quot;JAR_PATH&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/resources&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.api&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.transaction.api&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.servlet.api&amp;quot; optional=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Добавить установленный модуль в качестве драйвера для подключения к СУБД в файл &amp;lt;WF_PATH&amp;gt;/standalone/configuration/standalone.xml, в секцию &#039;&#039;&amp;lt;datasources/drivers&amp;gt;&#039;&#039;, добавив следующий блок:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;driver name=&amp;quot;postgresql&amp;quot; module=&amp;quot;org.postgresql&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;driver-class&amp;gt;org.postgresql.Driver&amp;lt;/driver-class&amp;gt;&lt;br /&gt;
&amp;lt;/driver&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===MS SQL===&lt;br /&gt;
* Скачать JDBC-драйвер с сайта Microsoft https://docs.microsoft.com/ru-ru/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver15&lt;br /&gt;
* Создать директорию &#039;&#039;&amp;lt;WF_PATH&amp;gt;/modules/system/layers/base/com/microsoft/sqlserver/main/&#039;&#039;&lt;br /&gt;
* В директорию распаковать файлы и директории драйвера. Файлы драйвера (*.jar) должны располагаться непосредственно в директории &#039;&#039;main/&#039;&#039;&lt;br /&gt;
* Создать в этой же папке файл module.xml следующего содержания, заменив JAR_PATH на имя файла драйвера, например на &#039;&#039;mssql-jdbc-6.2.1.jre8.jar&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;module xmlns=&amp;quot;urn:jboss:module:1.3&amp;quot; name=&amp;quot;com.microsoft.sqlserver&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;resources&amp;gt;&lt;br /&gt;
    &amp;lt;resource-root path=&amp;quot;JAR_PATH&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/resources&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.api&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.transaction.api&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.xml.bind.api&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Добавить установленный модуль в качестве драйвера для подключения к СУБД в файл &amp;lt;WF_PATH&amp;gt;/standalone/configuration/standalone.xml, в секцию &#039;&#039;&amp;lt;datasources/drivers&amp;gt;&#039;&#039;, добавив следующий блок:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;driver name=&amp;quot;mssql&amp;quot; module=&amp;quot;com.microsoft.sqlserver&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;driver-class&amp;gt;com.microsoft.sqlserver.jdbc.SQLServerDriver&amp;lt;/driver-class&amp;gt;&lt;br /&gt;
&amp;lt;/driver&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Добавление испочников данных для модулей==&lt;br /&gt;
===PostgreSQL===&lt;br /&gt;
====PCS====&lt;br /&gt;
В файл &#039;&#039;&amp;lt;WF_PATH&amp;gt;/standalone/configuration/standalone.xml&#039;&#039; внести следующие изменения добавить новый источник данных в секцию &#039;&#039;&amp;lt;datasources&amp;gt;&#039;&#039; заменив pcs-db-host, port, pcs-db, pcs-user, pcs-pass:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;datasource jta=&amp;quot;true&amp;quot; jndi-name=&amp;quot;java:jboss/datasources/PayControlDS&amp;quot; pool-name=&amp;quot;PayControlDS&amp;quot; enabled=&amp;quot;true&amp;quot; use-ccm=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;connection-url&amp;gt;jdbc:postgresql://pcs-db-host:port/pcs-db&amp;lt;/connection-url&amp;gt;&lt;br /&gt;
    &amp;lt;driver-class&amp;gt;org.postgresql.Driver&amp;lt;/driver-class&amp;gt;&lt;br /&gt;
    &amp;lt;connection-property name=&amp;quot;url&amp;quot;&amp;gt;&lt;br /&gt;
        jdbc:postgresql://pcs-db-host:port/pcs-db&lt;br /&gt;
    &amp;lt;/connection-property&amp;gt;&lt;br /&gt;
    &amp;lt;driver&amp;gt;postgresql&amp;lt;/driver&amp;gt;&lt;br /&gt;
    &amp;lt;security&amp;gt;&lt;br /&gt;
        &amp;lt;user-name&amp;gt;pcs-user&amp;lt;/user-name&amp;gt;&lt;br /&gt;
        &amp;lt;password&amp;gt;pcs-pass&amp;lt;/password&amp;gt;&lt;br /&gt;
    &amp;lt;/security&amp;gt;&lt;br /&gt;
    &amp;lt;validation&amp;gt;&lt;br /&gt;
        &amp;lt;valid-connection-checker class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;background-validation&amp;gt;true&amp;lt;/background-validation&amp;gt;&lt;br /&gt;
        &amp;lt;exception-sorter class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/validation&amp;gt;&lt;br /&gt;
&amp;lt;/datasource&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====PCIS Internal====&lt;br /&gt;
На сервере PCIS Internal добавить новый источник данных в секцию &#039;&#039;&amp;lt;datasources&amp;gt;&#039;&#039;, заменив pcp-db-host, port, pcp-db, pcp-user, pcp-pass:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;datasource jta=&amp;quot;true&amp;quot; jndi-name=&amp;quot;java:jboss/datasources/PayControlISDS&amp;quot; pool-name=&amp;quot;PayControlISDS&amp;quot; enabled=&amp;quot;true&amp;quot; use-ccm=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;connection-url&amp;gt;jdbc:postgresql://pcp-db-host:port/pcp-db&amp;lt;/connection-url&amp;gt;&lt;br /&gt;
    &amp;lt;driver-class&amp;gt;org.postgresql.Driver&amp;lt;/driver-class&amp;gt;&lt;br /&gt;
    &amp;lt;connection-property name=&amp;quot;url&amp;quot;&amp;gt;&lt;br /&gt;
        jdbc:postgresql://pcp-db-host:port/pcp-db&lt;br /&gt;
    &amp;lt;/connection-property&amp;gt;&lt;br /&gt;
    &amp;lt;driver&amp;gt;postgresql&amp;lt;/driver&amp;gt;&lt;br /&gt;
    &amp;lt;security&amp;gt;&lt;br /&gt;
        &amp;lt;user-name&amp;gt;pcp-user&amp;lt;/user-name&amp;gt;&lt;br /&gt;
        &amp;lt;password&amp;gt;pcp-pass&amp;lt;/password&amp;gt;&lt;br /&gt;
    &amp;lt;/security&amp;gt;&lt;br /&gt;
    &amp;lt;validation&amp;gt;&lt;br /&gt;
        &amp;lt;valid-connection-checker class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;background-validation&amp;gt;true&amp;lt;/background-validation&amp;gt;&lt;br /&gt;
        &amp;lt;exception-sorter class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/validation&amp;gt;&lt;br /&gt;
&amp;lt;/datasource&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===MS SQL===&lt;br /&gt;
====PCS====&lt;br /&gt;
В файл &#039;&#039;&amp;lt;WF_PATH&amp;gt;/standalone/configuration/standalone.xml&#039;&#039; внести следующие изменения добавить новый источник данных в секцию &#039;&#039;&amp;lt;datasources&amp;gt;&#039;&#039; заменив pcs-db-host, port, pcs-db-host, pcs-db, pcs-user, pcs-pass:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;datasource jta=&amp;quot;true&amp;quot; jndi-name=&amp;quot;java:jboss/datasources/PayControlDS&amp;quot; pool-name=&amp;quot;PayControlDS&amp;quot; enabled=&amp;quot;true&amp;quot; use-ccm=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;connection-url&amp;gt;jdbc:sqlserver://pcs-db-host:port;databaseName=pcs-db&amp;lt;/connection-url&amp;gt;&lt;br /&gt;
	&amp;lt;connection-property name=&amp;quot;url&amp;quot;&amp;gt;&lt;br /&gt;
		jdbc:sqlserver://pcs-db-host:port;databaseName=pcs-db&lt;br /&gt;
	&amp;lt;/connection-property&amp;gt;&lt;br /&gt;
	&amp;lt;driver&amp;gt;mssql&amp;lt;/driver&amp;gt;&lt;br /&gt;
	&amp;lt;security&amp;gt;&lt;br /&gt;
		&amp;lt;user-name&amp;gt;pcs-user&amp;lt;/user-name&amp;gt;&lt;br /&gt;
		&amp;lt;password&amp;gt;pcs-pass&amp;lt;/password&amp;gt;&lt;br /&gt;
	&amp;lt;/security&amp;gt;&lt;br /&gt;
	&amp;lt;pool&amp;gt;&lt;br /&gt;
		&amp;lt;min-pool-size&amp;gt;5&amp;lt;/min-pool-size&amp;gt;&lt;br /&gt;
		&amp;lt;max-pool-size&amp;gt;50&amp;lt;/max-pool-size&amp;gt;&lt;br /&gt;
		&amp;lt;prefill&amp;gt;false&amp;lt;/prefill&amp;gt;&lt;br /&gt;
		&amp;lt;use-strict-min&amp;gt;false&amp;lt;/use-strict-min&amp;gt;&lt;br /&gt;
		&amp;lt;flush-strategy&amp;gt;FailingConnectionOnly&amp;lt;/flush-strategy&amp;gt;&lt;br /&gt;
	&amp;lt;/pool&amp;gt;&lt;br /&gt;
	&amp;lt;validation&amp;gt;&lt;br /&gt;
		&amp;lt;valid-connection-checker class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker&amp;quot;&amp;gt;&amp;lt;/valid-connection-checker&amp;gt;&lt;br /&gt;
	&amp;lt;/validation&amp;gt;&lt;br /&gt;
&amp;lt;/datasource&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====PCIS Internal====&lt;br /&gt;
На сервере PCIS Internal добавить новый источник данных в секцию &#039;&#039;&amp;lt;datasources&amp;gt;&#039;&#039;, заменив pcp-db-host, port, pcp-db-host, pcp-db, pcp-user, pcp-pass:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;datasource jta=&amp;quot;true&amp;quot; jndi-name=&amp;quot;java:jboss/datasources/PayControlISDS&amp;quot; pool-name=&amp;quot;PayControlISDS&amp;quot; enabled=&amp;quot;true&amp;quot; use-ccm=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;connection-url&amp;gt;jdbc:sqlserver://pcp-db-host:port;databaseName=pcp-db&amp;lt;/connection-url&amp;gt;&lt;br /&gt;
	&amp;lt;connection-property name=&amp;quot;url&amp;quot;&amp;gt;&lt;br /&gt;
		jdbc:sqlserver://pcp-db-host:port;databaseName=pcp-db&lt;br /&gt;
	&amp;lt;/connection-property&amp;gt;&lt;br /&gt;
	&amp;lt;driver&amp;gt;mssql&amp;lt;/driver&amp;gt;&lt;br /&gt;
	&amp;lt;security&amp;gt;&lt;br /&gt;
		&amp;lt;user-name&amp;gt;pcp-user&amp;lt;/user-name&amp;gt;&lt;br /&gt;
		&amp;lt;password&amp;gt;pcp-pass&amp;lt;/password&amp;gt;&lt;br /&gt;
	&amp;lt;/security&amp;gt;&lt;br /&gt;
	&amp;lt;pool&amp;gt;&lt;br /&gt;
		&amp;lt;min-pool-size&amp;gt;5&amp;lt;/min-pool-size&amp;gt;&lt;br /&gt;
		&amp;lt;max-pool-size&amp;gt;50&amp;lt;/max-pool-size&amp;gt;&lt;br /&gt;
		&amp;lt;prefill&amp;gt;false&amp;lt;/prefill&amp;gt;&lt;br /&gt;
		&amp;lt;use-strict-min&amp;gt;false&amp;lt;/use-strict-min&amp;gt;&lt;br /&gt;
		&amp;lt;flush-strategy&amp;gt;FailingConnectionOnly&amp;lt;/flush-strategy&amp;gt;&lt;br /&gt;
	&amp;lt;/pool&amp;gt;&lt;br /&gt;
	&amp;lt;validation&amp;gt;&lt;br /&gt;
		&amp;lt;valid-connection-checker class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker&amp;quot;&amp;gt;&amp;lt;/valid-connection-checker&amp;gt;&lt;br /&gt;
	&amp;lt;/validation&amp;gt;&lt;br /&gt;
&amp;lt;/datasource&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Oracle===&lt;br /&gt;
====PCS====&lt;br /&gt;
В файл &#039;&#039;&amp;lt;WF_PATH&amp;gt;/standalone/configuration/standalone.xml&#039;&#039; внести следующие изменения добавить новый источник данных в секцию &#039;&#039;&amp;lt;datasources&amp;gt;&#039;&#039; заменив pcs-db-host, port, pcs-db, pcs-user, pcs-pass, sid:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;datasource jta=&amp;quot;true&amp;quot; jndi-name=&amp;quot;java:jboss/datasources/PayControlDS&amp;quot; pool-name=&amp;quot;PayControlDS&amp;quot; enabled=&amp;quot;true&amp;quot; use-ccm=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;connection-url&amp;gt;jdbc:oracle:thin:@pcp-db-host:port:sid&amp;lt;/connection-url&amp;gt;&lt;br /&gt;
	&amp;lt;driver&amp;gt;com.oracle&amp;lt;/driver&amp;gt;&lt;br /&gt;
	&amp;lt;pool&amp;gt;&lt;br /&gt;
		&amp;lt;min-pool-size&amp;gt;1&amp;lt;/min-pool-size&amp;gt;&lt;br /&gt;
		&amp;lt;max-pool-size&amp;gt;5&amp;lt;/max-pool-size&amp;gt;&lt;br /&gt;
		&amp;lt;prefill&amp;gt;true&amp;lt;/prefill&amp;gt;&lt;br /&gt;
	&amp;lt;/pool&amp;gt;&lt;br /&gt;
	&amp;lt;security&amp;gt;&lt;br /&gt;
		&amp;lt;user-name&amp;gt;pcs-user&amp;lt;/user-name&amp;gt;&lt;br /&gt;
		&amp;lt;password&amp;gt;pcs-pass&amp;lt;/password&amp;gt;&lt;br /&gt;
                    &amp;lt;validation&amp;gt;&lt;br /&gt;
                        &amp;lt;check-valid-connection-sql&amp;gt;select 1 from dual&amp;lt;/check-valid-connection-sql&amp;gt;&lt;br /&gt;
                        &amp;lt;validate-on-match&amp;gt;false&amp;lt;/validate-on-match&amp;gt;&lt;br /&gt;
                        &amp;lt;background-validation&amp;gt;true&amp;lt;/background-validation&amp;gt;&lt;br /&gt;
                        &amp;lt;background-validation-millis&amp;gt;10000&amp;lt;/background-validation-millis&amp;gt;&lt;br /&gt;
                    &amp;lt;/validation&amp;gt;&lt;br /&gt;
	&amp;lt;/security&amp;gt;&lt;br /&gt;
&amp;lt;/datasource&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====PCIS Internal====&lt;br /&gt;
На сервере PCP добавить новый источник данных в секцию &#039;&#039;&amp;lt;datasources&amp;gt;&#039;&#039;, заменив pcp-db-host, port, pcp-db, pcp-user, pcp-pass, sid:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;datasource jta=&amp;quot;true&amp;quot; jndi-name=&amp;quot;java:jboss/datasources/PayControlISDS&amp;quot; pool-name=&amp;quot;PayControlISDS&amp;quot; enabled=&amp;quot;true&amp;quot; use-ccm=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;connection-url&amp;gt;jdbc:oracle:thin:@pcp-db-host:port:sid&amp;lt;/connection-url&amp;gt;&lt;br /&gt;
	&amp;lt;driver&amp;gt;com.oracle&amp;lt;/driver&amp;gt;&lt;br /&gt;
	&amp;lt;pool&amp;gt;&lt;br /&gt;
		&amp;lt;min-pool-size&amp;gt;1&amp;lt;/min-pool-size&amp;gt;&lt;br /&gt;
		&amp;lt;max-pool-size&amp;gt;5&amp;lt;/max-pool-size&amp;gt;&lt;br /&gt;
		&amp;lt;prefill&amp;gt;true&amp;lt;/prefill&amp;gt;&lt;br /&gt;
	&amp;lt;/pool&amp;gt;&lt;br /&gt;
	&amp;lt;security&amp;gt;&lt;br /&gt;
		&amp;lt;user-name&amp;gt;pcp-user&amp;lt;/user-name&amp;gt;&lt;br /&gt;
		&amp;lt;password&amp;gt;pcp-pass&amp;lt;/password&amp;gt;&lt;br /&gt;
                    &amp;lt;validation&amp;gt;&lt;br /&gt;
                        &amp;lt;check-valid-connection-sql&amp;gt;select 1 from dual&amp;lt;/check-valid-connection-sql&amp;gt;&lt;br /&gt;
                        &amp;lt;validate-on-match&amp;gt;false&amp;lt;/validate-on-match&amp;gt;&lt;br /&gt;
                        &amp;lt;background-validation&amp;gt;true&amp;lt;/background-validation&amp;gt;&lt;br /&gt;
                        &amp;lt;background-validation-millis&amp;gt;10000&amp;lt;/background-validation-millis&amp;gt;&lt;br /&gt;
                    &amp;lt;/validation&amp;gt;&lt;br /&gt;
	&amp;lt;/security&amp;gt;&lt;br /&gt;
&amp;lt;/datasource&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Настройка подключения PCE к PCS=&lt;br /&gt;
На сервере PCE необходимо установить адрес сервера PCS (host и port заменить на реальные значения). Для этого:&lt;br /&gt;
* на Linux в файл &#039;&#039;&amp;lt;WF_PATH&amp;gt;/bin/standalone.conf&#039;&#039; нужно добавить &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;JAVA_OPTS=&amp;quot;$JAVA_OPTS -Dpc_url=http://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/pc-api/ -Dpc_locale=ru&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* на Windows в файл &#039;&#039;&amp;lt;WF_PATH&amp;gt;/bin/standalone.conf.bat&#039;&#039; нужно добавить &amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;set &amp;quot;JAVA_OPTS=%JAVA_OPTS% -Dpc_url=http://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/pc-api/ -Dpc_locale=ru&amp;quot;&amp;lt;/syntaxhighlight&amp;gt; выше метки :JAVA_OPTS_SET&lt;br /&gt;
&lt;br /&gt;
=Настройка выделения памяти серверу=&lt;br /&gt;
На всех серверах установить максимальный объем доступной для использования памяти:&lt;br /&gt;
* на Linux в &#039;&#039;&amp;lt;WF_PATH&amp;gt;/bin/standalone.conf&#039;&#039; указать объём «ОбщийОбъёмОЗУ - 512MB»&lt;br /&gt;
* на Windows в &#039;&#039;&amp;lt;WF_PATH&amp;gt;\bin\standalone.conf.bat&#039;&#039; указать объём «ОбщийОбъёмОЗУ - 1536MB»&lt;br /&gt;
Для этого в строке&lt;br /&gt;
&#039;&#039;JAVA_OPTS=&amp;quot;-Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true&amp;quot;&#039;&#039; поменять значение параметра &#039;&#039;Xmx&#039;&#039; на выделяемый объём.&lt;br /&gt;
==Запуск проекта==&lt;br /&gt;
* Скопировать файл приложения сервера &#039;&#039;&amp;lt;WF_PATH&amp;gt;\standalone\deployments\&#039;&#039;:&lt;br /&gt;
** на PC Server - файл &#039;&#039;pc-server-&amp;lt;VERSION&amp;gt;.ear&#039;&#039;&lt;br /&gt;
** на PC Pusher - файл &#039;&#039;pc-pusher-&amp;lt;VERSION&amp;gt;.war&#039;&#039;&lt;br /&gt;
** на PC External - файл &#039;&#039;pc-external-&amp;lt;VERSION&amp;gt;.war&#039;&#039;&lt;br /&gt;
Один сервер WildFly может запускать одно или несколько приложений сервера&lt;br /&gt;
* Запустить&lt;br /&gt;
** Linux &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&amp;lt;WF_PATH&amp;gt;/bin/standalone.sh -b 0.0.0.0&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** Windows &amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;&amp;lt;WF_PATH&amp;gt;\bin\standalone.bat -b 0.0.0.0&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*:  где -b 0.0.0.0 - позволяет подключаться к серверу используя любой его интерфейс (опция bind)&lt;br /&gt;
* Дождаться старта WF, проверить, что нет ошибок запуска.&lt;br /&gt;
==Настройка автозапуска службы сервера==&lt;br /&gt;
===Linux===&lt;br /&gt;
Для настройки автозапуска службы, перейти в каталог &amp;lt;WF_PATH&amp;gt;/docs/contrib/scripts/systemd/ и выполнить шаги, описанные в файле README в этом каталоге, за исключением пунктов распаковки и создания символьной ссылки на каталог.&lt;br /&gt;
Пункт &amp;lt;code&amp;gt;chown -R wildfly:wildfly /opt/wildfly&amp;lt;/code&amp;gt; необходимо выполнить с параметрами «-RH» (параметр «H» указывает, что если на вход подана символьная ссылка, то нужно пойти вглубь каталога, на который она ссылается). Таким образом команда должна выглядеть следующим образом:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;chown -RHv wildfly:wildfly /opt/wildfly&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
При запуске в качестве службы, возможно отклонение запросов. В таком случае необходимо установить параметры JAVA_OPTS в файле standalone.conf:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;JAVA_OPTS=&amp;quot;$JAVA_OPTS -Djboss.bind.address=0.0.0.0&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Windows===&lt;br /&gt;
Скопировать папку&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&amp;lt;WF_PATH&amp;gt;\docs\contrib\scripts\service\&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
в папку&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&amp;lt;WF_PATH&amp;gt;\bin\&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Выполнить&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;&amp;lt;WF_PATH&amp;gt;\bin\service\service.bat install /startup&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
При запуске в качестве службы, возможно отклонение запросов. В таком случае необходимо установить параметры JAVA_OPTS в файле standalone.conf.bat выше метки :JAVA_OPTS_SET.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;set &amp;quot;JAVA_OPTS=%JAVA_OPTS% -Djboss.bind.address=0.0.0.0&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==URL-фильтрация при совмещении PC Pusher и PC External==&lt;br /&gt;
При совмещении ролей PC Pusher и PC External на одном сервере необходимо исключить возможность выполнения запросов PC Pusher со стороны сети интернет. &amp;lt;br&amp;gt;&lt;br /&gt;
Для этого необходимо со стороны сети интернет разрешить подключения только на конечную точку PC External. &amp;lt;br&amp;gt;&lt;br /&gt;
Конечная точка PC External - &#039;&#039;&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/pc-client-api/*&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Доступ к другим конечным точкам должен быть запрещен.&lt;br /&gt;
&lt;br /&gt;
При этом доступ к PC Pusher со стороны PC Server должен сохраниться. &amp;lt;br&amp;gt;&lt;br /&gt;
Конечная точка PC Pusher - &#039;&#039;&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/pc-pusher-api/*&#039;&#039;&lt;br /&gt;
=Внесение изменений в БД=&lt;br /&gt;
==Создание индексов БД PCS==&lt;br /&gt;
После первого запуска приложения, в базе данных будут созданы необходимые таблицы.&lt;br /&gt;
&lt;br /&gt;
На продуктивной среде после этого необходимо создать индексы в базе данных PC Server.&lt;br /&gt;
&lt;br /&gt;
Для этого выполните SQL скрипт:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
create index pc_keyinfo1_idx on PC_KEYINFO (userID, expiration_date, is_deleted);&lt;br /&gt;
create index pc_delayedkeyinfo1_idx on PC_DELAYEDKEYINFO (userID, is_deleted);&lt;br /&gt;
create index pc_device1_idx on PC_DEVICE (userID, is_deleted); &lt;br /&gt;
create index pc_transaction1_idx on PC_TRANSACTION (userID, status);&lt;br /&gt;
create index pc_device2_idx on PC_DEVICE (userID); &lt;br /&gt;
create index pc_keyinfo2_idx on PC_KEYINFO (userID); &lt;br /&gt;
create index pc_transaction2_idx on PC_TRANSACTION (userID); &lt;br /&gt;
create index pc_user1_idx on PC_USER (systemID);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Корректировка типов данных для MS SQL==&lt;br /&gt;
Java-приложение при создании таблиц БД неоптимально устанавливает тип для одного из полей для СУБД MS SQL.&lt;br /&gt;
&lt;br /&gt;
Для его корректировки после того, как таблицы созданы, выполните запрос&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
ALTER TABLE PC_TRANSACTION ALTER COLUMN DATA_BINARY image;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Регистрация системы==&lt;br /&gt;
После успешного запуска приложения PC Server до начала работы необходимо зарегистрировать прикладную систему.&lt;br /&gt;
&lt;br /&gt;
Это действие выполняется путем отправки на PC Server HTTP POST запроса, сформированного ST/Airome. Содержание запроса предоставляется дополнительно.&lt;br /&gt;
&lt;br /&gt;
Для отправки запроса можно использовать любое средство отправки HTTP-запросов.&lt;br /&gt;
===Примеры===&lt;br /&gt;
====PowerShell====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PowerShell&amp;quot;&amp;gt;&lt;br /&gt;
$headers = New-Object &amp;quot;System.Collections.Generic.Dictionary[[String],[String]]&amp;quot;&lt;br /&gt;
$headers.Add(&amp;quot;Content-Type&amp;quot;, &amp;quot;application/json&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
$body = &amp;quot;{n  &amp;quot;request`&amp;quot;:&amp;quot;eyJyZXF1ZXN0Ijp7InFyVVJMU2NoZW1lIjEE9NoZ+W1lIjEE9NoZW... ...9NoZW1lIjEE+9NoZW1lIjEE9NoZW1lIjEE9PSJ9&amp;quot;`n}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$response = Invoke-RestMethod &#039;https://dev.paycontrol.org/v5.0/pc-api/&#039; -Method &#039;POST&#039; -Headers $headers -Body $body&lt;br /&gt;
$response | ConvertTo-Json&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
====cURL====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;&lt;br /&gt;
curl --location --request POST &#039;http://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/pc-api/&#039; --header &#039;Content-Type: application/json&#039; --data-raw &#039;{&amp;quot;request&amp;quot;:&amp;quot;eyJyZXF1ZXN0Ijp7InFyVVJMU2NoZW1lIjEE9NoZ+W1lIjEE9NoZW1lIjEE9... ...IjEE9NoZW1lIjEE9PSJ9&amp;quot;}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Доступ к сервисам==&lt;br /&gt;
Адреса конечных точек по умолчанию:&lt;br /&gt;
* PC Server - http://&amp;lt;IP или имя сервера с WF &amp;gt;:8080/ws/PayControlServiceV3?wsdl; http://&amp;lt;IP или имя сервера с WF &amp;gt;:8080/ws/PayControlReportService?wsdl&lt;br /&gt;
* PCIS Internal - http://&amp;lt;IP или имя сервера с WF&amp;gt;:8080/wsis/PayControlInteractionService?wsdl - долна отобразиться wsdl-схема&lt;br /&gt;
* PCIS External - http://&amp;lt;IP или имя сервера с WF &amp;gt;:8080/PayControl-interaction-rest/ - (при запросе на этот адрес должно возвратиться «Not Found». Также необходимо обратить внимание, на то, какой протокол разрешён – HTTP или HTTPS)&lt;br /&gt;
&lt;br /&gt;
=Внесение аутентификационных данных для отправки push-уведомлений=&lt;br /&gt;
{{Предупреждение|Для отличных от PostgreSQL СУБД измените метод работы с последовательностями}}&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;MSSQL&#039;&#039;&#039; необходимо вместо строк &amp;lt;code&amp;gt;nextval(&#039;pc_split_pusher_creds_seq&#039;),&amp;lt;/code&amp;gt; использовать строку &amp;lt;code&amp;gt;NEXT VALUE FOR pc_split_pusher_creds_seq,&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;Oracle&#039;&#039;&#039; необходимо вместо строк &amp;lt;code&amp;gt;nextval(&#039;pc_split_pusher_creds_seq&#039;),&amp;lt;/code&amp;gt; использовать строку &amp;lt;code&amp;gt;pc_split_pusher_creds_seq.NEXTVAL,&amp;lt;/code&amp;gt;.&lt;br /&gt;
==В приложение PayControl==&lt;br /&gt;
Для внесение аутентификационных данных для отправки push-уведомлений в приложение PayControl необходимо выполнить следующие запросы к БД PC Pusher, заменив значения %SYSTEMID% на корректное.&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что знаки процента &#039;&#039;&#039;нужно удалить&#039;&#039;&#039;.&lt;br /&gt;
После выполнения запросов необходимо [[PCWIKI:Руководство_администратора_PayControl_v5#Запуск и остановка служб сервера PayControl|перезапустить Wildfly]] сервера PC Pusher.&lt;br /&gt;
&lt;br /&gt;
Пример для СУБД PostgreSQL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;INSERT INTO pc_split_pusher_credentials (&lt;br /&gt;
id,&lt;br /&gt;
appid,&lt;br /&gt;
credentials,&lt;br /&gt;
os,&lt;br /&gt;
systemid)&lt;br /&gt;
VALUES (&lt;br /&gt;
nextval(&#039;pc_split_pusher_creds_seq&#039;),&lt;br /&gt;
&#039;org.paycontrol.app&#039;,&lt;br /&gt;
&#039;{&amp;quot;google_api_key&amp;quot;:&amp;quot;AAAAoZ7vyz4:APA91bFqLfNegQCs_GfHGFeOmS68PHWWSzWpeZaYKfnLul9iHufIQJiNIAjgAykeWrTxiDDs9qQzullXww3o5XR0VS9tlBEpuhTMlz4CyHdmN2EhntJBBUlSQa-8--Rw_UzDbKBCGCXk&amp;quot;}&#039;,&lt;br /&gt;
&#039;Android&#039;,&lt;br /&gt;
&#039;%SYSTEMID%&#039;);&lt;br /&gt;
&lt;br /&gt;
INSERT INTO pc_split_pusher_credentials (&lt;br /&gt;
id,&lt;br /&gt;
appid,&lt;br /&gt;
credentials,&lt;br /&gt;
os,&lt;br /&gt;
systemid)&lt;br /&gt;
VALUES (&lt;br /&gt;
nextval(&#039;pc_split_pusher_creds_seq&#039;),&lt;br /&gt;
&#039;org.paycontrol.app&#039;,&lt;br /&gt;
&#039;{&amp;quot;apns_key_file&amp;quot;:&amp;quot;C:\\wildfly\\safetech-apns-JVBQX52N5Z.p8&amp;quot;,&amp;quot;apns_key_id&amp;quot;:&amp;quot;JVBQX52N5Z&amp;quot;,&amp;quot;apns_team_id&amp;quot;:&amp;quot;48HZH4RWJD&amp;quot;}&#039;,&lt;br /&gt;
&#039;iOS&#039;,&lt;br /&gt;
&#039;%SYSTEMID%&#039;);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==В приложение PayConfirm==&lt;br /&gt;
Для внесение аутентификационных данных для отправки push-уведомлений в приложение PayConfirm необходимо выполнить следующие запросы к БД PC Pusher, заменив значения %SYSTEMID% на корректное. &lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что знаки процента &#039;&#039;&#039;нужно удалить&#039;&#039;&#039;.&lt;br /&gt;
После выполнения запросов необходимо [[PCWIKI:Руководство_администратора_PayControl_v5#Запуск и остановка служб сервера PayControl|перезапустить Wildfly]] сервера PC Pusher.&lt;br /&gt;
&lt;br /&gt;
Пример для СУБД PostgreSQL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;INSERT INTO pc_split_pusher_credentials (&lt;br /&gt;
id,&lt;br /&gt;
appid,&lt;br /&gt;
credentials,&lt;br /&gt;
os,&lt;br /&gt;
systemid)&lt;br /&gt;
VALUES (&lt;br /&gt;
nextval(&#039;pc_split_pusher_creds_seq&#039;),&lt;br /&gt;
&#039;org.payconfirm.app&#039;,&lt;br /&gt;
&#039;{&amp;quot;google_api_key&amp;quot;:&amp;quot;AAAA4H70m7M:APA91bFsaPiXXiIuRyj4h-xGZpyd0-I3B9F1udIIergxaK8uL9vPPvUQXOvPfau2w8E-xur_6TlTzmhb2JsO13hBCxVDrNybD6Rj8k4hZKXfs7tC5fnJuWmCIB3-O_4dLo0QHlhfSbGn&amp;quot;}&#039;,&lt;br /&gt;
&#039;Android&#039;,&lt;br /&gt;
&#039;%SYSTEMID%&#039;);&lt;br /&gt;
&lt;br /&gt;
INSERT INTO pc_split_pusher_credentials (&lt;br /&gt;
id,&lt;br /&gt;
appid,&lt;br /&gt;
credentials,&lt;br /&gt;
os,&lt;br /&gt;
systemid)&lt;br /&gt;
VALUES (&lt;br /&gt;
nextval(&#039;pc_split_pusher_creds_seq&#039;),&lt;br /&gt;
&#039;org.payconfirm.app&#039;,&lt;br /&gt;
&#039;{&amp;quot;apns_key_file&amp;quot;:&amp;quot;C:\\wildfly\\safetech-apns-JVBQX52N5Z.p8&amp;quot;,&amp;quot;apns_key_id&amp;quot;:&amp;quot;QCC684AGC4&amp;quot;,&amp;quot;apns_team_id&amp;quot;:&amp;quot;B98K5P3YHV&amp;quot;}&#039;,&lt;br /&gt;
&#039;iOS&#039;,&lt;br /&gt;
&#039;%SYSTEMID%&#039;);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==В другое мобильное приложение==&lt;br /&gt;
Для внесение аутентификационных данных для отправки push-уведомлений необходимо выполнить запрос к БД PC Pusher, заменив значение %SYSTEMID%, %appid%, %путь к файлу ключа%, %apns_key_id%, %apns_team_id%, %google_api_key% на корректные (эти данные, за исключением %SYSTEMID%, можно получить от разработчика мобильного приложения), и, &#039;&#039;&#039;удалив&#039;&#039;&#039; знаки процента:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
INSERT INTO pc_split_pusher_credentials (&lt;br /&gt;
id,&lt;br /&gt;
appid,&lt;br /&gt;
credentials,&lt;br /&gt;
is_default,&lt;br /&gt;
os,&lt;br /&gt;
systemid)&lt;br /&gt;
VALUES (&lt;br /&gt;
nextval(&#039;pc_split_pusher_creds_seq&#039;),&lt;br /&gt;
&#039;%appid%&#039;,&lt;br /&gt;
&#039;{&amp;quot;google_api_key&amp;quot;:&amp;quot;%google_api_key%&amp;quot;}&#039;,&lt;br /&gt;
1,&lt;br /&gt;
&#039;Android&#039;,&lt;br /&gt;
&#039;%SYSTEMID%&#039;);&lt;br /&gt;
&lt;br /&gt;
INSERT INTO pc_split_pusher_credentials (&lt;br /&gt;
id,&lt;br /&gt;
appid,&lt;br /&gt;
credentials,&lt;br /&gt;
is_default,&lt;br /&gt;
os,&lt;br /&gt;
systemid)&lt;br /&gt;
VALUES (&lt;br /&gt;
nextval(&#039;pc_split_pusher_creds_seq&#039;),&lt;br /&gt;
&#039;%appid%&#039;,&lt;br /&gt;
&#039;{&amp;quot;apns_key_file&amp;quot;:&amp;quot;%путь к файлу ключа%&amp;quot;,&amp;quot;apns_key_id&amp;quot;:&amp;quot;%apns_key_id%&amp;quot;,&amp;quot;apns_team_id&amp;quot;:&amp;quot;%apns_team_id%&amp;quot;}&#039;,&lt;br /&gt;
1,&lt;br /&gt;
&#039;iOS&#039;,&lt;br /&gt;
&#039;%SYSTEMID%&#039;);&lt;br /&gt;
&lt;br /&gt;
commit;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Корректировка (смена) адресов компонентов серверов PC (при необходимости)=&lt;br /&gt;
{{Предупреждение|Не рекомендуется дополнительно указывать номер порта, в случаях, если для HTTP используется порт 80, или для HTTPS используется порт 443}}&lt;br /&gt;
==Учёт изменения адреса сервера PC Server==&lt;br /&gt;
Для учёта изменения адреса PCS необходимо произвести изменения в настройках PCE. В файле /opt/wildfly/bin/standalone.conf, в следующей строке, указав правильный адрес и при необходимости порт сервера PC Server, а также уточнив протокол подключения (HTTP/HTTPS):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
JAVA_OPTS=&amp;quot;$JAVA_OPTS -Dpc_url=http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/pc-api/ -Duser.language=ru -Dpc_locale=ru&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Учёт изменения адреса сервера PC Pusher==&lt;br /&gt;
Для учёта изменения адреса сервера PCP, необходимо, предварительно указав корректные данные (протокол (HTTP/HTTPS), имя или IP сервера, порт, идентификатор системы), выполнить запрос к БД PCS: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_internal_url = &#039;http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/pc-pusher-api/&#039; where systemid=&#039;&amp;lt;SYSTEMID&amp;gt;&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Учёт изменения внешнего адреса сервера PC External==&lt;br /&gt;
{{Предупреждение|Если система была переведена в промышленную эксплуатацию, при смене адреса для доступа мобильных устройств, не рекомендуется выводить из действия предыдущий адрес на протяжении всего срока действия выпущенных ключей пользователя. Иначе мобильное приложение потеряет доступ к серверу PC и для восстановления будет необходимо перевыпустить ключ и заново добавить его в приложение пользователя.}}&lt;br /&gt;
Для учёта изменения внешнего адреса сервера PC, по которому связываются мобильное приложение с сервером PC, необходимо, предварительно указав корректные данные (протокол (HTTP/HTTPS), имя или IP сервера, порт, идентификатор системы), выполнить запрос к БД PCS:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_external_url = &#039;http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/pc-client-api/&#039; where systemid=&#039;&amp;lt;SYSTEMID&amp;gt;&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=LoQR&amp;diff=706</id>
		<title>LoQR</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=LoQR&amp;diff=706"/>
		<updated>2022-12-07T09:56:52Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: /* Windows */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Инсталляция=&lt;br /&gt;
==Linux==&lt;br /&gt;
# Установить на серверы &#039;&#039;&#039;LoQR Internal&#039;&#039;&#039; и &#039;&#039;&#039;LoQR External&#039;&#039;&#039; Java Runtime Environement (8/11).&lt;br /&gt;
# Создать БД Redis, доступную для &#039;&#039;&#039;LoQR Internal&#039;&#039;&#039; и &#039;&#039;&#039;LoQR External&#039;&#039;&#039;.&lt;br /&gt;
# Распаковать архив с инсталлятором.&lt;br /&gt;
# Разрешить запуск файла &amp;lt;code&amp;gt;install&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Скопировать конфигурационные файлы internal.conf.DEFAULT и external.conf.DEFAULT в файлы internal.conf и external.conf соответственно.&lt;br /&gt;
# В файлах internal.conf и external.conf указать необходимые конфигурационные параметры.&lt;br /&gt;
#* internal.conf &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# Installator Params (NOT NEED TO MODIFY) - Параметры инсталлятора. Не стоит изменять при необходимости.&lt;br /&gt;
PC_MODULE=internal &lt;br /&gt;
PC_TITLE=&amp;quot;PC LoQR Internal&amp;quot;&lt;br /&gt;
PC_MODULE_FILENAME=loqr-1.0-25.jar&lt;br /&gt;
&lt;br /&gt;
# PC LoQR Internal Params&lt;br /&gt;
&lt;br /&gt;
## Self params - Протокол доступа, имя сервера LoQR Internal, порт, пользователь, под которым будет запускаться служба.&lt;br /&gt;
PC_URL=http://loqr-int-hostname&lt;br /&gt;
PC_PORT=8098&lt;br /&gt;
PC_USER=pc_user&lt;br /&gt;
&lt;br /&gt;
## Another components addressation - Расположение прочих компонентов&lt;br /&gt;
&lt;br /&gt;
### PC LoQR External&lt;br /&gt;
PC_LOQR_EXT_URI=http://loqr-ext-hostname:8099&lt;br /&gt;
&lt;br /&gt;
### PC Server&lt;br /&gt;
PC_SERVER_URI=https://pc-server-hostname/pc-api/&lt;br /&gt;
&lt;br /&gt;
### Redis&lt;br /&gt;
REDIS_PORT=6379&lt;br /&gt;
REDIS_HOST=redis-hostname&lt;br /&gt;
REDIS_DB=1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#* external.conf &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# Installator Params (NOT NEED TO MODIFY)&lt;br /&gt;
PC_MODULE=external&lt;br /&gt;
PC_TITLE=&amp;quot;PC LoQR External&amp;quot;&lt;br /&gt;
PC_MODULE_FILENAME=loqr-external-1.0-25.jar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# PC LoQR External Params&lt;br /&gt;
&lt;br /&gt;
## Self params&lt;br /&gt;
PC_URL=http://loqr-ext-hostname&lt;br /&gt;
PC_PORT=8099&lt;br /&gt;
PC_USER=pc_user&lt;br /&gt;
PC_QR_LOGO=logo.png&lt;br /&gt;
&lt;br /&gt;
## Another components addressation&lt;br /&gt;
&lt;br /&gt;
### PC LoQR Internal&lt;br /&gt;
PC_LOQR_INT_URI=http://loqr-int-hostname:8098&lt;br /&gt;
&lt;br /&gt;
### Redis&lt;br /&gt;
REDIS_PORT=6379&lt;br /&gt;
REDIS_HOST=redis-hostname&lt;br /&gt;
REDIS_DB=1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Указать в external/application.yml адрес самого LoQR External:&lt;br /&gt;
#* &amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
  url: &amp;quot;http://loqr-ext-hostname:loqr-ext-port&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Запустить инсталлятор&lt;br /&gt;
#* на сервере &#039;&#039;&#039;LoQR Internal&#039;&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;./install internal&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#* на сервере &#039;&#039;&#039;LoQR External&#039;&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;./install external&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
&lt;br /&gt;
=== winsw ===&lt;br /&gt;
&lt;br /&gt;
https://www.baeldung.com/spring-boot-app-as-a-service#1-windows-service-wrapper&lt;br /&gt;
&lt;br /&gt;
=== NSSM ===&lt;br /&gt;
&lt;br /&gt;
* Установить на серверы &#039;&#039;&#039;LoQR Internal&#039;&#039;&#039; и &#039;&#039;&#039;LoQR External&#039;&#039;&#039; Java Runtime Environement (8/11).&lt;br /&gt;
* Создать БД Redis, доступную для &#039;&#039;&#039;LoQR Internal&#039;&#039;&#039; и &#039;&#039;&#039;LoQR External&#039;&#039;&#039;.&lt;br /&gt;
* Загрузить стабильный NSSM (http://nssm.cc/download) и распаковать папку nssm.&lt;br /&gt;
* Положить в одну папку файлы loqr-internal*.jar/loqr-extertnal*.jar и application.yml.&lt;br /&gt;
* Открыть терминал от Администратора-&amp;gt;перейти в папку *\nssm\win64&lt;br /&gt;
* Для установки будет использован файл win64\nssm.exe, SHA-256  f689ee9af94b00e9e3f0bb072b34caaf207f32dcb4f5782fc9ca351df9a06c97&lt;br /&gt;
* Пример установки:&lt;br /&gt;
[[Файл:LoQ_example.jpg]]&lt;br /&gt;
* Установка LoQR Internal, как сервис:&lt;br /&gt;
&lt;br /&gt;
 Перейдите в папку nssm-&amp;gt;win64 и в терминале выполните команду:&lt;br /&gt;
 nssm install LoQInt&lt;br /&gt;
&lt;br /&gt;
 В открывшихся настройках сервиса:&lt;br /&gt;
 Path - путь до java.exe&lt;br /&gt;
 Startup directory - указать путь к папке с loqr-internal&lt;br /&gt;
 Arguments - параметры запуска - &amp;quot;-Xms256m -Xmx512m -jar C:\&amp;quot;путь к папке с loqr-internal&amp;quot;\loqr-internal-1.0.34.jar --logging.file=C:\&amp;quot;путь к папке с loqr-internal&amp;quot;\app.log&amp;quot;&lt;br /&gt;
* Установка LoQR External, как сервис&lt;br /&gt;
 Перейдите в папку nssm-&amp;gt;win64 и терминале выполните команду:&lt;br /&gt;
 nssm install LoQExt&lt;br /&gt;
&lt;br /&gt;
 В открывшихся настройках сервиса:&lt;br /&gt;
 Path - путь до java.exe&lt;br /&gt;
 Startup directory - указать путь к папке с loqr-external&lt;br /&gt;
 Arguments - параметры запуска - &amp;quot;-Xms256m -Xmx512m -jar C:\&amp;quot;путь к папке с loqr-external&amp;quot;\loqr-external-1.0.34.jar --logging.file=C:\&amp;quot;путь к папке с loqr-external&amp;quot;\app.log&amp;quot;&lt;br /&gt;
* Логи будут записываться в файл app.log рядом с jar-файлом.&lt;br /&gt;
* После конфигурирования можно запускать сервисы.&lt;br /&gt;
&lt;br /&gt;
=Конфигурирование=&lt;br /&gt;
==Включение TLS==&lt;br /&gt;
Чтобы включить TLS необходимо в конфигурационном файле application.yml &#039;&#039;&#039;LoQR External&#039;&#039;&#039; в секцию server добавить записи:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
  ssl:&lt;br /&gt;
    key-store-type: PKCS12&lt;br /&gt;
    key-store: &amp;lt;path-to-pkcs-12-file&amp;gt;&lt;br /&gt;
    key-store-password: &amp;lt;pkcs-12 password&amp;gt;&lt;br /&gt;
    key-alias: &amp;lt;key-alias&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Аутентификация в Redis==&lt;br /&gt;
Для аутентификации по паролю в Redis необходимо его указать в параметрах подключения, в поле &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
spring:&lt;br /&gt;
  redis:&lt;br /&gt;
    host: redis.example.com&lt;br /&gt;
    port: 6379&lt;br /&gt;
    database: 1&lt;br /&gt;
    password: pass&lt;br /&gt;
    lettuce:&lt;br /&gt;
      pool:&lt;br /&gt;
        min-idle: 8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Пример полной конфигурации==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
server:&lt;br /&gt;
  port: 8099&lt;br /&gt;
  address: 0.0.0.0&lt;br /&gt;
  ssl:&lt;br /&gt;
    key-store-type: PKCS12&lt;br /&gt;
    key-store: /media/keystore/examcont.p12&lt;br /&gt;
    key-store-password: 874814&lt;br /&gt;
    key-alias: examplecont&lt;br /&gt;
loqrExternal:&lt;br /&gt;
  url: &amp;quot;http://loqr.example.com:8099&amp;quot;&lt;br /&gt;
  loqr: &amp;quot;http://loqr.example.com:8098&amp;quot;&lt;br /&gt;
  logoQRPath: &amp;quot;/opt/loq/logo_.png&amp;quot;&lt;br /&gt;
  logoOn: true&lt;br /&gt;
  timeoutInSecond:&lt;br /&gt;
    QR: 120&lt;br /&gt;
    session: 600&lt;br /&gt;
spring:&lt;br /&gt;
  redis:&lt;br /&gt;
    host: redis.example.com&lt;br /&gt;
    port: 6379&lt;br /&gt;
    database: 1&lt;br /&gt;
    password: pass&lt;br /&gt;
    lettuce:&lt;br /&gt;
      pool:&lt;br /&gt;
        min-idle: 8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=Администрирование=&lt;br /&gt;
==Запуск и остановка служб сервера LoQR==&lt;br /&gt;
Запуск:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl start pc-loqr-external&lt;br /&gt;
systemctl start pc-loqr-internal&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Остановка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl stop pc-loqr-external&lt;br /&gt;
systemctl stop pc-loqr-internal&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Перезапуск:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl restart pc-loqr-external&lt;br /&gt;
systemctl restart pc-loqr-internal&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Просмотр журналов==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
journalctl -u pc-loqr-external&lt;br /&gt;
journalctl -u pc-loqr-internal&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_3.6_%D0%B4%D0%BE_3.9&amp;diff=692</id>
		<title>Обновление с 3.6 до 3.9</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_3.6_%D0%B4%D0%BE_3.9&amp;diff=692"/>
		<updated>2022-10-13T11:57:48Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В версии 3.8 реализовано взаимодействие с [[PC Pusher 5.2|PC Pusher 5.x]], который, в свою очередь, поддерживает отправку пуш-уведомлений на устройства Huawei. Обновлению с 3.6-3.7 подлежат модули PCS и PC External.&lt;br /&gt;
&lt;br /&gt;
{{Предупреждение|Модуль PCIS Internal 3.6/3.7 подлежит замене на модуль PC Pusher 5.5. PCS с версии 3.8 не поддерживает работу с модулем PCIS Internal.}}&lt;br /&gt;
&lt;br /&gt;
В версии 3.9 добавлена функциональность формирования имитовставки, для соответствия п.5.1 Положения Банка России от 17 апреля 2019 года N 683-П:&lt;br /&gt;
&lt;br /&gt;
    В целях обеспечения целостности электронных сообщений и подтверждения их составления уполномоченным на это лицом кредитные организации должны обеспечивать реализацию мер по использованию усиленной квалифицированной электронной подписи, усиленной неквалифицированной электронной подписи или СКЗИ, реализующих функцию имитозащиты информации с аутентификацией отправителя сообщения.&lt;br /&gt;
&lt;br /&gt;
Модули сервера доступны по ссылкам:&lt;br /&gt;
* PC Server (https://repo.paycontrol.org/server/maven/tech/paycon/server/PayControl-services-module/), версия 3.9.xxx;&lt;br /&gt;
* PC External (https://repo.paycontrol.org/server/maven/tech/paycon/server/PayControl-interaction-rest/), версия 3.9.xxx;&lt;br /&gt;
* PC Pusher (https://repo.paycontrol.org/server/maven/tech/paycon/server/pc-pusher/), версия 5.5.xxx.&lt;br /&gt;
&lt;br /&gt;
= Обновление Java =&lt;br /&gt;
&lt;br /&gt;
Перед обновлением компонентов PC требуется обновить Java до версии 11. Версия 8 больше не поддерживается.&lt;br /&gt;
&lt;br /&gt;
При установке Java новой версии, старая версия не удаляется, и [[Wildfly]] может продолжить работать на версии 8, что приведёт к ошибкам. Для того чтобы компоненты работали под Java 11, необходимо либо удалить неактуальную версию Java, либо выбрать необходимую версию с помощью:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
sudo update-alternatives --config java&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Обновление PC Server и PC External =&lt;br /&gt;
&lt;br /&gt;
Перед обновлением настоятельно рекомендуем также выполнить резервное копирование баз данных PC.&lt;br /&gt;
&lt;br /&gt;
Для обновления необходимо заменить на серверах файлы модулей PC Server и PC External в директории &#039;&#039;deployments&#039;&#039; сервера приложений [[Wildfly]]. &lt;br /&gt;
&lt;br /&gt;
Они имеют названия вида:&lt;br /&gt;
* PayControl-services-module-3.x.x.ear - PC Server;&lt;br /&gt;
* PayControl-interaction-rest-3.x.x.war - PC External.&lt;br /&gt;
Перед заменой файлов [[Руководство_администратора_PayControl_v3#Запуск и остановка служб сервера PayControl|остановите Wildfly]].&lt;br /&gt;
Файлы сервера предыдущей версии настоятельно рекомендуем сохранить для возможности отката на предыдущую версию.&lt;br /&gt;
&lt;br /&gt;
После замены файлов и развёртывания новых, в директории &#039;&#039;deployments&#039;&#039; будут созданы файлы с названиями:&lt;br /&gt;
* *.undeployed, где вместо * будет указано название убранного из директории файла модуля сервера. Файлы с расширением undeployed рекомендуется удалить.&lt;br /&gt;
* и с расширением *.deployed, где вместо * будут указаны названия новых модулей.&lt;br /&gt;
При появлении файлов с расширением *.failed, необходимо [[Руководство_администратора_PayControl_v3#Запуск и остановка служб сервера PayControl|перезапустить Wildfly]].&lt;br /&gt;
&lt;br /&gt;
= Переход с PCIS Internal на PC Pusher =&lt;br /&gt;
&lt;br /&gt;
== Замена файлов модулей ==&lt;br /&gt;
&lt;br /&gt;
{{Предупреждение|PC Pusher для своей работы не требует использования БД, в отличие от PCIS Internal.}}&lt;br /&gt;
&lt;br /&gt;
Для обновления необходимо заменить на сервере файлы модуля PCIS Internal в директории deployments сервера приложений Wildfly. Файл имеют названия вида:&lt;br /&gt;
&lt;br /&gt;
*PayControl-interaction-module-3.x.xxx.ear - PCIS Internal&lt;br /&gt;
&lt;br /&gt;
Перед заменой файлов [[Руководство_администратора_PayControl_v3#Запуск и остановка служб сервера PayControl|остановите Wildfly]].&lt;br /&gt;
Файлы сервера предыдущей версии настоятельно рекомендуем сохранить для возможности отката на предыдущую версию.&lt;br /&gt;
&lt;br /&gt;
*Новый файл имеет название вида: pc-pusher-5.5.xxx.war&lt;br /&gt;
&lt;br /&gt;
После замены файлов и развёртывания новых, в директории deployments будут созданы файлы с названиями:&lt;br /&gt;
&lt;br /&gt;
*.undeployed, где вместо * будет указано название убранного из директории файла модуля сервера. Файлы с расширением undeployed рекомендуется удалить.&lt;br /&gt;
*и с расширением *.deployed, где вместо * будут указаны названия новых модулей.&lt;br /&gt;
При появлении файлов с расширением *.failed, необходимо [[Руководство_администратора_PayControl_v3#Запуск и остановка служб сервера PayControl|перезапустить Wildfly]].&lt;br /&gt;
==Настройка PCS для работы с PCP==&lt;br /&gt;
После замены PCIS Internal на PC Pusher &#039;&#039;&#039;необходимо&#039;&#039;&#039; заменить его адрес в БД PCS:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_internal_url=&#039;http[s]://pcphost:port/pc-pusher-api/&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее, &#039;&#039;&#039;необходимо&#039;&#039;&#039; предоставить доступ PC Pusher для отправки данных пушей в сервис HMS (Huawei Mobile Services).&lt;br /&gt;
При отправке push-сообщений, запросы должны отправляются по адресу https://push-api.cloud.huawei.com/ ,порт 443.&lt;br /&gt;
&lt;br /&gt;
Также, с сервера PC Pusher &#039;&#039;&#039;должен&#039;&#039;&#039; быть доступен адрес: https://oauth-login.cloud.huawei.com/oauth2/v3/token&lt;br /&gt;
&lt;br /&gt;
В случае, если PC Pusher находится на одном сервере с PC External, то &#039;&#039;&#039;необходимо&#039;&#039;&#039; перенастроить правила URL-фильтрации.&lt;br /&gt;
&lt;br /&gt;
== Настройка PC Pusher ==&lt;br /&gt;
&lt;br /&gt;
Если для подтверждения транзакций используется приложение PayControl, то данная настройка не требуется.&lt;br /&gt;
&lt;br /&gt;
По умолчанию, если app/bundle id для отправки пуш-уведомлений явно не указан для устройства, PCS 3.9 отправляет пуши в приложение PayControl Classic.&lt;br /&gt;
&lt;br /&gt;
Для отправки пушей в другое приложения необходимо:&lt;br /&gt;
# Произвести настройки аутентификационных данных &amp;quot;другого&amp;quot; мобильного приложения в соответствии с [[PC_Pusher_5.2|этой статьей]]&lt;br /&gt;
# Прописать app/bundle id необходимого приложения в БД PCS(после выполнения запроса необходимо перезапустить Wildfly):&lt;br /&gt;
Пример: &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;insert into pc_sys_property values (nextval(&#039;pc_setting_seq&#039;), &#039;APP_ID_FOR_PUSHER&#039;, &#039;{&amp;quot;Android&amp;quot;:&amp;quot;com.example.mobile.app&amp;quot;,&amp;quot;iOS&amp;quot;:&amp;quot;com.example.apple.app&amp;quot;,&amp;quot;Huawei&amp;quot;:&amp;quot;com.example.apple.app&amp;quot;}&#039;);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Шаблоны:&lt;br /&gt;
* PostgreSQL &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;insert into pc_sys_property values (nextval(&#039;pc_setting_seq&#039;), &#039;APP_ID_FOR_PUSHER&#039;, &#039;{&amp;quot;Android&amp;quot;:&amp;quot;your_appid&amp;quot;,&amp;quot;iOS&amp;quot;:&amp;quot;your_appid&amp;quot;,&amp;quot;Huawei&amp;quot;:&amp;quot;your_appid&amp;quot;}&#039;);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* MS SQL &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;insert into pc_sys_property values (NEXT VALUE FOR PC_SETTING_SEQ, &#039;APP_ID_FOR_PUSHER&#039;, &#039;{&amp;quot;Android&amp;quot;:&amp;quot;your_appid&amp;quot;,&amp;quot;iOS&amp;quot;:&amp;quot;your_appid&amp;quot;,&amp;quot;Huawei&amp;quot;:&amp;quot;your_appid&amp;quot;}&#039;);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Oracle &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;insert into pc_sys_property values (PC_SETTING_SEQ.NEXTVAL, &#039;APP_ID_FOR_PUSHER&#039;, &#039;{&amp;quot;Android&amp;quot;:&amp;quot;your_appid&amp;quot;,&amp;quot;iOS&amp;quot;:&amp;quot;your_appid&amp;quot;,&amp;quot;Huawei&amp;quot;:&amp;quot;your_appid&amp;quot;}&#039;);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Включение имитовставки =&lt;br /&gt;
&lt;br /&gt;
Способ включения выработки имитовставки описан в статье [[Включение формирования имитовставки]].&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_3.6_%D0%B4%D0%BE_3.8&amp;diff=688</id>
		<title>Обновление с 3.6 до 3.8</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_3.6_%D0%B4%D0%BE_3.8&amp;diff=688"/>
		<updated>2022-10-12T13:17:26Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: Перенаправление на Обновление с 3.6 до 3.9&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#перенаправление [[Обновление_с_3.6_до_3.9]]&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_PayControl_v3.8_%D0%B2%D1%80%D1%83%D1%87%D0%BD%D1%83%D1%8E&amp;diff=687</id>
		<title>Установка компонентов сервера PayControl v3.8 вручную</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_PayControl_v3.8_%D0%B2%D1%80%D1%83%D1%87%D0%BD%D1%83%D1%8E&amp;diff=687"/>
		<updated>2022-10-12T13:12:46Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: Перенаправление на Установка компонентов сервера PayControl v3.9 вручную&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#перенаправление [[Установка компонентов сервера PayControl v3.9 вручную]]&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%92%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%84%D0%BE%D1%80%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B8%D0%BC%D0%B8%D1%82%D0%BE%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8&amp;diff=678</id>
		<title>Включение формирования имитовставки</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%92%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%84%D0%BE%D1%80%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B8%D0%BC%D0%B8%D1%82%D0%BE%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8&amp;diff=678"/>
		<updated>2022-09-28T11:17:41Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Подготовка =&lt;br /&gt;
&lt;br /&gt;
Для включения данной функции серверная часть PC &#039;&#039;&#039;должна быть обновлена&#039;&#039;&#039; до версии &#039;&#039;3.9.х&#039;&#039; или &#039;&#039;5.5.х&#039;&#039;. На версиях сервера ниже указанных имитовставка формироваться не будет.&lt;br /&gt;
&lt;br /&gt;
= Установка модуля КриптоПро JCP =&lt;br /&gt;
&lt;br /&gt;
== Добавление модуля в WildFly ==&lt;br /&gt;
&lt;br /&gt;
Можно установить двумя способами:&lt;br /&gt;
* путём копирования загруженных файлов модуля и добавления описания модуля в файл конфигурации WildFly&lt;br /&gt;
* с помощью &#039;&#039;jboss-cli&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Имя модуля - &#039;&#039;&#039;ru.cryptopro.jcp&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Файлы модуля доступны по ссылке https://repo.paycontrol.org/cdn/artefacts/wildfly/wf-module-ru.cryptoro.jcp.zip&lt;br /&gt;
&lt;br /&gt;
=== Путём ручного копирования ===&lt;br /&gt;
&lt;br /&gt;
* Скопировать файлы из загруженного архива в &#039;&#039;wildfly/modules/ru/cryptopro/jcp/main&#039;&#039;&lt;br /&gt;
* В файл &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;wildfly/standalone/configuration/standalone.xml&amp;lt;/syntaxhighlight&amp;gt;в тег&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;subsystem xmlns=&amp;quot;urn:jboss:domain:ee:[version]&amp;lt;/syntaxhighlight&amp;gt; нужно добавить глобальную область видимости этого модуля путём добавления&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;global-modules&amp;gt;&lt;br /&gt;
   &amp;lt;module name=&amp;quot;ru.cryptopro.jcp&amp;quot; slot=&amp;quot;main&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/global-modules&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Пример секции:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:ee:6.0&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;global-modules&amp;gt;&lt;br /&gt;
		&amp;lt;module name=&amp;quot;ru.cryptopro.jcp&amp;quot; slot=&amp;quot;main&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/global-modules&amp;gt;&lt;br /&gt;
	...&lt;br /&gt;
&amp;lt;/subsystem&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* В таблицу &#039;&#039;pc_sys_property&#039;&#039; внести настройку&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
-[ RECORD 1 ]-+-------------------&lt;br /&gt;
setting_id    | ...&lt;br /&gt;
setting_name  | GOST_IMIT_PROVIDER&lt;br /&gt;
setting_value | CryptoPro JCP 2.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** Postgresql:&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
insert into pc_sys_property (setting_id, setting_name, setting_value) values (nextval(&#039;pc_setting_seq&#039;), &#039;GOST_IMIT_PROVIDER&#039;, &#039;CryptoPro JCP 2.0&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** Oracle:&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
insert into pc_sys_property values (PC_SETTING_SEQ.NEXTVAL, ‘GOST_IMIT_PROVIDER&#039;, &#039;CryptoPro JCP 2.0&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** MSSQL:&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
insert into pc_sys_property values (NEXT VALUE FOR PC_SETTING_SEQ, &#039; GOST_IMIT_PROVIDER&#039;, &#039;CryptoPro JCP 2.0&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Создание временной директории ==&lt;br /&gt;
&lt;br /&gt;
Создать директорию &#039;&#039;/var/opt/cprocsp/tmp&#039;&#039; и дать Wildfly права на запись в неё.&lt;br /&gt;
&lt;br /&gt;
=Примечания=&lt;br /&gt;
# Если не выполнить &#039;&#039;пункт 3&#039;&#039;, то имитовставка вычисляться не будет&lt;br /&gt;
# При неправильной установке модуля и конфигурации области его видимости подтверждение транзакций будет падать с ошибкой&lt;br /&gt;
# Значение имитовставки есть в коллбэке рядом с подписью, а также в таблице &#039;&#039;pc_confirm_attempt&#039;&#039; (для PC 5.5 и выше - выводится через endpoint РКС - hex-строка)&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=670</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=670"/>
		<updated>2022-09-16T13:12:26Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: /* Открытый ключ для проверки подписи файлов в репозитории */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=PayControl Wiki=&lt;br /&gt;
Ресурс содержит документацию и справочные сведения и предназначен для предоставления доступа к этой информации партнёрам компании SafeTech.&lt;br /&gt;
==Список статей==&lt;br /&gt;
[[Служебная:Все_страницы]]&lt;br /&gt;
==Список категорий==&lt;br /&gt;
[[Служебная:Категории]]&lt;br /&gt;
=Демо=&lt;br /&gt;
==PayControl==&lt;br /&gt;
https://paycontrol.org/demo/&lt;br /&gt;
==myDSS==&lt;br /&gt;
https://paycontrol.org/mydss/&lt;br /&gt;
=Открытый ключ для проверки подписи файлов в репозитории=&lt;br /&gt;
* https://repo.paycontrol.org/keySafeTech.pub.asc (до 2022-02-10)&lt;br /&gt;
* https://repo.paycontrol.org/SafeTech.pub.asc (до 2024-09-15)&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_PayControl_v3.9_Linux&amp;diff=669</id>
		<title>Установка PayControl v3.9 Linux</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_PayControl_v3.9_Linux&amp;diff=669"/>
		<updated>2022-09-14T14:41:14Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Статья описывает установку с помощью инсталляционного скрипта.&lt;br /&gt;
=Справка скрипта инсталляции=&lt;br /&gt;
&amp;lt;pre&amp;gt;Execution modes:&lt;br /&gt;
  -i  Install. Set it for process installation. &lt;br /&gt;
  -h  Help. Will show this help.&lt;br /&gt;
&lt;br /&gt;
Installation options:&lt;br /&gt;
  -r  Register system (only on PCS, matters with -i option). Optional. For registration you must put you register system request file to &amp;quot;customer&amp;quot; directory before. Contact you supplier for obtain this request file.&lt;br /&gt;
&lt;br /&gt;
 PC roles (must selected at least one of them):&lt;br /&gt;
  -S  PC Server&lt;br /&gt;
  -P  PC Pusher&lt;br /&gt;
  -E  External / PCIS External&lt;br /&gt;
  -G  PC Server Signer (only for version 5.2 and above)&lt;br /&gt;
&lt;br /&gt;
Install wildfly database driver (mandatory for PCS and PCSS modules):&lt;br /&gt;
  -p  PostgreSQL&lt;br /&gt;
  -o  Oracle&lt;br /&gt;
    Need to set up parameter - jdbc version:&lt;br /&gt;
    8  JDBCv8. Certified with JDK8 and JDK11. Supports Oracle Database versions - 21c, 19c, 18c, and 12.2&lt;br /&gt;
    0  JDBCv10. Implements JDBC 4.3 spec and certified with JDK11. Supports Oracle Database versions - 21c, 19c, 18c, and 12.2&lt;br /&gt;
    1  JDBCv11. Implements JDBC 4.3 spec and certified with JDK11 and JDK17. Supports Oracle Database versions - 21c, 19c, 18c, and 12.2&lt;br /&gt;
  -m  MS SQL&lt;br /&gt;
&lt;br /&gt;
Examples&lt;br /&gt;
  install.sh -i -SPEG -r -o8&lt;br /&gt;
  also like&lt;br /&gt;
  install.sh -iSPEGro8&lt;br /&gt;
    will install PCS, PCP, PCE, PCSS, Oracle JDBC8 Driver and execute register system request&lt;br /&gt;
&lt;br /&gt;
  install.sh -i -Sp&lt;br /&gt;
  also like&lt;br /&gt;
  install.sh -Sp&lt;br /&gt;
    will install PCS with Postgres drivers&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Перед установкой PayControl =&lt;br /&gt;
&lt;br /&gt;
Установить последнюю версию JRE 11.&lt;br /&gt;
&lt;br /&gt;
= Конфигурирование =&lt;br /&gt;
&lt;br /&gt;
Конфигурирование производится путём редактирования раздела &amp;lt;code&amp;gt;CUSTOMER Config&amp;lt;/code&amp;gt; файла &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Подключение к БД для PCS==&lt;br /&gt;
&lt;br /&gt;
Необходимо установить корректные значения адресов и портов СУБД, имена пользователей и пароли.&lt;br /&gt;
&lt;br /&gt;
=== СУБД Oracle ===&lt;br /&gt;
&lt;br /&gt;
При использовании СУБД Oracle необходимо указать, каким образом происходит выбор необходимой БД - с помощью SID или Service Name.&lt;br /&gt;
&lt;br /&gt;
Также &#039;&#039;&#039;необходимо&#039;&#039;&#039; следуя высланной инструкции &#039;&#039;&#039;Oracle. Создание пользователя, табличного пространства и таблиц&#039;&#039;&#039; выполнить ее 3-й пункт.&lt;br /&gt;
&lt;br /&gt;
== Настройка PCE для подключения к PCS ==&lt;br /&gt;
&lt;br /&gt;
Для соединения PCE с PCS необходимо указать правильный адрес сервера PCS по которому он сможет получить к нему доступ.&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;###################################################&lt;br /&gt;
#&lt;br /&gt;
# CUSTOMER Config&lt;br /&gt;
#&lt;br /&gt;
###################################################&lt;br /&gt;
&lt;br /&gt;
PC_PATH=&#039;/opt/pc&#039;&lt;br /&gt;
PC_PRODUCT=&#039;PayControl&#039;&lt;br /&gt;
&lt;br /&gt;
#	PC Servers Settings&lt;br /&gt;
##	PCS&lt;br /&gt;
### DB&lt;br /&gt;
PCSDB_HOST=&#039;hostname:port&#039;&lt;br /&gt;
PCSDB=&#039;DB&#039;&lt;br /&gt;
PCSDB_USER=&#039;user&#039;&lt;br /&gt;
PCSDB_PASSWD=&#039;password&#039;&lt;br /&gt;
&lt;br /&gt;
# Oracle connection string delimiters:&lt;br /&gt;
# - use &#039;:&#039;, if PCSDB contains SID&lt;br /&gt;
# - use &#039;/&#039;, if PCSDB contains Service Name &lt;br /&gt;
PCSDB_Oracle_delimiter=&#039;:&#039; &lt;br /&gt;
&lt;br /&gt;
###	PCE&lt;br /&gt;
&lt;br /&gt;
PCS_HOSTNAME_PORT=&#039;localhost:8080&#039;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Установка =&lt;br /&gt;
&lt;br /&gt;
У пользователя, осуществляющего установку должны быть права на выполнение действий с уровнем привилегий root, либо возможность использовать учётную запись root.&lt;br /&gt;
# Скопировать файлы дистрибутива на сервер, например в домашнюю папку пользователя.&lt;br /&gt;
# Перейти в директорию с дистрибутивом.&lt;br /&gt;
# Запустить установочный скрипт с привилегиями root, с необходимыми параметрами.&lt;br /&gt;
&lt;br /&gt;
== PC Pusher ==&lt;br /&gt;
&lt;br /&gt;
Установка PC Pusher на сервере вместе с другим уже установленным модулем PC выполняется следующим образом:&lt;br /&gt;
&lt;br /&gt;
* Скопировать файл приложения сервера в &#039;&#039;WF_PATH\standalone\deployments\&#039;&#039;:&lt;br /&gt;
** на PC Pusher - файл &#039;&#039;pc-pusher-&amp;lt;VERSION&amp;gt;.war&#039;&#039;&lt;br /&gt;
* Дождаться старта WF, проверить, что нет ошибок запуска.&lt;br /&gt;
* После развёртывания новых файлов, в директории deployments будут созданы файлы:&lt;br /&gt;
** с расширением *.deployed, где вместо * будут указаны названия новых модулей.&lt;br /&gt;
** После того, как появятся файлы *.deployed, рекомендуется перезапустить Wildfly&lt;br /&gt;
** При появлении файлов с расширением *.failed, необходимо перезапустить Wildfly.&lt;br /&gt;
&lt;br /&gt;
= Результат выполнения инсталляционного скрипта =&lt;br /&gt;
&lt;br /&gt;
Результат выполнения инсталляционного скрипта является:&lt;br /&gt;
&lt;br /&gt;
* установка службы wildflу (директория /opt);&lt;br /&gt;
* включение автозапуска службы wildfly;&lt;br /&gt;
* добавление драйверов СУБД (опционально);&lt;br /&gt;
* добавление источников данных (только для PCS);&lt;br /&gt;
* развёртывание файлов сервера в wildfly;&lt;br /&gt;
* регистрация прикладной системы в PayControl (при установленном параметре &amp;quot;&#039;&#039;&#039;r&#039;&#039;&#039;&amp;quot;). Результат регистрации - вывод на экран идентификатора системы в конце журнала работы инсталляционного скрипта (systemid). Пример:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;soap:Envelope xmlns:soap=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot;&amp;gt;&amp;lt;soap:Body&amp;gt;&amp;lt;ns3:registerSystemResponse xmlns:ns2=&amp;quot;http://ws.safetech.ru/PayControl/services/ws/common/&amp;quot; xmlns:ns3=&amp;quot;http://ws.safetech.ru/PayControlV3/&amp;quot;&amp;gt;&amp;lt;systemId&amp;gt;e64a67c9-73e9-462c-9c27-2d0195a2bd23&amp;lt;/systemId&amp;gt;&amp;lt;/ns3:registerSystemResponse&amp;gt;&amp;lt;/soap:Body&amp;gt;&amp;lt;/soap:Envelope&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; В приведённом примере идентификатором зарегистрированной прикладной системы является &#039;&#039;e64a67c9-73e9-462c-9c27-2d0195a2bd23&#039;&#039;. В дальнейшем этот идентификатор понадобится при настройке прикладной системы на работу с PayControl. Если значение идентификатора прикладной системы утеряно, свяжитесь с компанией СэйфТек для его уточнения.&lt;br /&gt;
&lt;br /&gt;
== Примеры параметров запуска ==&lt;br /&gt;
&lt;br /&gt;
Примеры ниже приведены для установки PayControl с драйвером PostgreSQL (параметр &amp;quot;&#039;&#039;&#039;p&#039;&#039;&#039;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== Всё на одном сервере ===&lt;br /&gt;
&lt;br /&gt;
==== Без регистрации прикладной системы ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo ./install.sh -ipSE&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== С регистрацией прикладной системы ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo ./install.sh -ipSEr&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PCS ===&lt;br /&gt;
&lt;br /&gt;
==== Без регистрации прикладной системы ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo ./install.sh -ipS&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== С регистрацией прикладной системы ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo ./install.sh -ipSr&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PCE ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo ./install.sh -iE&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Контроль =&lt;br /&gt;
&lt;br /&gt;
== Вывод журнала в консоль в реальном времени ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;tail -n 300 -f /opt/wildfly/standalone/log/server.log&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Просмотр успешности развёртывания компонентов сервера ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;ls -la /opt/pc/deployments/&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если компонент сервера развёрнут успешно, рядом с файлом компонента сервера создаётся файл с аналогичным именем файлу сервера с расширением &amp;quot;&#039;&#039;&#039;.deployed&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Проверка доступности сервисов ==&lt;br /&gt;
&lt;br /&gt;
=== PCS ===&lt;br /&gt;
&lt;br /&gt;
Сервисы доступны по ссылкам (при запросе на эти адреса должна возвратиться WSDL-схема):&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;IP или имя сервера PCS&amp;gt;:8080/ws/PayControlServiceV3?wsdl&lt;br /&gt;
http://&amp;lt;IP или имя сервера PCS&amp;gt;:8080/ws/PayControlReportService?wsdl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PCP ===&lt;br /&gt;
&lt;br /&gt;
Сервис доступен по адресу:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;IP или имя сервера PC Pusher&amp;gt;:8080/pc-pusher-api/health_check&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PCE ===&lt;br /&gt;
&lt;br /&gt;
Сервис доступен по адресу&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;IP или имя сервера PCIS External&amp;gt;:8080/PayControl-interaction-rest/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При запросе на этот адрес должно возвратиться текст «Not Found» с HTTP-кодом 404. В Internet Explorer будет выведена своя страница браузера, сообщающая о том, что страница не найдена.&lt;br /&gt;
&lt;br /&gt;
= Внесение изменений в БД =&lt;br /&gt;
&lt;br /&gt;
== Создание индексов БД PCS ==&lt;br /&gt;
&lt;br /&gt;
Для создания индексов необходимо выполнить следующие запросы к БД PCS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;create index pc_keyinfo1_idx on PC_KEYINFO (userID, expiration_date, is_deleted);&lt;br /&gt;
create index pc_delayedkeyinfo1_idx on PC_DELAYEDKEYINFO (userID, is_deleted);&lt;br /&gt;
create index pc_device1_idx on PC_DEVICE (userID, is_deleted); &lt;br /&gt;
create index pc_transaction1_idx on PC_TRANSACTION (userID, status);&lt;br /&gt;
create index pc_device2_idx on PC_DEVICE (userID); &lt;br /&gt;
create index pc_keyinfo2_idx on PC_KEYINFO (userID); &lt;br /&gt;
create index pc_transaction2_idx on PC_TRANSACTION (userID); &lt;br /&gt;
create index pc_user1_idx on PC_USER (systemID);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Корректировка типов данных для MS SQL ==&lt;br /&gt;
&lt;br /&gt;
Для корректировки типов данных необходимо выполнить следующий запрос к БД PCS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;ALTER TABLE PC_TRANSACTION ALTER COLUMN DATA_BINARY image;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Настройка PC Pusher для отправки пушей в другое приложение (при необходимости) =&lt;br /&gt;
Необходимо выполнить пункты описанные по ссылке [[Обновление_с_3.6_до_3.8#Настройка PC Pusher|&amp;quot;Настройка PCS и PC Pusher&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
= Корректировка (смена) адресов серверов PayControl (при необходимости) =&lt;br /&gt;
&lt;br /&gt;
{{Предупреждение|Не рекомендуется дополнительно указывать номер порта, в случаях, если для HTTP используется порт 80, или для HTTPS используется порт 443}}&lt;br /&gt;
&lt;br /&gt;
== Учёт изменения адреса сервера PCS ==&lt;br /&gt;
&lt;br /&gt;
Для учёта изменения адреса сервера PCS необходимо произвести изменения в настройках PCE. В файле /opt/wildfly/bin/standalone.conf, в следующей строке, указав правильный адрес и при необходимости порт сервера PCS, а также уточнив протокол подключения (HTTP/HTTPS):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
JAVA_OPTS=&amp;quot;$JAVA_OPTS -Dpcservice.endpoint=http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/ws/PayControlServiceV3?wsdl -Duser.language=ru -Dpaycontrol.locale=ru&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Учёт изменения адреса сервера PC Pusher ==&lt;br /&gt;
&lt;br /&gt;
Для учёта изменения адреса сервера PC Pusher, необходимо, предварительно указав корректные данные (протокол (HTTP/HTTPS), имя или IP сервера, порт, идентификатор системы), выполнить запрос к БД PCS: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_internal_url = &#039;http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/pc-pusher-api/&#039; where systemid=&#039;&amp;lt;SYSTEMID&amp;gt;&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Учёт изменения внешнего адреса сервера PCE ==&lt;br /&gt;
&lt;br /&gt;
{{Предупреждение|Если система была переведена в промышленную эксплуатацию, при смене адреса для доступа мобильных устройств, не рекомендуется выводить из действия предыдущий адрес на протяжении всего срока действия выпущенных ключей пользователя. Иначе мобильное приложение потеряет доступ к серверу PayControl и для восстановления будет необходимо перевыпустить ключ и заново добавить его в приложение пользователя.}}&lt;br /&gt;
Для учёта изменения внешнего адреса сервера PayControl, по которому связываются мобильное приложение с сервером PayControl, необходимо, предварительно указав корректные данные (протокол (HTTP/HTTPS), имя или IP сервера, порт, идентификатор системы), выполнить запрос к БД PCS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_external_url = &#039;http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/PayControl-interaction-rest/&#039; where systemid=&#039;&amp;lt;SYSTEMID&amp;gt;&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_PayControl_v3.9_Linux&amp;diff=668</id>
		<title>Установка PayControl v3.9 Linux</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_PayControl_v3.9_Linux&amp;diff=668"/>
		<updated>2022-09-14T14:18:12Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Статья описывает установку с помощью инсталляционного скрипта.&lt;br /&gt;
=Справка скрипта инсталляции=&lt;br /&gt;
&amp;lt;pre&amp;gt;Execution modes:&lt;br /&gt;
  -i  Install. Set it for process installation. &lt;br /&gt;
  -h  Help. Will show this help.&lt;br /&gt;
&lt;br /&gt;
Installation options:&lt;br /&gt;
  -r  Register system (only on PCS, matters with -i option). Optional. For registration you must put you register system request file to &amp;quot;customer&amp;quot; directory before. Contact you supplier for obtain this request file.&lt;br /&gt;
&lt;br /&gt;
 PC roles (must selected at least one of them):&lt;br /&gt;
  -S  PC Server&lt;br /&gt;
  -P  PC Pusher&lt;br /&gt;
  -E  External / PCIS External&lt;br /&gt;
  -G  PC Server Signer (only for version 5.2 and above)&lt;br /&gt;
&lt;br /&gt;
Install wildfly database driver (mandatory for PCS and PCSS modules):&lt;br /&gt;
  -p  PostgreSQL&lt;br /&gt;
  -o  Oracle&lt;br /&gt;
    Need to set up parameter - jdbc version:&lt;br /&gt;
    8  JDBCv8. Certified with JDK8 and JDK11. Supports Oracle Database versions - 21c, 19c, 18c, and 12.2&lt;br /&gt;
    0  JDBCv10. Implements JDBC 4.3 spec and certified with JDK11. Supports Oracle Database versions - 21c, 19c, 18c, and 12.2&lt;br /&gt;
    1  JDBCv11. Implements JDBC 4.3 spec and certified with JDK11 and JDK17. Supports Oracle Database versions - 21c, 19c, 18c, and 12.2&lt;br /&gt;
  -m  MS SQL&lt;br /&gt;
&lt;br /&gt;
Examples&lt;br /&gt;
  /usr/bin/bash -i -SPEG -r -o8&lt;br /&gt;
  also like&lt;br /&gt;
  /usr/bin/bash -iSPEGro8&lt;br /&gt;
    will install PCS, PCP, PCE, PCSS, Oracle JDBC8 Driver and execute register system request&lt;br /&gt;
&lt;br /&gt;
  /usr/bin/bash -i -Sp&lt;br /&gt;
  also like&lt;br /&gt;
  /usr/bin/bash -Sp&lt;br /&gt;
    will install PCS with Postgres drivers&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Перед установкой PayControl =&lt;br /&gt;
&lt;br /&gt;
Перед установкой необходимо установить JRE.&lt;br /&gt;
&lt;br /&gt;
= Конфигурирование =&lt;br /&gt;
&lt;br /&gt;
Конфигурирование производится путём редактирования раздела &amp;lt;code&amp;gt;CUSTOMER Config&amp;lt;/code&amp;gt; файла &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Подключение к БД для PCS==&lt;br /&gt;
&lt;br /&gt;
Необходимо установить корректные значения адресов и портов СУБД, имена пользователей и пароли.&lt;br /&gt;
&lt;br /&gt;
=== СУБД Oracle ===&lt;br /&gt;
&lt;br /&gt;
При использовании СУБД Oracle необходимо указать, каким образом происходит выбор необходимой БД - с помощью SID или Service Name.&lt;br /&gt;
&lt;br /&gt;
Также &#039;&#039;&#039;необходимо&#039;&#039;&#039; следуя высланной инструкции &#039;&#039;&#039;Oracle. Создание пользователя, табличного пространства и таблиц&#039;&#039;&#039; выполнить ее 3-й пункт.&lt;br /&gt;
&lt;br /&gt;
== Настройка PCE для подключения к PCS ==&lt;br /&gt;
&lt;br /&gt;
Для соединения PCE с PCS необходимо указать правильный адрес сервера PCS по которому он сможет получить к нему доступ.&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;###################################################&lt;br /&gt;
#&lt;br /&gt;
# CUSTOMER Config&lt;br /&gt;
#&lt;br /&gt;
###################################################&lt;br /&gt;
&lt;br /&gt;
PC_PATH=&#039;/opt/pc&#039;&lt;br /&gt;
PC_PRODUCT=&#039;PayControl&#039;&lt;br /&gt;
&lt;br /&gt;
#	PC Servers Settings&lt;br /&gt;
##	PCS&lt;br /&gt;
### DB&lt;br /&gt;
PCSDB_HOST=&#039;hostname:port&#039;&lt;br /&gt;
PCSDB=&#039;DB&#039;&lt;br /&gt;
PCSDB_USER=&#039;user&#039;&lt;br /&gt;
PCSDB_PASSWD=&#039;password&#039;&lt;br /&gt;
&lt;br /&gt;
# Oracle connection string delimiters:&lt;br /&gt;
# - use &#039;:&#039;, if PCSDB contains SID&lt;br /&gt;
# - use &#039;/&#039;, if PCSDB contains Service Name &lt;br /&gt;
PCSDB_Oracle_delimiter=&#039;:&#039; &lt;br /&gt;
&lt;br /&gt;
###	PCE&lt;br /&gt;
&lt;br /&gt;
PCS_HOSTNAME_PORT=&#039;localhost:8080&#039;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Установка =&lt;br /&gt;
&lt;br /&gt;
У пользователя, осуществляющего установку должны быть права на выполнение действий с уровнем привилегий root, либо возможность использовать учётную запись root.&lt;br /&gt;
# Скопировать файлы дистрибутива на сервер, например в домашнюю папку пользователя.&lt;br /&gt;
# Перейти в директорию с дистрибутивом.&lt;br /&gt;
# Запустить установочный скрипт с привилегиями root, с необходимыми параметрами.&lt;br /&gt;
&lt;br /&gt;
== PC Pusher ==&lt;br /&gt;
&lt;br /&gt;
Установка PC Pusher на сервере вместе с другим уже установленным модулем PC выполняется следующим образом:&lt;br /&gt;
&lt;br /&gt;
* Скопировать файл приложения сервера в &#039;&#039;WF_PATH\standalone\deployments\&#039;&#039;:&lt;br /&gt;
** на PC Pusher - файл &#039;&#039;pc-pusher-&amp;lt;VERSION&amp;gt;.war&#039;&#039;&lt;br /&gt;
* Дождаться старта WF, проверить, что нет ошибок запуска.&lt;br /&gt;
* После развёртывания новых файлов, в директории deployments будут созданы файлы:&lt;br /&gt;
** с расширением *.deployed, где вместо * будут указаны названия новых модулей.&lt;br /&gt;
** После того, как появятся файлы *.deployed, рекомендуется перезапустить Wildfly&lt;br /&gt;
** При появлении файлов с расширением *.failed, необходимо перезапустить Wildfly.&lt;br /&gt;
&lt;br /&gt;
= Результат выполнения инсталляционного скрипта =&lt;br /&gt;
&lt;br /&gt;
Результат выполнения инсталляционного скрипта является:&lt;br /&gt;
&lt;br /&gt;
* установка службы wildflу (директория /opt);&lt;br /&gt;
* включение автозапуска службы wildfly;&lt;br /&gt;
* добавление драйверов СУБД (опционально);&lt;br /&gt;
* добавление источников данных (только для PCS);&lt;br /&gt;
* развёртывание файлов сервера в wildfly;&lt;br /&gt;
* регистрация прикладной системы в PayControl (при установленном параметре &amp;quot;&#039;&#039;&#039;r&#039;&#039;&#039;&amp;quot;). Результат регистрации - вывод на экран идентификатора системы в конце журнала работы инсталляционного скрипта (systemid). Пример:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;soap:Envelope xmlns:soap=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot;&amp;gt;&amp;lt;soap:Body&amp;gt;&amp;lt;ns3:registerSystemResponse xmlns:ns2=&amp;quot;http://ws.safetech.ru/PayControl/services/ws/common/&amp;quot; xmlns:ns3=&amp;quot;http://ws.safetech.ru/PayControlV3/&amp;quot;&amp;gt;&amp;lt;systemId&amp;gt;e64a67c9-73e9-462c-9c27-2d0195a2bd23&amp;lt;/systemId&amp;gt;&amp;lt;/ns3:registerSystemResponse&amp;gt;&amp;lt;/soap:Body&amp;gt;&amp;lt;/soap:Envelope&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; В приведённом примере идентификатором зарегистрированной прикладной системы является &#039;&#039;e64a67c9-73e9-462c-9c27-2d0195a2bd23&#039;&#039;. В дальнейшем этот идентификатор понадобится при настройке прикладной системы на работу с PayControl. Если значение идентификатора прикладной системы утеряно, свяжитесь с компанией СэйфТек для его уточнения.&lt;br /&gt;
&lt;br /&gt;
== Примеры параметров запуска ==&lt;br /&gt;
&lt;br /&gt;
Примеры ниже приведены для установки PayControl с драйвером PostgreSQL (параметр &amp;quot;&#039;&#039;&#039;p&#039;&#039;&#039;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== Всё на одном сервере ===&lt;br /&gt;
&lt;br /&gt;
==== Без регистрации прикладной системы ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo ./install.sh -ipSE&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== С регистрацией прикладной системы ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo ./install.sh -ipSEr&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PCS ===&lt;br /&gt;
&lt;br /&gt;
==== Без регистрации прикладной системы ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo ./install.sh -ipS&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== С регистрацией прикладной системы ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo ./install.sh -ipSr&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PCE ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo ./install.sh -iE&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Контроль =&lt;br /&gt;
&lt;br /&gt;
== Вывод журнала в консоль в реальном времени ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;tail -n 300 -f /opt/wildfly/standalone/log/server.log&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Просмотр успешности развёртывания компонентов сервера ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;ls -la /opt/pc/deployments/&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если компонент сервера развёрнут успешно, рядом с файлом компонента сервера создаётся файл с аналогичным именем файлу сервера с расширением &amp;quot;&#039;&#039;&#039;.deployed&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Проверка доступности сервисов ==&lt;br /&gt;
&lt;br /&gt;
=== PCS ===&lt;br /&gt;
&lt;br /&gt;
Сервисы доступны по ссылкам (при запросе на эти адреса должна возвратиться WSDL-схема):&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;IP или имя сервера PCS&amp;gt;:8080/ws/PayControlServiceV3?wsdl&lt;br /&gt;
http://&amp;lt;IP или имя сервера PCS&amp;gt;:8080/ws/PayControlReportService?wsdl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PCP ===&lt;br /&gt;
&lt;br /&gt;
Сервис доступен по адресу:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;IP или имя сервера PC Pusher&amp;gt;:8080/pc-pusher-api/health_check&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PCE ===&lt;br /&gt;
&lt;br /&gt;
Сервис доступен по адресу&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;IP или имя сервера PCIS External&amp;gt;:8080/PayControl-interaction-rest/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При запросе на этот адрес должно возвратиться текст «Not Found» с HTTP-кодом 404. В Internet Explorer будет выведена своя страница браузера, сообщающая о том, что страница не найдена.&lt;br /&gt;
&lt;br /&gt;
= Внесение изменений в БД =&lt;br /&gt;
&lt;br /&gt;
== Создание индексов БД PCS ==&lt;br /&gt;
&lt;br /&gt;
Для создания индексов необходимо выполнить следующие запросы к БД PCS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;create index pc_keyinfo1_idx on PC_KEYINFO (userID, expiration_date, is_deleted);&lt;br /&gt;
create index pc_delayedkeyinfo1_idx on PC_DELAYEDKEYINFO (userID, is_deleted);&lt;br /&gt;
create index pc_device1_idx on PC_DEVICE (userID, is_deleted); &lt;br /&gt;
create index pc_transaction1_idx on PC_TRANSACTION (userID, status);&lt;br /&gt;
create index pc_device2_idx on PC_DEVICE (userID); &lt;br /&gt;
create index pc_keyinfo2_idx on PC_KEYINFO (userID); &lt;br /&gt;
create index pc_transaction2_idx on PC_TRANSACTION (userID); &lt;br /&gt;
create index pc_user1_idx on PC_USER (systemID);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Корректировка типов данных для MS SQL ==&lt;br /&gt;
&lt;br /&gt;
Для корректировки типов данных необходимо выполнить следующий запрос к БД PCS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;ALTER TABLE PC_TRANSACTION ALTER COLUMN DATA_BINARY image;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Настройка PC Pusher для отправки пушей в другое приложение (при необходимости) =&lt;br /&gt;
Необходимо выполнить пункты описанные по ссылке [[Обновление_с_3.6_до_3.8#Настройка PC Pusher|&amp;quot;Настройка PCS и PC Pusher&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
= Корректировка (смена) адресов серверов PayControl (при необходимости) =&lt;br /&gt;
&lt;br /&gt;
{{Предупреждение|Не рекомендуется дополнительно указывать номер порта, в случаях, если для HTTP используется порт 80, или для HTTPS используется порт 443}}&lt;br /&gt;
&lt;br /&gt;
== Учёт изменения адреса сервера PCS ==&lt;br /&gt;
&lt;br /&gt;
Для учёта изменения адреса сервера PCS необходимо произвести изменения в настройках PCE. В файле /opt/wildfly/bin/standalone.conf, в следующей строке, указав правильный адрес и при необходимости порт сервера PCS, а также уточнив протокол подключения (HTTP/HTTPS):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
JAVA_OPTS=&amp;quot;$JAVA_OPTS -Dpcservice.endpoint=http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/ws/PayControlServiceV3?wsdl -Duser.language=ru -Dpaycontrol.locale=ru&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Учёт изменения адреса сервера PC Pusher ==&lt;br /&gt;
&lt;br /&gt;
Для учёта изменения адреса сервера PC Pusher, необходимо, предварительно указав корректные данные (протокол (HTTP/HTTPS), имя или IP сервера, порт, идентификатор системы), выполнить запрос к БД PCS: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_internal_url = &#039;http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/pc-pusher-api/&#039; where systemid=&#039;&amp;lt;SYSTEMID&amp;gt;&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Учёт изменения внешнего адреса сервера PCE ==&lt;br /&gt;
&lt;br /&gt;
{{Предупреждение|Если система была переведена в промышленную эксплуатацию, при смене адреса для доступа мобильных устройств, не рекомендуется выводить из действия предыдущий адрес на протяжении всего срока действия выпущенных ключей пользователя. Иначе мобильное приложение потеряет доступ к серверу PayControl и для восстановления будет необходимо перевыпустить ключ и заново добавить его в приложение пользователя.}}&lt;br /&gt;
Для учёта изменения внешнего адреса сервера PayControl, по которому связываются мобильное приложение с сервером PayControl, необходимо, предварительно указав корректные данные (протокол (HTTP/HTTPS), имя или IP сервера, порт, идентификатор системы), выполнить запрос к БД PCS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_external_url = &#039;http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/PayControl-interaction-rest/&#039; where systemid=&#039;&amp;lt;SYSTEMID&amp;gt;&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_PayControl_v3.9_Linux&amp;diff=667</id>
		<title>Установка PayControl v3.9 Linux</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_PayControl_v3.9_Linux&amp;diff=667"/>
		<updated>2022-09-14T13:01:23Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: Новая страница: «Статья описывает установку с помощью инсталляционного скрипта. =Справка скрипта инстал…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Статья описывает установку с помощью инсталляционного скрипта.&lt;br /&gt;
=Справка скрипта инсталляции=&lt;br /&gt;
&amp;lt;pre&amp;gt;Installation type (just one of them MUST be setted):&lt;br /&gt;
	-i	install&lt;br /&gt;
&lt;br /&gt;
Install options&lt;br /&gt;
	-r	Register system (only on PCS, matters with -i option)	&lt;br /&gt;
&lt;br /&gt;
Install PayControl Server roles&lt;br /&gt;
	-S	PC Server&lt;br /&gt;
	-P	PC Pusher&lt;br /&gt;
	-E	PC External&lt;br /&gt;
	&lt;br /&gt;
Install wildfly database driver&lt;br /&gt;
	-p	PostgreSQL&lt;br /&gt;
	-o	Oracle&lt;br /&gt;
		Need to set up parameter - jdbc version:&lt;br /&gt;
		6	for Oracle 11.2, 11gR2 (JDK8)&lt;br /&gt;
		7	for Oracle 12.1, 12cR1 (JDK8)&lt;br /&gt;
		8	for Oracle 12.2, 12cR2 (JDK8) and Oracle 18.3 with JDK8, JDK9, JDK10&lt;br /&gt;
	-m	MS SQL&lt;br /&gt;
	&lt;br /&gt;
Examples&lt;br /&gt;
	install -i -SIE -o8 -r&lt;br /&gt;
		will install Oracle JDBC8 Driver, PCS, PCP, PCIS External and execute register system request&lt;br /&gt;
&lt;br /&gt;
	install -ipSIEr&lt;br /&gt;
		will install PostgreSQL JDBC Driver, PCS, PCP, PCE and execute register system request&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Перед установкой PayControl =&lt;br /&gt;
&lt;br /&gt;
Перед установкой необходимо установить JRE.&lt;br /&gt;
&lt;br /&gt;
= Конфигурирование =&lt;br /&gt;
&lt;br /&gt;
Перед установкой необходимо сконфигурировать инсталлятор. Предварительно нужно скопировать файл &#039;&#039;install.conf.DEFAULT&#039;&#039; в файл &#039;&#039;install.conf&#039;&#039;. Параметры установки необходимо устанавливать в файле &#039;&#039;install.conf&#039;&#039; в разделе &amp;lt;code&amp;gt;CUSTOMER Config&amp;lt;/code&amp;gt;&lt;br /&gt;
== Подключение к БД для PCS==&lt;br /&gt;
&lt;br /&gt;
Необходимо установить корректные значения адресов и портов СУБД, имена пользователей и пароли.&lt;br /&gt;
&lt;br /&gt;
=== СУБД Oracle ===&lt;br /&gt;
&lt;br /&gt;
При использовании СУБД Oracle необходимо указать, каким образом происходит выбор необходимой БД - с помощью SID или Service Name.&lt;br /&gt;
&lt;br /&gt;
Также &#039;&#039;&#039;необходимо&#039;&#039;&#039; следуя высланной инструкции &#039;&#039;&#039;Oracle. Создание пользователя, табличного пространства и таблиц&#039;&#039;&#039; выполнить ее 3-й пункт.&lt;br /&gt;
&lt;br /&gt;
== Настройка PCE для подключения к PCS ==&lt;br /&gt;
&lt;br /&gt;
Для соединения PCE с PCS необходимо указать правильный адрес сервера PCS по которому он сможет получить к нему доступ.&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;###################################################&lt;br /&gt;
#&lt;br /&gt;
# CUSTOMER Config&lt;br /&gt;
#&lt;br /&gt;
###################################################&lt;br /&gt;
&lt;br /&gt;
PC_PATH=&#039;/opt/pc&#039;&lt;br /&gt;
PC_PRODUCT=&#039;PayControl&#039;&lt;br /&gt;
&lt;br /&gt;
#	PC Servers Settings&lt;br /&gt;
##	PCS&lt;br /&gt;
### DB&lt;br /&gt;
PCSDB_HOST=&#039;hostname:port&#039;&lt;br /&gt;
PCSDB=&#039;DB&#039;&lt;br /&gt;
PCSDB_USER=&#039;user&#039;&lt;br /&gt;
PCSDB_PASSWD=&#039;password&#039;&lt;br /&gt;
&lt;br /&gt;
# Oracle connection string delimiters:&lt;br /&gt;
# - use &#039;:&#039;, if PCSDB contains SID&lt;br /&gt;
# - use &#039;/&#039;, if PCSDB contains Service Name &lt;br /&gt;
PCSDB_Oracle_delimiter=&#039;:&#039; &lt;br /&gt;
&lt;br /&gt;
###	PCE&lt;br /&gt;
&lt;br /&gt;
PCS_HOSTNAME_PORT=&#039;localhost:8080&#039;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Установка =&lt;br /&gt;
&lt;br /&gt;
У пользователя, осуществляющего установку должны быть права на выполнение действий с уровнем привилегий root, либо возможность использовать учётную запись root.&lt;br /&gt;
# Скопировать файлы дистрибутива на сервер, например в домашнюю папку пользователя.&lt;br /&gt;
# Перейти в директорию с дистрибутивом.&lt;br /&gt;
# Предоставить права пользователю на исполнение файла-скрипта. Пример:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;chmod u+x install&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Запустить установочный скрипт с привилегиями root, с необходимыми параметрами.&lt;br /&gt;
&lt;br /&gt;
== PC Pusher ==&lt;br /&gt;
&lt;br /&gt;
Установка PC Pusher на сервере вместе с другим уже установленным модулем PC выполняется следующим образом:&lt;br /&gt;
&lt;br /&gt;
* Скопировать файл приложения сервера в &#039;&#039;WF_PATH\standalone\deployments\&#039;&#039;:&lt;br /&gt;
** на PC Pusher - файл &#039;&#039;pc-pusher-&amp;lt;VERSION&amp;gt;.war&#039;&#039;&lt;br /&gt;
* Дождаться старта WF, проверить, что нет ошибок запуска.&lt;br /&gt;
* После развёртывания новых файлов, в директории deployments будут созданы файлы:&lt;br /&gt;
** с расширением *.deployed, где вместо * будут указаны названия новых модулей.&lt;br /&gt;
** После того, как появятся файлы *.deployed, рекомендуется перезапустить Wildfly&lt;br /&gt;
** При появлении файлов с расширением *.failed, необходимо перезапустить Wildfly.&lt;br /&gt;
&lt;br /&gt;
= Результат выполнения инсталляционного скрипта =&lt;br /&gt;
&lt;br /&gt;
Результат выполнения инсталляционного скрипта является:&lt;br /&gt;
&lt;br /&gt;
* установка службы wildflу (директория /opt);&lt;br /&gt;
* включение автозапуска службы wildfly;&lt;br /&gt;
* добавление драйверов СУБД (опционально);&lt;br /&gt;
* добавление источников данных (только для PCS);&lt;br /&gt;
* развёртывание файлов сервера в wildfly;&lt;br /&gt;
* регистрация прикладной системы в PayControl (при установленном параметре &amp;quot;&#039;&#039;&#039;r&#039;&#039;&#039;&amp;quot;). Результат регистрации - вывод на экран идентификатора системы в конце журнала работы инсталляционного скрипта (systemid). Пример:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;soap:Envelope xmlns:soap=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot;&amp;gt;&amp;lt;soap:Body&amp;gt;&amp;lt;ns3:registerSystemResponse xmlns:ns2=&amp;quot;http://ws.safetech.ru/PayControl/services/ws/common/&amp;quot; xmlns:ns3=&amp;quot;http://ws.safetech.ru/PayControlV3/&amp;quot;&amp;gt;&amp;lt;systemId&amp;gt;e64a67c9-73e9-462c-9c27-2d0195a2bd23&amp;lt;/systemId&amp;gt;&amp;lt;/ns3:registerSystemResponse&amp;gt;&amp;lt;/soap:Body&amp;gt;&amp;lt;/soap:Envelope&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; В приведённом примере идентификатором зарегистрированной прикладной системы является &#039;&#039;e64a67c9-73e9-462c-9c27-2d0195a2bd23&#039;&#039;. В дальнейшем этот идентификатор понадобится при настройке прикладной системы на работу с PayControl. Если значение идентификатора прикладной системы утеряно, свяжитесь с компанией СэйфТек для его уточнения.&lt;br /&gt;
&lt;br /&gt;
== Примеры параметров запуска ==&lt;br /&gt;
&lt;br /&gt;
Примеры ниже приведены для установки PayControl с драйвером PostgreSQL (параметр &amp;quot;&#039;&#039;&#039;p&#039;&#039;&#039;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== Всё на одном сервере ===&lt;br /&gt;
&lt;br /&gt;
==== Без регистрации прикладной системы ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo ./install -ipSE&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== С регистрацией прикладной системы ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo ./install -ipSEr&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PCS ===&lt;br /&gt;
&lt;br /&gt;
==== Без регистрации прикладной системы ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo ./install -ipS&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== С регистрацией прикладной системы ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo ./install -ipSr&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PCE ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo ./install -iE&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Контроль =&lt;br /&gt;
&lt;br /&gt;
== Вывод журнала в консоль в реальном времени ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;tail -n 300 -f /opt/wildfly/standalone/log/server.log&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Просмотр успешности развёртывания компонентов сервера ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;ls -la /opt/pc/deployments/&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если компонент сервера развёрнут успешно, рядом с файлом компонента сервера создаётся файл с аналогичным именем файлу сервера с расширением &amp;quot;&#039;&#039;&#039;.deployed&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Проверка доступности сервисов ==&lt;br /&gt;
&lt;br /&gt;
=== PCS ===&lt;br /&gt;
&lt;br /&gt;
Сервисы доступны по ссылкам (при запросе на эти адреса должна возвратиться WSDL-схема):&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;IP или имя сервера PCS&amp;gt;:8080/ws/PayControlServiceV3?wsdl&lt;br /&gt;
http://&amp;lt;IP или имя сервера PCS&amp;gt;:8080/ws/PayControlReportService?wsdl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PCP ===&lt;br /&gt;
&lt;br /&gt;
Сервис доступен по адресу:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;IP или имя сервера PC Pusher&amp;gt;:8080/pc-pusher-api/health_check&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PCE ===&lt;br /&gt;
&lt;br /&gt;
Сервис доступен по адресу&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;IP или имя сервера PCIS External&amp;gt;:8080/PayControl-interaction-rest/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При запросе на этот адрес должно возвратиться текст «Not Found» с HTTP-кодом 404. В Internet Explorer будет выведена своя страница браузера, сообщающая о том, что страница не найдена.&lt;br /&gt;
&lt;br /&gt;
= Внесение изменений в БД =&lt;br /&gt;
&lt;br /&gt;
== Создание индексов БД PCS ==&lt;br /&gt;
&lt;br /&gt;
Для создания индексов необходимо выполнить следующие запросы к БД PCS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;create index pc_keyinfo1_idx on PC_KEYINFO (userID, expiration_date, is_deleted);&lt;br /&gt;
create index pc_delayedkeyinfo1_idx on PC_DELAYEDKEYINFO (userID, is_deleted);&lt;br /&gt;
create index pc_device1_idx on PC_DEVICE (userID, is_deleted); &lt;br /&gt;
create index pc_transaction1_idx on PC_TRANSACTION (userID, status);&lt;br /&gt;
create index pc_device2_idx on PC_DEVICE (userID); &lt;br /&gt;
create index pc_keyinfo2_idx on PC_KEYINFO (userID); &lt;br /&gt;
create index pc_transaction2_idx on PC_TRANSACTION (userID); &lt;br /&gt;
create index pc_user1_idx on PC_USER (systemID);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Корректировка типов данных для MS SQL ==&lt;br /&gt;
&lt;br /&gt;
Для корректировки типов данных необходимо выполнить следующий запрос к БД PCS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;ALTER TABLE PC_TRANSACTION ALTER COLUMN DATA_BINARY image;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Настройка PC Pusher для отправки пушей в другое приложение (при необходимости) =&lt;br /&gt;
Необходимо выполнить пункты описанные по ссылке [[Обновление_с_3.6_до_3.8#Настройка PC Pusher|&amp;quot;Настройка PCS и PC Pusher&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
= Корректировка (смена) адресов серверов PayControl (при необходимости) =&lt;br /&gt;
&lt;br /&gt;
{{Предупреждение|Не рекомендуется дополнительно указывать номер порта, в случаях, если для HTTP используется порт 80, или для HTTPS используется порт 443}}&lt;br /&gt;
&lt;br /&gt;
== Учёт изменения адреса сервера PCS ==&lt;br /&gt;
&lt;br /&gt;
Для учёта изменения адреса сервера PCS необходимо произвести изменения в настройках PCE. В файле /opt/wildfly/bin/standalone.conf, в следующей строке, указав правильный адрес и при необходимости порт сервера PCS, а также уточнив протокол подключения (HTTP/HTTPS):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
JAVA_OPTS=&amp;quot;$JAVA_OPTS -Dpcservice.endpoint=http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/ws/PayControlServiceV3?wsdl -Duser.language=ru -Dpaycontrol.locale=ru&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Учёт изменения адреса сервера PC Pusher ==&lt;br /&gt;
&lt;br /&gt;
Для учёта изменения адреса сервера PC Pusher, необходимо, предварительно указав корректные данные (протокол (HTTP/HTTPS), имя или IP сервера, порт, идентификатор системы), выполнить запрос к БД PCS: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_internal_url = &#039;http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/pc-pusher-api/&#039; where systemid=&#039;&amp;lt;SYSTEMID&amp;gt;&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Учёт изменения внешнего адреса сервера PCE ==&lt;br /&gt;
&lt;br /&gt;
{{Предупреждение|Если система была переведена в промышленную эксплуатацию, при смене адреса для доступа мобильных устройств, не рекомендуется выводить из действия предыдущий адрес на протяжении всего срока действия выпущенных ключей пользователя. Иначе мобильное приложение потеряет доступ к серверу PayControl и для восстановления будет необходимо перевыпустить ключ и заново добавить его в приложение пользователя.}}&lt;br /&gt;
Для учёта изменения внешнего адреса сервера PayControl, по которому связываются мобильное приложение с сервером PayControl, необходимо, предварительно указав корректные данные (протокол (HTTP/HTTPS), имя или IP сервера, порт, идентификатор системы), выполнить запрос к БД PCS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_external_url = &#039;http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/PayControl-interaction-rest/&#039; where systemid=&#039;&amp;lt;SYSTEMID&amp;gt;&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_PayControl_v3.8_%D0%B2%D1%80%D1%83%D1%87%D0%BD%D1%83%D1%8E&amp;diff=664</id>
		<title>Установка компонентов сервера PayControl v3.8 вручную</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_PayControl_v3.8_%D0%B2%D1%80%D1%83%D1%87%D0%BD%D1%83%D1%8E&amp;diff=664"/>
		<updated>2022-07-27T10:49:56Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: /* Запуск проекта */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Подготовка БД=&lt;br /&gt;
* Создать базу данных и пользователя на сервере СУБД, где будет работать база данных PC Server (pcs-user, pcs-pass, pcs-db, pcs-db-host). Предоставить права на доступ пользователю к БД.&lt;br /&gt;
&lt;br /&gt;
=Установка Java=&lt;br /&gt;
Установить последнюю версию JRE 11.&lt;br /&gt;
=Установка Wildfly=&lt;br /&gt;
* Скачать актуальную версию WildFly Server (Jakarta EE 8 Full &amp;amp; Web Distribution) – https://wildfly.org/downloads/&lt;br /&gt;
Далее по тексту, под &#039;&#039;&#039;WF_PATH&#039;&#039;&#039; имеется в виду адрес созданной символьной ссылки.&lt;br /&gt;
==Linux==&lt;br /&gt;
При распаковке рекомендуется исключить кириллические символы в пути, а также пробелы.&lt;br /&gt;
* Распаковать Wildfly, например, в /opt/.&lt;br /&gt;
* Создать символьную ссылку /opt/wildfly на распакованную директорию. Пример команды:&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;ln -s /opt/wildfly-26.0.0.Final/ /opt/wildfly&amp;lt;/source&amp;gt;&lt;br /&gt;
==Windows==&lt;br /&gt;
При распаковке рекомендуется исключить кириллические символы в пути, а также пробелы.&lt;br /&gt;
* Распаковать Wildfly, например, в C:\.&lt;br /&gt;
* Создать символьную ссылку, к примеру &#039;&#039;C:\wildfly&#039;&#039;, на распакованную директорию. Пример команды:&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;mklink /D C:\wildfly C:\wildfly-26.0.0.Final\&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Удаление настроек WildFly по-умолчанию==&lt;br /&gt;
Для удаления настроек по-умолчанию, необходимо выполнить пункты описанные по ссылке [[Wildfly#Удаление настроек по умолчанию|Wildfly - Удаление настроек по умолчанию]]&lt;br /&gt;
&lt;br /&gt;
=Настройка подключения к БД PC Server=&lt;br /&gt;
==Добавление JDBC-драйвера СУБД==&lt;br /&gt;
===PostgreSQL===&lt;br /&gt;
* Скачать актуальный JDBC-драйвер по адресу https://jdbc.postgresql.org/&lt;br /&gt;
* Создать директорию &#039;&#039;WF_PATH/modules/org/postgresql/main/&#039;&#039;&lt;br /&gt;
* В директорию &#039;&#039;WF_PATH/modules/org/postgresql/main/&#039;&#039; поместить скачанный postgresql-*.*.*.jar&lt;br /&gt;
* Создать в этой же папке файл &#039;&#039;module.xml&#039;&#039; следующего содержания, указав имя файла драйвера вместо &amp;quot;JAR_PATH&amp;quot;:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;module xmlns=&amp;quot;urn:jboss:module:1.0&amp;quot; name=&amp;quot;org.postgresql&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;resources&amp;gt;&lt;br /&gt;
     &amp;lt;resource-root path=&amp;quot;JAR_PATH&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/resources&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.api&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.transaction.api&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.servlet.api&amp;quot; optional=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Добавить установленный модуль в качестве драйвера для подключения к СУБД в файл &#039;&#039;WF_PATH/standalone/configuration/standalone.xml&#039;&#039;, в секцию &#039;&#039;&amp;lt;datasources/drivers&amp;gt;&#039;&#039;, добавив следующий блок:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;driver name=&amp;quot;pgsql&amp;quot; module=&amp;quot;org.postgresql&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;driver-class&amp;gt;org.postgresql.Driver&amp;lt;/driver-class&amp;gt;&lt;br /&gt;
&amp;lt;/driver&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===MS SQL===&lt;br /&gt;
* Скачать JDBC-драйвер с сайта Microsoft https://docs.microsoft.com/ru-ru/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver15&lt;br /&gt;
* Создать директорию &#039;&#039;WF_PATH/modules/system/layers/base/com/microsoft/sqlserver/main/&#039;&#039;&lt;br /&gt;
* В директорию распаковать файлы и директории драйвера. Файлы драйвера (*.jar) должны располагаться непосредственно в директории &#039;&#039;main/&#039;&#039;&lt;br /&gt;
* Создать в этой же папке файл module.xml следующего содержания, заменив JAR_PATH на имя файла драйвера, например на &#039;&#039;mssql-jdbc-8.2.2.jre8.jar&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;module xmlns=&amp;quot;urn:jboss:module:1.3&amp;quot; name=&amp;quot;com.microsoft.sqlserver&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;resources&amp;gt;&lt;br /&gt;
    &amp;lt;resource-root path=&amp;quot;JAR_PATH&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/resources&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.api&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.transaction.api&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.xml.bind.api&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Добавить установленный модуль в качестве драйвера для подключения к СУБД в файл &#039;&#039;WF_PATH/standalone/configuration/standalone.xml&#039;&#039;, в секцию &#039;&#039;&amp;lt;datasources/drivers&amp;gt;&#039;&#039;, добавив следующий блок:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;driver name=&amp;quot;mssql&amp;quot; module=&amp;quot;com.microsoft.sqlserver&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;driver-class&amp;gt;com.microsoft.sqlserver.jdbc.SQLServerDriver&amp;lt;/driver-class&amp;gt;&lt;br /&gt;
&amp;lt;/driver&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Oracle===&lt;br /&gt;
* Скачать актуальный JDBC-драйвер по адресу https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html&lt;br /&gt;
* Создать директорию &#039;&#039;WF_PATH/modules/org/postgresql/main/&#039;&#039;&lt;br /&gt;
* В директорию &#039;&#039;WF_PATH/modules/system/layers/base/com/oracle/main/&#039;&#039; поместить скачанный ojdbc*.jar.&lt;br /&gt;
* Создать в этой же папке файл &#039;&#039;module.xml&#039;&#039; следующего содержания, указав имя файла драйвера вместо &amp;quot;JAR_PATH&amp;quot;:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;module xmlns=&amp;quot;urn:jboss:module:1.0&amp;quot; name=&amp;quot;com.oracle&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;resources&amp;gt;&lt;br /&gt;
     &amp;lt;resource-root path=&amp;quot;JAR_PATH&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/resources&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.api&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.transaction.api&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Добавить установленный модуль в качестве драйвера для подключения к СУБД в файл &#039;&#039;WF_PATH/standalone/configuration/standalone.xml&#039;&#039;, в секцию &#039;&#039;&amp;lt;datasources/drivers&amp;gt;&#039;&#039;, добавив следующий блок:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;driver name=&amp;quot;oracle&amp;quot; module=&amp;quot;com.oracle&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;driver-class&amp;gt;oracle.jdbc.driver.OracleDriver&amp;lt;/driver-class&amp;gt;&lt;br /&gt;
&amp;lt;/driver&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Особенности маппинга Oracle==&lt;br /&gt;
Для корректной установки PC Server с подключением к БД Oracle требуется создать/изменить некоторые таблицы вручную:&lt;br /&gt;
&lt;br /&gt;
Инструкция:&lt;br /&gt;
* Заменить по содержимому ниже &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TABLESPACE_NAME&amp;gt;&lt;br /&gt;
&amp;lt;USER_NAME&amp;gt;&lt;br /&gt;
&amp;lt;USER_PASS&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Из-под пользователя с правами на создание пользователей и табличных пространств выполнить:&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
---Создание табличного пространства и пользователя---&lt;br /&gt;
CREATE TABLESPACE &amp;lt;TABLESPACE_NAME&amp;gt; DATAFILE &#039;&amp;lt;TABLESPACE_NAME&amp;gt;.DAT&#039; SIZE 50M AUTOEXTEND ON;&lt;br /&gt;
CREATE USER &amp;quot;&amp;lt;USER_NAME&amp;gt;&amp;quot; IDENTIFIED BY &amp;quot;&amp;lt;USER_PASS&amp;gt;&amp;quot; DEFAULT TABLESPACE &amp;lt;TABLESPACE_NAME&amp;gt;;&lt;br /&gt;
GRANT CREATE SESSION TO &amp;quot;&amp;lt;USER_NAME&amp;gt;&amp;quot;;&lt;br /&gt;
GRANT CREATE TABLE TO &amp;quot;&amp;lt;USER_NAME&amp;gt;&amp;quot;;&lt;br /&gt;
GRANT CREATE SEQUENCE TO &amp;quot;&amp;lt;USER_NAME&amp;gt;&amp;quot;;&lt;br /&gt;
GRANT UNLIMITED TABLESPACE TO &amp;quot;&amp;lt;USER_NAME&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Из-под созданного пользователя, под которым будет производиться подключение PC к БД выполнить:&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
---Создание таблиц---&lt;br /&gt;
   CREATE TABLE &amp;quot;PC_SYS_PROPERTY&amp;quot; &lt;br /&gt;
   (&amp;quot;SETTING_ID&amp;quot; NUMBER(19,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;SETTING_NAME&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;SETTING_VALUE&amp;quot; VARCHAR2(255),&lt;br /&gt;
	 PRIMARY KEY (&amp;quot;SETTING_ID&amp;quot;),&lt;br /&gt;
	 CONSTRAINT &amp;quot;UK_BYEQYB1KICGD7SNXKM5L52582&amp;quot; UNIQUE (&amp;quot;SETTING_NAME&amp;quot;));&lt;br /&gt;
 &lt;br /&gt;
	CREATE TABLE &amp;quot;PC_SYSTEM&amp;quot; &lt;br /&gt;
   (	&amp;quot;SYSTEMID&amp;quot; VARCHAR2(36) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;EVENTS_POST_URL&amp;quot; VARCHAR2(1024), &lt;br /&gt;
	&amp;quot;NAME&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;PC_IS_EXTERNAL_URL&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;PC_IS_INTERNAL_URL&amp;quot; VARCHAR2(255), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;SYSTEMID&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
	CREATE TABLE &amp;quot;PC_SYSTEM_PARAMS&amp;quot; &lt;br /&gt;
(	&amp;quot;SYSTEMID&amp;quot; VARCHAR2(36) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;BILLED_DATE_REQUEST&amp;quot; CLOB, &lt;br /&gt;
	&amp;quot;BILLING_PERIOD&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;BILLED_DATE&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;BILLING_TYPE&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;DESCRIPTION&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;FRONT_END_URL&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;LICENSE&amp;quot; VARCHAR2(2048), &lt;br /&gt;
	&amp;quot;ONLINE_CONFIRMATION_URL&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;REGISTER_REQUEST&amp;quot; CLOB, &lt;br /&gt;
	&amp;quot;REPORT_TEMPLATE_PATH&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;USER_KEYS_EXPIRATION_PERIOD&amp;quot; NUMBER(10,0),&lt;br /&gt;
	 PRIMARY KEY (&amp;quot;SYSTEMID&amp;quot;));&lt;br /&gt;
 &lt;br /&gt;
	  CREATE TABLE &amp;quot;PC_USER&amp;quot; &lt;br /&gt;
   (&amp;quot;USERID&amp;quot; VARCHAR2(64) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;BILLED_DATE&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;SYSTEMID&amp;quot; VARCHAR2(36), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;USERID&amp;quot;),&lt;br /&gt;
	 CONSTRAINT &amp;quot;FKGLUVAW7N4TKK6V6XALY8IK3S2&amp;quot; FOREIGN KEY (&amp;quot;SYSTEMID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_SYSTEM&amp;quot; (&amp;quot;SYSTEMID&amp;quot;) ENABLE&lt;br /&gt;
   );&lt;br /&gt;
 &lt;br /&gt;
  CREATE TABLE &amp;quot;PC_TRANSACTION&amp;quot; &lt;br /&gt;
   (	&amp;quot;TRANSACTIONID&amp;quot; VARCHAR2(36) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;CALLBACK_URL&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;IS_CLEANED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;CONFIRM_CODE_LENGTH&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;CONFIRMATION_TYPE&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;DECLINE_REASON&amp;quot; VARCHAR2(64), &lt;br /&gt;
	&amp;quot;DATA_HASH&amp;quot; RAW(255), &lt;br /&gt;
	&amp;quot;NOTIF_ID&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;STATUS&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;TIME_TO_LIVE&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;DATA_BINARY&amp;quot; BLOB, &lt;br /&gt;
	&amp;quot;DATA_TEXT&amp;quot; VARCHAR2(3095), &lt;br /&gt;
	&amp;quot;USERID&amp;quot; VARCHAR2(64), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;TRANSACTIONID&amp;quot;),&lt;br /&gt;
	 CONSTRAINT &amp;quot;FKARQ3VEGMNJXEJK8ONU4HRHEN3&amp;quot; FOREIGN KEY (&amp;quot;USERID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_USER&amp;quot; (&amp;quot;USERID&amp;quot;) ENABLE&lt;br /&gt;
	 );&lt;br /&gt;
 &lt;br /&gt;
	CREATE TABLE &amp;quot;PC_CONFIRM_ATTEMPT&amp;quot; &lt;br /&gt;
   (	&amp;quot;CONFIRM_ATTEMPT_ID&amp;quot; NUMBER(19,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;CONFIRM_CODE&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;CONFIRM_RESULT&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;DATA_HASH&amp;quot; RAW(255), &lt;br /&gt;
	&amp;quot;SIGNATURE&amp;quot; VARCHAR2(512), &lt;br /&gt;
	&amp;quot;TRANSACTIONID&amp;quot; VARCHAR2(36), &lt;br /&gt;
	&amp;quot;USERID&amp;quot; VARCHAR2(64), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;CONFIRM_ATTEMPT_ID&amp;quot;), &lt;br /&gt;
	 CONSTRAINT &amp;quot;FK5258W9Y6WQ4FY55U41WB30OWG&amp;quot; FOREIGN KEY (&amp;quot;TRANSACTIONID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_TRANSACTION&amp;quot; (&amp;quot;TRANSACTIONID&amp;quot;) ENABLE, &lt;br /&gt;
	 CONSTRAINT &amp;quot;FKHEJP6UYKY6U4X8QFDPV4VA63Y&amp;quot; FOREIGN KEY (&amp;quot;USERID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_USER&amp;quot; (&amp;quot;USERID&amp;quot;) ENABLE&lt;br /&gt;
   );&lt;br /&gt;
 &lt;br /&gt;
	CREATE TABLE &amp;quot;PC_DELAYEDKEYINFO&amp;quot; &lt;br /&gt;
   (	&amp;quot;TYPE&amp;quot; NUMBER(10,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;DELAYEDKEYID&amp;quot; NUMBER(19,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;KEY_CONTAINER_ID&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;KEY_CONTENT&amp;quot; RAW(255), &lt;br /&gt;
	&amp;quot;EXPIRATION_DATE&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;USER_KEY_VERSION&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;USERID&amp;quot; VARCHAR2(64), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;DELAYEDKEYID&amp;quot;), &lt;br /&gt;
	 CONSTRAINT &amp;quot;FK73X95ORVBL8BA0T3A3WEWADRF&amp;quot; FOREIGN KEY (&amp;quot;USERID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_USER&amp;quot; (&amp;quot;USERID&amp;quot;) ENABLE&lt;br /&gt;
   );&lt;br /&gt;
 &lt;br /&gt;
CREATE TABLE &amp;quot;PC_DEVICE&amp;quot; &lt;br /&gt;
   (	&amp;quot;TYPE&amp;quot; NUMBER(10,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;DEVICEID&amp;quot; NUMBER(19,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;DEVICE_PUSH_ID&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;USERID&amp;quot; VARCHAR2(64), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;DEVICEID&amp;quot;), &lt;br /&gt;
	 CONSTRAINT &amp;quot;FK8CMG562COTMP53MVGRDDF1EYA&amp;quot; FOREIGN KEY (&amp;quot;USERID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_USER&amp;quot; (&amp;quot;USERID&amp;quot;) ENABLE&lt;br /&gt;
   );&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    CREATE TABLE &amp;quot;PC_KEYINFO&amp;quot; &lt;br /&gt;
   (	&amp;quot;TYPE&amp;quot; NUMBER(10,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;KEYID&amp;quot; NUMBER(19,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;KEY_CONTAINER_ID&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;KEY_CONTENT&amp;quot; RAW(255), &lt;br /&gt;
	&amp;quot;EXPIRATION_DATE&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;DEVICE_FINGERPRINT&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;USER_KEY_VERSION&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;USERID&amp;quot; VARCHAR2(64), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;KEYID&amp;quot;), &lt;br /&gt;
	 CONSTRAINT &amp;quot;FKN3VEB4OTVNAIE35AWBD0HDS90&amp;quot; FOREIGN KEY (&amp;quot;USERID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_USER&amp;quot; (&amp;quot;USERID&amp;quot;) ENABLE&lt;br /&gt;
   );&lt;br /&gt;
 &lt;br /&gt;
  CREATE TABLE &amp;quot;PC_PUBLICKEY&amp;quot; &lt;br /&gt;
   (	&amp;quot;PUBLICKEYID&amp;quot; NUMBER(19,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;PUBLIC_KEY&amp;quot; RAW(512), &lt;br /&gt;
	&amp;quot;KEYID&amp;quot; NUMBER(19,0), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;PUBLICKEYID&amp;quot;), &lt;br /&gt;
	 CONSTRAINT &amp;quot;FKEMTGHSA74S1WI903R2TN7T3N&amp;quot; FOREIGN KEY (&amp;quot;KEYID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_KEYINFO&amp;quot; (&amp;quot;KEYID&amp;quot;) ENABLE&lt;br /&gt;
   );&lt;br /&gt;
&lt;br /&gt;
  CREATE TABLE &amp;quot;PC_EVENT&amp;quot; &lt;br /&gt;
   (	&amp;quot;EVENTID&amp;quot; NUMBER(19,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;AUTH_CODE&amp;quot; VARCHAR2(64), &lt;br /&gt;
	&amp;quot;DEVICE_EVENTID&amp;quot; VARCHAR2(36), &lt;br /&gt;
	&amp;quot;DEVICE_INFO&amp;quot; CLOB, &lt;br /&gt;
	&amp;quot;DEVICE_TIME&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;EVENTPOSTURL&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;REQUEST_HMAC&amp;quot; VARCHAR2(64), &lt;br /&gt;
	&amp;quot;REQUEST_HASH&amp;quot; VARCHAR2(64), &lt;br /&gt;
	&amp;quot;REQUEST_RESULT&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;REQUEST_TYPE&amp;quot; VARCHAR2(36), &lt;br /&gt;
	&amp;quot;REQUESTER_IP&amp;quot; VARCHAR2(15), &lt;br /&gt;
	&amp;quot;SESSIONID&amp;quot; VARCHAR2(36), &lt;br /&gt;
	&amp;quot;TRANSACTIONID&amp;quot; VARCHAR2(36), &lt;br /&gt;
	&amp;quot;USERID&amp;quot; VARCHAR2(64), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;EVENTID&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
---Создание индексов&lt;br /&gt;
CREATE INDEX pc_keyinfo1_idx ON PC_KEYINFO (userID, expiration_date, is_deleted);&lt;br /&gt;
CREATE INDEX pc_delayedkeyinfo1_idx ON PC_DELAYEDKEYINFO (userID, is_deleted);&lt;br /&gt;
CREATE INDEX pc_device1_idx ON PC_DEVICE (userID, is_deleted); &lt;br /&gt;
CREATE INDEX pc_transaction1_idx ON PC_TRANSACTION (userID, status);&lt;br /&gt;
CREATE INDEX pc_device2_idx ON PC_DEVICE (userID); &lt;br /&gt;
CREATE INDEX pc_keyinfo2_idx ON PC_KEYINFO (userID); &lt;br /&gt;
CREATE INDEX pc_transaction2_idx ON PC_TRANSACTION (userID); &lt;br /&gt;
CREATE INDEX pc_user1_idx ON PC_USER (systemID);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
---Создание очередей---&lt;br /&gt;
create sequence PC_ATTEMPT_SEQ start with 1 increment by 1;&lt;br /&gt;
create sequence PC_DELAYEDKEYINFO_SEQ start with 1 increment by 1;&lt;br /&gt;
create sequence PC_DEVICE_SEQ start with 1 increment by 1;&lt;br /&gt;
create sequence PC_KEYINFO_SEQ start with 1 increment by 1;&lt;br /&gt;
create sequence PC_PUBLICKEY_SEQ start with 1 increment by 1;&lt;br /&gt;
create sequence PC_SETTING_SEQ start with 1 increment by 1;&lt;br /&gt;
create sequence PC_EVENT_SEQ start with 1 increment by 1;&lt;br /&gt;
create sequence PC_PUSH_SEQ start with 1 increment by 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Добавление источников данных для PC Server==&lt;br /&gt;
[[PC_Pusher_5.2|&#039;&#039;&#039;При установке PC Pusher версии 5.2 и выше, подключение к БД PC Pusher не требуется&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
===PostgreSQL===&lt;br /&gt;
====PC Server====&lt;br /&gt;
В файл &#039;&#039;WF_PATH/standalone/configuration/standalone.xml&#039;&#039; внести следующие изменения добавить новый источник данных в секцию &#039;&#039;&amp;lt;datasources&amp;gt;&amp;lt;/datasources&amp;gt;&#039;&#039; заменив pcs-db-host, port, pcs-db, pcs-user, pcs-pass:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;datasource jta=&amp;quot;true&amp;quot; jndi-name=&amp;quot;java:jboss/datasources/PayControlDS&amp;quot; pool-name=&amp;quot;PayControlDS&amp;quot; enabled=&amp;quot;true&amp;quot; use-ccm=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;connection-url&amp;gt;jdbc:postgresql://pcs-db-host:port/pcs-db&amp;lt;/connection-url&amp;gt;&lt;br /&gt;
    &amp;lt;driver-class&amp;gt;org.postgresql.Driver&amp;lt;/driver-class&amp;gt;&lt;br /&gt;
    &amp;lt;driver&amp;gt;pgsql&amp;lt;/driver&amp;gt;&lt;br /&gt;
    &amp;lt;security&amp;gt;&lt;br /&gt;
        &amp;lt;user-name&amp;gt;pcs-user&amp;lt;/user-name&amp;gt;&lt;br /&gt;
        &amp;lt;password&amp;gt;pcs-pass&amp;lt;/password&amp;gt;&lt;br /&gt;
    &amp;lt;/security&amp;gt;&lt;br /&gt;
    &amp;lt;validation&amp;gt;&lt;br /&gt;
        &amp;lt;valid-connection-checker class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;background-validation&amp;gt;true&amp;lt;/background-validation&amp;gt;&lt;br /&gt;
        &amp;lt;exception-sorter class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/validation&amp;gt;&lt;br /&gt;
&amp;lt;/datasource&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===MS SQL===&lt;br /&gt;
====PC Server====&lt;br /&gt;
В файл &#039;&#039;WF_PATH/standalone/configuration/standalone.xml&#039;&#039; внести следующие изменения добавить новый источник данных в секцию &#039;&#039;&amp;lt;datasources&amp;gt;&amp;lt;/datasources&amp;gt;&#039;&#039; заменив pcs-db-host, port, pcs-db-host, pcs-db, pcs-user, pcs-pass:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;datasource jta=&amp;quot;true&amp;quot; jndi-name=&amp;quot;java:jboss/datasources/PayControlDS&amp;quot; pool-name=&amp;quot;PayControlDS&amp;quot; enabled=&amp;quot;true&amp;quot; use-ccm=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;connection-url&amp;gt;jdbc:sqlserver://pcs-db-host:port;databaseName=pcs-db&amp;lt;/connection-url&amp;gt;&lt;br /&gt;
	&amp;lt;driver&amp;gt;mssql&amp;lt;/driver&amp;gt;&lt;br /&gt;
	&amp;lt;security&amp;gt;&lt;br /&gt;
		&amp;lt;user-name&amp;gt;pcs-user&amp;lt;/user-name&amp;gt;&lt;br /&gt;
		&amp;lt;password&amp;gt;pcs-pass&amp;lt;/password&amp;gt;&lt;br /&gt;
	&amp;lt;/security&amp;gt;&lt;br /&gt;
	&amp;lt;pool&amp;gt;&lt;br /&gt;
		&amp;lt;min-pool-size&amp;gt;5&amp;lt;/min-pool-size&amp;gt;&lt;br /&gt;
		&amp;lt;max-pool-size&amp;gt;50&amp;lt;/max-pool-size&amp;gt;&lt;br /&gt;
		&amp;lt;prefill&amp;gt;false&amp;lt;/prefill&amp;gt;&lt;br /&gt;
		&amp;lt;use-strict-min&amp;gt;false&amp;lt;/use-strict-min&amp;gt;&lt;br /&gt;
		&amp;lt;flush-strategy&amp;gt;FailingConnectionOnly&amp;lt;/flush-strategy&amp;gt;&lt;br /&gt;
	&amp;lt;/pool&amp;gt;&lt;br /&gt;
	&amp;lt;validation&amp;gt;&lt;br /&gt;
		&amp;lt;valid-connection-checker class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker&amp;quot;&amp;gt;&amp;lt;/valid-connection-checker&amp;gt;&lt;br /&gt;
	&amp;lt;/validation&amp;gt;&lt;br /&gt;
&amp;lt;/datasource&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Oracle===&lt;br /&gt;
====PC Server====&lt;br /&gt;
В файл &#039;&#039;WF_PATH/standalone/configuration/standalone.xml&#039;&#039; внести следующие изменения добавить новый источник данных в секцию &#039;&#039;&amp;lt;datasources&amp;gt;&amp;lt;/datasources&amp;gt;&#039;&#039; заменив pcs-db-host, port, pcs-db, pcs-user, pcs-pass:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;datasource jta=&amp;quot;true&amp;quot; jndi-name=&amp;quot;java:jboss/datasources/PayControlDS&amp;quot; pool-name=&amp;quot;PayControlDS&amp;quot; enabled=&amp;quot;true&amp;quot; use-ccm=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;connection-url&amp;gt;jdbc:oracle:thin:@pcs-db-host:port:sid&amp;lt;/connection-url&amp;gt;&lt;br /&gt;
    &amp;lt;driver-class&amp;gt;org.postgresql.Driver&amp;lt;/driver-class&amp;gt;&lt;br /&gt;
    &amp;lt;driver&amp;gt;oracle&amp;lt;/driver&amp;gt;&lt;br /&gt;
    &amp;lt;security&amp;gt;&lt;br /&gt;
        &amp;lt;user-name&amp;gt;pcs-user&amp;lt;/user-name&amp;gt;&lt;br /&gt;
        &amp;lt;password&amp;gt;pcs-pass&amp;lt;/password&amp;gt;&lt;br /&gt;
    &amp;lt;/security&amp;gt;&lt;br /&gt;
    &amp;lt;pool&amp;gt;&lt;br /&gt;
        &amp;lt;min-pool-size&amp;gt;1&amp;lt;/min-pool-size&amp;gt;&lt;br /&gt;
        &amp;lt;max-pool-size&amp;gt;5&amp;lt;/max-pool-size&amp;gt;&lt;br /&gt;
        &amp;lt;prefill&amp;gt;true&amp;lt;/prefill&amp;gt;&lt;br /&gt;
    &amp;lt;/pool&amp;gt;&lt;br /&gt;
    &amp;lt;validation&amp;gt;&lt;br /&gt;
        &amp;lt;check-valid-connection-sql&amp;gt;select 1 from dual&amp;lt;/check-valid-connection-sql&amp;gt;&lt;br /&gt;
        &amp;lt;validate-on-match&amp;gt;false&amp;lt;/validate-on-match&amp;gt;&lt;br /&gt;
        &amp;lt;background-validation&amp;gt;true&amp;lt;/background-validation&amp;gt;&lt;br /&gt;
        &amp;lt;background-validation-millis&amp;gt;10000&amp;lt;/background-validation-millis&amp;gt;&lt;br /&gt;
    &amp;lt;/validation&amp;gt;&lt;br /&gt;
&amp;lt;/datasource&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Настройка подключения PCIS External к PC Server=&lt;br /&gt;
На сервере PCIS External необходимо установить адрес сервера PC Server (host и port заменить на реальные значения). Для этого:&lt;br /&gt;
* на Linux в файл &#039;&#039;WF_PATH/bin/standalone.conf&#039;&#039; нужно добавить &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;JAVA_OPTS=&amp;quot;$JAVA_OPTS -Dpcservice.endpoint=http://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/ws/PayControlServiceV3?wsdl -Duser.language=ru -Dpaycontrol.locale=ru&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* на Windows в файл &#039;&#039;WF_PATH/bin/standalone.conf.bat&#039;&#039; нужно добавить &amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;set &amp;quot;JAVA_OPTS=%JAVA_OPTS% -Dpcservice.endpoint=http://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/ws/PayControlServiceV3?wsdl -Duser.language=ru -Dpaycontrol.locale=ru&amp;quot;&amp;lt;/syntaxhighlight&amp;gt; выше метки :JAVA_OPTS_SET&lt;br /&gt;
&lt;br /&gt;
=Настройка выделения памяти серверу=&lt;br /&gt;
На всех серверах установить максимальный объем доступной для использования памяти:&lt;br /&gt;
* на Linux в &#039;&#039;WF_PATH/bin/standalone.conf&#039;&#039; указать объём «ОбщийОбъёмОЗУ - 512MB»&lt;br /&gt;
* на Windows в &#039;&#039;WF_PATH\bin\standalone.conf.bat&#039;&#039; указать объём «ОбщийОбъёмОЗУ - 1536MB»&lt;br /&gt;
Для этого в строке&lt;br /&gt;
&#039;&#039;JAVA_OPTS=&amp;quot;-Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true&amp;quot;&#039;&#039; поменять значение параметра &#039;&#039;Xmx&#039;&#039; на выделяемый объём.&lt;br /&gt;
==Запуск проекта==&lt;br /&gt;
* Загрузить файлы модулей требуемых компонентов последних версий из репозитория по адресу https://repo.paycontrol.org/server/maven/tech/paycon/server/ (при этом модуль PCPusher необходимо взять из ветки 5.x):&lt;br /&gt;
** PC Server — https://repo.paycontrol.org/server/maven/tech/paycon/server/PayControl-services-module/, файл &#039;&#039;PayControl-services-module-&amp;lt;VERSION&amp;gt;.ear&#039;&#039;&lt;br /&gt;
** PC Pusher — https://repo.paycontrol.org/server/maven/tech/paycon/server/pc-pusher/, файл &#039;&#039;pc-pusher-&amp;lt;VERSION&amp;gt;.war&#039;&#039;&lt;br /&gt;
** PCIS External — https://repo.paycontrol.org/server/maven/tech/paycon/server/PayControl-interaction-rest/, файл &#039;&#039;PayControl-interaction-rest-&amp;lt;VERSION&amp;gt;.war&#039;&#039;&lt;br /&gt;
* Скопировать файл приложения сервера &#039;&#039;WF_PATH\standalone\deployments\&#039;&#039;. Один сервер WildFly может запускать одно или несколько приложений сервера.&lt;br /&gt;
* Запустить&lt;br /&gt;
** Linux &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;WF_PATH/bin/standalone.sh -b 0.0.0.0&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** Windows &amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;WF_PATH\bin\standalone.bat -b 0.0.0.0&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*:  где -b 0.0.0.0 - позволяет подключаться к серверу используя любой его интерфейс (опция bind)&lt;br /&gt;
* Дождаться старта WF, проверить, что нет ошибок запуска.&lt;br /&gt;
&lt;br /&gt;
==Настройка автозапуска службы сервера==&lt;br /&gt;
===Linux===&lt;br /&gt;
Для настройки автозапуска службы, перейти в каталог WF_PATH/docs/contrib/scripts/systemd/ и выполнить шаги, описанные в файле README в этом каталоге, за исключением пунктов распаковки и создания символьной ссылки на каталог.&lt;br /&gt;
Пункт &amp;lt;code&amp;gt;chown -R wildfly:wildfly /opt/wildfly&amp;lt;/code&amp;gt; необходимо выполнить с параметрами «-RH» (параметр «H» указывает, что если на вход подана символьная ссылка, то нужно пойти вглубь каталога, на который она ссылается). Таким образом команда должна выглядеть следующим образом:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;chown -RHv wildfly:wildfly /opt/wildfly&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
При запуске в качестве службы, возможно отклонение запросов. В таком случае необходимо установить параметры JAVA_OPTS в файле standalone.conf:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;JAVA_OPTS=&amp;quot;$JAVA_OPTS -Djboss.bind.address=0.0.0.0&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Windows===&lt;br /&gt;
Скопировать папку&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;WF_PATH\docs\contrib\scripts\service\&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
в папку&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;WF_PATH\bin\&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выполнить&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;WF_PATH\bin\service\service.bat install /startup&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
При запуске в качестве службы, возможно отклонение запросов. В таком случае необходимо установить параметры JAVA_OPTS в файле standalone.conf.bat выше метки :JAVA_OPTS_SET.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;set &amp;quot;JAVA_OPTS=%JAVA_OPTS% -Djboss.bind.address=0.0.0.0&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==URL-фильтрация при совмещении PC Pusher и PCIS External==&lt;br /&gt;
При совмещении ролей PC Pusher и PCIS External на одном сервере необходимо исключить возможность выполнения запросов PC Pusher со стороны сети интернет. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо со стороны сети интернет разрешить подключения только на конечную точку PCIS External. &amp;lt;br&amp;gt;&lt;br /&gt;
Конечная точка PCIS External - &#039;&#039;&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/PayControl-interaction-rest/*&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Доступ к другим конечным точкам должен быть запрещен.&lt;br /&gt;
&lt;br /&gt;
При этом доступ к PC Pusher со стороны PC Server должен сохраниться. &amp;lt;br&amp;gt;&lt;br /&gt;
Конечная точка PC Pusher - &#039;&#039;&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/pc-pusher-api/*&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Внесение изменений в БД=&lt;br /&gt;
==Создание индексов БД PC Server==&lt;br /&gt;
После первого запуска приложения, в базе данных будут созданы необходимые таблицы.&lt;br /&gt;
&lt;br /&gt;
На продуктивной среде после этого необходимо создать индексы в базе данных(&#039;&#039;&#039;за исключением Oracle&#039;&#039;&#039;) PC Server.&lt;br /&gt;
&lt;br /&gt;
Для этого выполните SQL скрипт:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
create index pc_keyinfo1_idx on PC_KEYINFO (userID, expiration_date, is_deleted);&lt;br /&gt;
create index pc_delayedkeyinfo1_idx on PC_DELAYEDKEYINFO (userID, is_deleted);&lt;br /&gt;
create index pc_device1_idx on PC_DEVICE (userID, is_deleted); &lt;br /&gt;
create index pc_transaction1_idx on PC_TRANSACTION (userID, status);&lt;br /&gt;
create index pc_device2_idx on PC_DEVICE (userID); &lt;br /&gt;
create index pc_keyinfo2_idx on PC_KEYINFO (userID); &lt;br /&gt;
create index pc_transaction2_idx on PC_TRANSACTION (userID); &lt;br /&gt;
create index pc_user1_idx on PC_USER (systemID);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Корректировка типов данных для MS SQL==&lt;br /&gt;
Java-приложение при создании таблиц БД неоптимально устанавливает тип для одного из полей для СУБД MS SQL.&lt;br /&gt;
&lt;br /&gt;
Для его корректировки после того, как таблицы созданы, выполните запрос&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
ALTER TABLE PC_TRANSACTION ALTER COLUMN DATA_BINARY image;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Регистрация системы==&lt;br /&gt;
После успешного запуска приложения PC Server до начала работы необходимо зарегистрировать прикладную систему.&lt;br /&gt;
&lt;br /&gt;
Это действие выполняется путем отправки на PC Server HTTP POST запроса, сформированного ST/Airome. Содержание запроса предоставляется дополнительно.&lt;br /&gt;
&lt;br /&gt;
Для отправки запроса можно использовать любое средство отправки HTTP-запросов.&lt;br /&gt;
===Примеры===&lt;br /&gt;
&lt;br /&gt;
====Curl====&lt;br /&gt;
cURL (в ОС Linux доступна в репозиториях, для ОС Windows можно скачать с сайта разработчика https://curl.haxx.se/download.html):&lt;br /&gt;
* 1. Скопировать файл RegisterSystemRequest.xml (если название файла с запросом на регистрацию отличается, то необходимо либо переименовать его, либо изменить имя этого файла в параметрах команды curl) на сервер в любую директорию на машину, с которой будет производиться запуск команды curl.&lt;br /&gt;
* 2. Проверить содержимое файла. Если файл выглядит как&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;soapenv:Envelope xmlns:soapenv=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:pay=&amp;quot;http://ws.safetech.ru/PayControlV3/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;soapenv:Header/&amp;gt;&lt;br /&gt;
   &amp;lt;soapenv:Body&amp;gt;&lt;br /&gt;
      &amp;lt;pay:registerSystemRequest&amp;gt;&lt;br /&gt;
         &amp;lt;request&amp;gt;PD94bWwgdmVyc2lvbj0iMJlIHhtbG5zPSJodHRwOi8vd3Muc2FmZXRlY2gucS4w... ...ZXF1JlIHhtbG5zPSJodHRwOi8vd3Muc2FmZXRlY2gucnUZ==&amp;lt;/request&amp;gt;&lt;br /&gt;
      &amp;lt;/pay:registerSystemRequest&amp;gt;&lt;br /&gt;
   &amp;lt;/soapenv:Body&amp;gt;&lt;br /&gt;
&amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
то, перейти к п.4.&lt;br /&gt;
* 3. Если файл выглядит как&lt;br /&gt;
&amp;lt;code&amp;gt;PD94bWwgdmVyc2lvbj0iMJlIHhtbG5zPSJodHRwOi8vd3Muc2FmZXRlY2gucS4w... ...ZXF1JlIHhtbG5zPSJodHRwOi8vd3Muc2FmZXRlY2gucnUZ==&amp;lt;/code&amp;gt;&lt;br /&gt;
то необходимо добавить в его начало&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;soapenv:Envelope xmlns:soapenv=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:pay=&amp;quot;http://ws.safetech.ru/PayControlV3/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;soapenv:Header/&amp;gt;&lt;br /&gt;
   &amp;lt;soapenv:Body&amp;gt;&lt;br /&gt;
      &amp;lt;pay:registerSystemRequest&amp;gt;&lt;br /&gt;
         &amp;lt;request&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
и в его конец&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/request&amp;gt;&lt;br /&gt;
      &amp;lt;/pay:registerSystemRequest&amp;gt;&lt;br /&gt;
   &amp;lt;/soapenv:Body&amp;gt;&lt;br /&gt;
&amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
чтобы он принял вид, как представлено в п.2.&lt;br /&gt;
* 4. Выполнить команду (в той-же директории, где располагается скопированный/изменённый файл), заменив &amp;lt;PCServer_IP/localhost&amp;gt; на DNS-имя сервера или его IP-адрес:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl --header &amp;quot;Content-Type: text/xml;charset=UTF-8&amp;quot; --header &amp;quot;SOAPAction: registerSystem&amp;quot; --data @RegisterSystemRequest.xml  &amp;lt;PCServer_IP/localhost&amp;gt;:8080/ws/PayControlServiceV3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Если в составе ответа пришла строка &amp;lt;systemId&amp;gt;SYSTEMID ВАШЕЙ ПРИКЛАДНОЙ СИСТЕМЫ&amp;lt;/systemId&amp;gt;, значит прикладная система зарегистрирована. &lt;br /&gt;
* Если в составе ответа было &amp;lt;soap:Fault&amp;gt;, значит возникла проблема на этапе регистрации.&lt;br /&gt;
* После успешной регистрации прикладной системы на сервере, файл registerSystem.xml больше не нужен.&lt;br /&gt;
&lt;br /&gt;
====SOAP UI====&lt;br /&gt;
* 1. Добавить подключение к серверу PCS, указав адрес WSDL схемы:&lt;br /&gt;
[[Файл:Soap add conn.jpg]]&lt;br /&gt;
* 2. Создать новый запрос из категории registerSystem&lt;br /&gt;
[[Файл:Soap register system.jpg]]&lt;br /&gt;
* 3. Выполнить запрос&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Если в составе ответа пришла строка &amp;lt;systemId&amp;gt;SYSTEMID ВАШЕЙ ПРИКЛАДНОЙ СИСТЕМЫ&amp;lt;/systemId&amp;gt;, значит прикладная система зарегистрирована. &lt;br /&gt;
* Если в составе ответа было &amp;lt;soap:Fault&amp;gt;, значит возникла проблема на этапе регистрации.&lt;br /&gt;
&lt;br /&gt;
==Доступ к сервисам==&lt;br /&gt;
Сервис PC Server доступен по ссылкам (при запросе на эти 2 адреса ниже, должна возвратиться WSDL-схема):&lt;br /&gt;
* http://&amp;lt;IP или имя сервера с WF &amp;gt;:8080/ws/PayControlServiceV3?wsdl&lt;br /&gt;
* http://&amp;lt;IP или имя сервера с WF &amp;gt;:8080/ws/PayControlReportService?wsdl&lt;br /&gt;
&lt;br /&gt;
Адрес конечной точки PC Pusher по умолчанию:&lt;br /&gt;
* http://&amp;lt;IP или имя сервера с WF &amp;gt;:8080/pc-pusher-api/&lt;br /&gt;
Адрес PC Pusher health check:&lt;br /&gt;
* http://&amp;lt;IP или имя сервера с WF &amp;gt;:8080/pc-pusher-api/health_check&lt;br /&gt;
&lt;br /&gt;
PCIS External (при запросе на этот адрес должно возвратиться «Not Found». Также необходимо обратить внимание, на то, какой протокол разрешён – HTTP или HTTPS):&lt;br /&gt;
* http://&amp;lt;IP или имя сервера с WF &amp;gt;:8080/PayControl-interaction-rest/&lt;br /&gt;
=Настройка PC Pusher для отправки пушей в другое приложение (при необходимости)=&lt;br /&gt;
Необходимо выполнить пункты описанные по ссылке [[Обновление_с_3.6_до_3.8#Настройка PC Pusher|&amp;quot;Настройка PCS и PC Pusher&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
=Корректировка (смена) адресов серверов PayControl (при необходимости)=&lt;br /&gt;
{{Предупреждение|Не рекомендуется дополнительно указывать номер порта, в случаях, если для HTTP используется порт 80, или для HTTPS используется порт 443}}&lt;br /&gt;
==Учёт изменения адреса сервера PCS==&lt;br /&gt;
Для учёта изменения адреса сервера PCS необходимо произвести изменения в настройках PCIS External. В файле /opt/wildfly/bin/standalone.conf, в следующей строке, указав правильный адрес и при необходимости порт сервера PCS, а также уточнив протокол подключения (HTTP/HTTPS):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
JAVA_OPTS=&amp;quot;$JAVA_OPTS -Dpcservice.endpoint=http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/ws/PayControlServiceV3?wsdl -Duser.language=ru -Dpaycontrol.locale=ru&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Учёт изменения адреса сервера PC Pusher==&lt;br /&gt;
Для учёта изменения адреса сервера PC Pusher, необходимо, предварительно указав корректные данные (протокол (HTTP/HTTPS), имя или IP сервера, порт, идентификатор системы), выполнить запрос к БД PCS: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_internal_url = &#039;http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/pc-pusher-api/&#039; where systemid=&#039;&amp;lt;SYSTEMID&amp;gt;&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Учёт изменения внешнего адреса сервера PCIS External==&lt;br /&gt;
{{Предупреждение|Если система была переведена в промышленную эксплуатацию, при смене адреса для доступа мобильных устройств, не рекомендуется выводить из действия предыдущий адрес на протяжении всего срока действия выпущенных ключей пользователя. Иначе мобильное приложение потеряет доступ к серверу PayControl и для восстановления будет необходимо перевыпустить ключ и заново добавить его в приложение пользователя.}}&lt;br /&gt;
Для учёта изменения внешнего адреса сервера PayControl, по которому связываются мобильное приложение с сервером PayControl, необходимо, предварительно указав корректные данные (протокол (HTTP/HTTPS), имя или IP сервера, порт, идентификатор системы), выполнить запрос к БД PCS:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_external_url = &#039;http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/PayControl-interaction-rest/&#039; where systemid=&#039;&amp;lt;SYSTEMID&amp;gt;&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_PayControl_v3.8_%D0%B2%D1%80%D1%83%D1%87%D0%BD%D1%83%D1%8E&amp;diff=663</id>
		<title>Установка компонентов сервера PayControl v3.8 вручную</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_PayControl_v3.8_%D0%B2%D1%80%D1%83%D1%87%D0%BD%D1%83%D1%8E&amp;diff=663"/>
		<updated>2022-07-20T15:55:28Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Подготовка БД=&lt;br /&gt;
* Создать базу данных и пользователя на сервере СУБД, где будет работать база данных PC Server (pcs-user, pcs-pass, pcs-db, pcs-db-host). Предоставить права на доступ пользователю к БД.&lt;br /&gt;
&lt;br /&gt;
=Установка Java=&lt;br /&gt;
Установить последнюю версию JRE 11.&lt;br /&gt;
=Установка Wildfly=&lt;br /&gt;
* Скачать актуальную версию WildFly Server (Jakarta EE 8 Full &amp;amp; Web Distribution) – https://wildfly.org/downloads/&lt;br /&gt;
Далее по тексту, под &#039;&#039;&#039;WF_PATH&#039;&#039;&#039; имеется в виду адрес созданной символьной ссылки.&lt;br /&gt;
==Linux==&lt;br /&gt;
При распаковке рекомендуется исключить кириллические символы в пути, а также пробелы.&lt;br /&gt;
* Распаковать Wildfly, например, в /opt/.&lt;br /&gt;
* Создать символьную ссылку /opt/wildfly на распакованную директорию. Пример команды:&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;ln -s /opt/wildfly-26.0.0.Final/ /opt/wildfly&amp;lt;/source&amp;gt;&lt;br /&gt;
==Windows==&lt;br /&gt;
При распаковке рекомендуется исключить кириллические символы в пути, а также пробелы.&lt;br /&gt;
* Распаковать Wildfly, например, в C:\.&lt;br /&gt;
* Создать символьную ссылку, к примеру &#039;&#039;C:\wildfly&#039;&#039;, на распакованную директорию. Пример команды:&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;mklink /D C:\wildfly C:\wildfly-26.0.0.Final\&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Удаление настроек WildFly по-умолчанию==&lt;br /&gt;
Для удаления настроек по-умолчанию, необходимо выполнить пункты описанные по ссылке [[Wildfly#Удаление настроек по умолчанию|Wildfly - Удаление настроек по умолчанию]]&lt;br /&gt;
&lt;br /&gt;
=Настройка подключения к БД PC Server=&lt;br /&gt;
==Добавление JDBC-драйвера СУБД==&lt;br /&gt;
===PostgreSQL===&lt;br /&gt;
* Скачать актуальный JDBC-драйвер по адресу https://jdbc.postgresql.org/&lt;br /&gt;
* Создать директорию &#039;&#039;WF_PATH/modules/org/postgresql/main/&#039;&#039;&lt;br /&gt;
* В директорию &#039;&#039;WF_PATH/modules/org/postgresql/main/&#039;&#039; поместить скачанный postgresql-*.*.*.jar&lt;br /&gt;
* Создать в этой же папке файл &#039;&#039;module.xml&#039;&#039; следующего содержания, указав имя файла драйвера вместо &amp;quot;JAR_PATH&amp;quot;:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;module xmlns=&amp;quot;urn:jboss:module:1.0&amp;quot; name=&amp;quot;org.postgresql&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;resources&amp;gt;&lt;br /&gt;
     &amp;lt;resource-root path=&amp;quot;JAR_PATH&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/resources&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.api&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.transaction.api&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.servlet.api&amp;quot; optional=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Добавить установленный модуль в качестве драйвера для подключения к СУБД в файл &#039;&#039;WF_PATH/standalone/configuration/standalone.xml&#039;&#039;, в секцию &#039;&#039;&amp;lt;datasources/drivers&amp;gt;&#039;&#039;, добавив следующий блок:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;driver name=&amp;quot;pgsql&amp;quot; module=&amp;quot;org.postgresql&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;driver-class&amp;gt;org.postgresql.Driver&amp;lt;/driver-class&amp;gt;&lt;br /&gt;
&amp;lt;/driver&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===MS SQL===&lt;br /&gt;
* Скачать JDBC-драйвер с сайта Microsoft https://docs.microsoft.com/ru-ru/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver15&lt;br /&gt;
* Создать директорию &#039;&#039;WF_PATH/modules/system/layers/base/com/microsoft/sqlserver/main/&#039;&#039;&lt;br /&gt;
* В директорию распаковать файлы и директории драйвера. Файлы драйвера (*.jar) должны располагаться непосредственно в директории &#039;&#039;main/&#039;&#039;&lt;br /&gt;
* Создать в этой же папке файл module.xml следующего содержания, заменив JAR_PATH на имя файла драйвера, например на &#039;&#039;mssql-jdbc-8.2.2.jre8.jar&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;module xmlns=&amp;quot;urn:jboss:module:1.3&amp;quot; name=&amp;quot;com.microsoft.sqlserver&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;resources&amp;gt;&lt;br /&gt;
    &amp;lt;resource-root path=&amp;quot;JAR_PATH&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/resources&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.api&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.transaction.api&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.xml.bind.api&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Добавить установленный модуль в качестве драйвера для подключения к СУБД в файл &#039;&#039;WF_PATH/standalone/configuration/standalone.xml&#039;&#039;, в секцию &#039;&#039;&amp;lt;datasources/drivers&amp;gt;&#039;&#039;, добавив следующий блок:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;driver name=&amp;quot;mssql&amp;quot; module=&amp;quot;com.microsoft.sqlserver&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;driver-class&amp;gt;com.microsoft.sqlserver.jdbc.SQLServerDriver&amp;lt;/driver-class&amp;gt;&lt;br /&gt;
&amp;lt;/driver&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Oracle===&lt;br /&gt;
* Скачать актуальный JDBC-драйвер по адресу https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html&lt;br /&gt;
* Создать директорию &#039;&#039;WF_PATH/modules/org/postgresql/main/&#039;&#039;&lt;br /&gt;
* В директорию &#039;&#039;WF_PATH/modules/system/layers/base/com/oracle/main/&#039;&#039; поместить скачанный ojdbc*.jar.&lt;br /&gt;
* Создать в этой же папке файл &#039;&#039;module.xml&#039;&#039; следующего содержания, указав имя файла драйвера вместо &amp;quot;JAR_PATH&amp;quot;:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;module xmlns=&amp;quot;urn:jboss:module:1.0&amp;quot; name=&amp;quot;com.oracle&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;resources&amp;gt;&lt;br /&gt;
     &amp;lt;resource-root path=&amp;quot;JAR_PATH&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/resources&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.api&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;javax.transaction.api&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Добавить установленный модуль в качестве драйвера для подключения к СУБД в файл &#039;&#039;WF_PATH/standalone/configuration/standalone.xml&#039;&#039;, в секцию &#039;&#039;&amp;lt;datasources/drivers&amp;gt;&#039;&#039;, добавив следующий блок:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;driver name=&amp;quot;oracle&amp;quot; module=&amp;quot;com.oracle&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;driver-class&amp;gt;oracle.jdbc.driver.OracleDriver&amp;lt;/driver-class&amp;gt;&lt;br /&gt;
&amp;lt;/driver&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Особенности маппинга Oracle==&lt;br /&gt;
Для корректной установки PC Server с подключением к БД Oracle требуется создать/изменить некоторые таблицы вручную:&lt;br /&gt;
&lt;br /&gt;
Инструкция:&lt;br /&gt;
* Заменить по содержимому ниже &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TABLESPACE_NAME&amp;gt;&lt;br /&gt;
&amp;lt;USER_NAME&amp;gt;&lt;br /&gt;
&amp;lt;USER_PASS&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Из-под пользователя с правами на создание пользователей и табличных пространств выполнить:&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
---Создание табличного пространства и пользователя---&lt;br /&gt;
CREATE TABLESPACE &amp;lt;TABLESPACE_NAME&amp;gt; DATAFILE &#039;&amp;lt;TABLESPACE_NAME&amp;gt;.DAT&#039; SIZE 50M AUTOEXTEND ON;&lt;br /&gt;
CREATE USER &amp;quot;&amp;lt;USER_NAME&amp;gt;&amp;quot; IDENTIFIED BY &amp;quot;&amp;lt;USER_PASS&amp;gt;&amp;quot; DEFAULT TABLESPACE &amp;lt;TABLESPACE_NAME&amp;gt;;&lt;br /&gt;
GRANT CREATE SESSION TO &amp;quot;&amp;lt;USER_NAME&amp;gt;&amp;quot;;&lt;br /&gt;
GRANT CREATE TABLE TO &amp;quot;&amp;lt;USER_NAME&amp;gt;&amp;quot;;&lt;br /&gt;
GRANT CREATE SEQUENCE TO &amp;quot;&amp;lt;USER_NAME&amp;gt;&amp;quot;;&lt;br /&gt;
GRANT UNLIMITED TABLESPACE TO &amp;quot;&amp;lt;USER_NAME&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Из-под созданного пользователя, под которым будет производиться подключение PC к БД выполнить:&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
---Создание таблиц---&lt;br /&gt;
   CREATE TABLE &amp;quot;PC_SYS_PROPERTY&amp;quot; &lt;br /&gt;
   (&amp;quot;SETTING_ID&amp;quot; NUMBER(19,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;SETTING_NAME&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;SETTING_VALUE&amp;quot; VARCHAR2(255),&lt;br /&gt;
	 PRIMARY KEY (&amp;quot;SETTING_ID&amp;quot;),&lt;br /&gt;
	 CONSTRAINT &amp;quot;UK_BYEQYB1KICGD7SNXKM5L52582&amp;quot; UNIQUE (&amp;quot;SETTING_NAME&amp;quot;));&lt;br /&gt;
 &lt;br /&gt;
	CREATE TABLE &amp;quot;PC_SYSTEM&amp;quot; &lt;br /&gt;
   (	&amp;quot;SYSTEMID&amp;quot; VARCHAR2(36) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;EVENTS_POST_URL&amp;quot; VARCHAR2(1024), &lt;br /&gt;
	&amp;quot;NAME&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;PC_IS_EXTERNAL_URL&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;PC_IS_INTERNAL_URL&amp;quot; VARCHAR2(255), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;SYSTEMID&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
	CREATE TABLE &amp;quot;PC_SYSTEM_PARAMS&amp;quot; &lt;br /&gt;
(	&amp;quot;SYSTEMID&amp;quot; VARCHAR2(36) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;BILLED_DATE_REQUEST&amp;quot; CLOB, &lt;br /&gt;
	&amp;quot;BILLING_PERIOD&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;BILLED_DATE&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;BILLING_TYPE&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;DESCRIPTION&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;FRONT_END_URL&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;LICENSE&amp;quot; VARCHAR2(2048), &lt;br /&gt;
	&amp;quot;ONLINE_CONFIRMATION_URL&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;REGISTER_REQUEST&amp;quot; CLOB, &lt;br /&gt;
	&amp;quot;REPORT_TEMPLATE_PATH&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;USER_KEYS_EXPIRATION_PERIOD&amp;quot; NUMBER(10,0),&lt;br /&gt;
	 PRIMARY KEY (&amp;quot;SYSTEMID&amp;quot;));&lt;br /&gt;
 &lt;br /&gt;
	  CREATE TABLE &amp;quot;PC_USER&amp;quot; &lt;br /&gt;
   (&amp;quot;USERID&amp;quot; VARCHAR2(64) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;BILLED_DATE&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;SYSTEMID&amp;quot; VARCHAR2(36), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;USERID&amp;quot;),&lt;br /&gt;
	 CONSTRAINT &amp;quot;FKGLUVAW7N4TKK6V6XALY8IK3S2&amp;quot; FOREIGN KEY (&amp;quot;SYSTEMID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_SYSTEM&amp;quot; (&amp;quot;SYSTEMID&amp;quot;) ENABLE&lt;br /&gt;
   );&lt;br /&gt;
 &lt;br /&gt;
  CREATE TABLE &amp;quot;PC_TRANSACTION&amp;quot; &lt;br /&gt;
   (	&amp;quot;TRANSACTIONID&amp;quot; VARCHAR2(36) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;CALLBACK_URL&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;IS_CLEANED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;CONFIRM_CODE_LENGTH&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;CONFIRMATION_TYPE&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;DECLINE_REASON&amp;quot; VARCHAR2(64), &lt;br /&gt;
	&amp;quot;DATA_HASH&amp;quot; RAW(255), &lt;br /&gt;
	&amp;quot;NOTIF_ID&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;STATUS&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;TIME_TO_LIVE&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;DATA_BINARY&amp;quot; BLOB, &lt;br /&gt;
	&amp;quot;DATA_TEXT&amp;quot; VARCHAR2(3095), &lt;br /&gt;
	&amp;quot;USERID&amp;quot; VARCHAR2(64), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;TRANSACTIONID&amp;quot;),&lt;br /&gt;
	 CONSTRAINT &amp;quot;FKARQ3VEGMNJXEJK8ONU4HRHEN3&amp;quot; FOREIGN KEY (&amp;quot;USERID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_USER&amp;quot; (&amp;quot;USERID&amp;quot;) ENABLE&lt;br /&gt;
	 );&lt;br /&gt;
 &lt;br /&gt;
	CREATE TABLE &amp;quot;PC_CONFIRM_ATTEMPT&amp;quot; &lt;br /&gt;
   (	&amp;quot;CONFIRM_ATTEMPT_ID&amp;quot; NUMBER(19,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;CONFIRM_CODE&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;CONFIRM_RESULT&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;DATA_HASH&amp;quot; RAW(255), &lt;br /&gt;
	&amp;quot;SIGNATURE&amp;quot; VARCHAR2(512), &lt;br /&gt;
	&amp;quot;TRANSACTIONID&amp;quot; VARCHAR2(36), &lt;br /&gt;
	&amp;quot;USERID&amp;quot; VARCHAR2(64), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;CONFIRM_ATTEMPT_ID&amp;quot;), &lt;br /&gt;
	 CONSTRAINT &amp;quot;FK5258W9Y6WQ4FY55U41WB30OWG&amp;quot; FOREIGN KEY (&amp;quot;TRANSACTIONID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_TRANSACTION&amp;quot; (&amp;quot;TRANSACTIONID&amp;quot;) ENABLE, &lt;br /&gt;
	 CONSTRAINT &amp;quot;FKHEJP6UYKY6U4X8QFDPV4VA63Y&amp;quot; FOREIGN KEY (&amp;quot;USERID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_USER&amp;quot; (&amp;quot;USERID&amp;quot;) ENABLE&lt;br /&gt;
   );&lt;br /&gt;
 &lt;br /&gt;
	CREATE TABLE &amp;quot;PC_DELAYEDKEYINFO&amp;quot; &lt;br /&gt;
   (	&amp;quot;TYPE&amp;quot; NUMBER(10,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;DELAYEDKEYID&amp;quot; NUMBER(19,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;KEY_CONTAINER_ID&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;KEY_CONTENT&amp;quot; RAW(255), &lt;br /&gt;
	&amp;quot;EXPIRATION_DATE&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;USER_KEY_VERSION&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;USERID&amp;quot; VARCHAR2(64), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;DELAYEDKEYID&amp;quot;), &lt;br /&gt;
	 CONSTRAINT &amp;quot;FK73X95ORVBL8BA0T3A3WEWADRF&amp;quot; FOREIGN KEY (&amp;quot;USERID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_USER&amp;quot; (&amp;quot;USERID&amp;quot;) ENABLE&lt;br /&gt;
   );&lt;br /&gt;
 &lt;br /&gt;
CREATE TABLE &amp;quot;PC_DEVICE&amp;quot; &lt;br /&gt;
   (	&amp;quot;TYPE&amp;quot; NUMBER(10,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;DEVICEID&amp;quot; NUMBER(19,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;DEVICE_PUSH_ID&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;USERID&amp;quot; VARCHAR2(64), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;DEVICEID&amp;quot;), &lt;br /&gt;
	 CONSTRAINT &amp;quot;FK8CMG562COTMP53MVGRDDF1EYA&amp;quot; FOREIGN KEY (&amp;quot;USERID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_USER&amp;quot; (&amp;quot;USERID&amp;quot;) ENABLE&lt;br /&gt;
   );&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    CREATE TABLE &amp;quot;PC_KEYINFO&amp;quot; &lt;br /&gt;
   (	&amp;quot;TYPE&amp;quot; NUMBER(10,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;KEYID&amp;quot; NUMBER(19,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;KEY_CONTAINER_ID&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;KEY_CONTENT&amp;quot; RAW(255), &lt;br /&gt;
	&amp;quot;EXPIRATION_DATE&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;DEVICE_FINGERPRINT&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;USER_KEY_VERSION&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;USERID&amp;quot; VARCHAR2(64), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;KEYID&amp;quot;), &lt;br /&gt;
	 CONSTRAINT &amp;quot;FKN3VEB4OTVNAIE35AWBD0HDS90&amp;quot; FOREIGN KEY (&amp;quot;USERID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_USER&amp;quot; (&amp;quot;USERID&amp;quot;) ENABLE&lt;br /&gt;
   );&lt;br /&gt;
 &lt;br /&gt;
  CREATE TABLE &amp;quot;PC_PUBLICKEY&amp;quot; &lt;br /&gt;
   (	&amp;quot;PUBLICKEYID&amp;quot; NUMBER(19,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;PUBLIC_KEY&amp;quot; RAW(512), &lt;br /&gt;
	&amp;quot;KEYID&amp;quot; NUMBER(19,0), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;PUBLICKEYID&amp;quot;), &lt;br /&gt;
	 CONSTRAINT &amp;quot;FKEMTGHSA74S1WI903R2TN7T3N&amp;quot; FOREIGN KEY (&amp;quot;KEYID&amp;quot;)&lt;br /&gt;
	  REFERENCES &amp;quot;PC_KEYINFO&amp;quot; (&amp;quot;KEYID&amp;quot;) ENABLE&lt;br /&gt;
   );&lt;br /&gt;
&lt;br /&gt;
  CREATE TABLE &amp;quot;PC_EVENT&amp;quot; &lt;br /&gt;
   (	&amp;quot;EVENTID&amp;quot; NUMBER(19,0) NOT NULL ENABLE, &lt;br /&gt;
	&amp;quot;CREATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;IS_DELETED&amp;quot; NUMBER(5,0), &lt;br /&gt;
	&amp;quot;UPDATED_AT&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;AUTH_CODE&amp;quot; VARCHAR2(64), &lt;br /&gt;
	&amp;quot;DEVICE_EVENTID&amp;quot; VARCHAR2(36), &lt;br /&gt;
	&amp;quot;DEVICE_INFO&amp;quot; CLOB, &lt;br /&gt;
	&amp;quot;DEVICE_TIME&amp;quot; DATE, &lt;br /&gt;
	&amp;quot;EVENTPOSTURL&amp;quot; VARCHAR2(255), &lt;br /&gt;
	&amp;quot;REQUEST_HMAC&amp;quot; VARCHAR2(64), &lt;br /&gt;
	&amp;quot;REQUEST_HASH&amp;quot; VARCHAR2(64), &lt;br /&gt;
	&amp;quot;REQUEST_RESULT&amp;quot; NUMBER(10,0), &lt;br /&gt;
	&amp;quot;REQUEST_TYPE&amp;quot; VARCHAR2(36), &lt;br /&gt;
	&amp;quot;REQUESTER_IP&amp;quot; VARCHAR2(15), &lt;br /&gt;
	&amp;quot;SESSIONID&amp;quot; VARCHAR2(36), &lt;br /&gt;
	&amp;quot;TRANSACTIONID&amp;quot; VARCHAR2(36), &lt;br /&gt;
	&amp;quot;USERID&amp;quot; VARCHAR2(64), &lt;br /&gt;
	 PRIMARY KEY (&amp;quot;EVENTID&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
---Создание индексов&lt;br /&gt;
CREATE INDEX pc_keyinfo1_idx ON PC_KEYINFO (userID, expiration_date, is_deleted);&lt;br /&gt;
CREATE INDEX pc_delayedkeyinfo1_idx ON PC_DELAYEDKEYINFO (userID, is_deleted);&lt;br /&gt;
CREATE INDEX pc_device1_idx ON PC_DEVICE (userID, is_deleted); &lt;br /&gt;
CREATE INDEX pc_transaction1_idx ON PC_TRANSACTION (userID, status);&lt;br /&gt;
CREATE INDEX pc_device2_idx ON PC_DEVICE (userID); &lt;br /&gt;
CREATE INDEX pc_keyinfo2_idx ON PC_KEYINFO (userID); &lt;br /&gt;
CREATE INDEX pc_transaction2_idx ON PC_TRANSACTION (userID); &lt;br /&gt;
CREATE INDEX pc_user1_idx ON PC_USER (systemID);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
---Создание очередей---&lt;br /&gt;
create sequence PC_ATTEMPT_SEQ start with 1 increment by 1;&lt;br /&gt;
create sequence PC_DELAYEDKEYINFO_SEQ start with 1 increment by 1;&lt;br /&gt;
create sequence PC_DEVICE_SEQ start with 1 increment by 1;&lt;br /&gt;
create sequence PC_KEYINFO_SEQ start with 1 increment by 1;&lt;br /&gt;
create sequence PC_PUBLICKEY_SEQ start with 1 increment by 1;&lt;br /&gt;
create sequence PC_SETTING_SEQ start with 1 increment by 1;&lt;br /&gt;
create sequence PC_EVENT_SEQ start with 1 increment by 1;&lt;br /&gt;
create sequence PC_PUSH_SEQ start with 1 increment by 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Добавление источников данных для PC Server==&lt;br /&gt;
[[PC_Pusher_5.2|&#039;&#039;&#039;При установке PC Pusher версии 5.2 и выше, подключение к БД PC Pusher не требуется&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
===PostgreSQL===&lt;br /&gt;
====PC Server====&lt;br /&gt;
В файл &#039;&#039;WF_PATH/standalone/configuration/standalone.xml&#039;&#039; внести следующие изменения добавить новый источник данных в секцию &#039;&#039;&amp;lt;datasources&amp;gt;&amp;lt;/datasources&amp;gt;&#039;&#039; заменив pcs-db-host, port, pcs-db, pcs-user, pcs-pass:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;datasource jta=&amp;quot;true&amp;quot; jndi-name=&amp;quot;java:jboss/datasources/PayControlDS&amp;quot; pool-name=&amp;quot;PayControlDS&amp;quot; enabled=&amp;quot;true&amp;quot; use-ccm=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;connection-url&amp;gt;jdbc:postgresql://pcs-db-host:port/pcs-db&amp;lt;/connection-url&amp;gt;&lt;br /&gt;
    &amp;lt;driver-class&amp;gt;org.postgresql.Driver&amp;lt;/driver-class&amp;gt;&lt;br /&gt;
    &amp;lt;driver&amp;gt;pgsql&amp;lt;/driver&amp;gt;&lt;br /&gt;
    &amp;lt;security&amp;gt;&lt;br /&gt;
        &amp;lt;user-name&amp;gt;pcs-user&amp;lt;/user-name&amp;gt;&lt;br /&gt;
        &amp;lt;password&amp;gt;pcs-pass&amp;lt;/password&amp;gt;&lt;br /&gt;
    &amp;lt;/security&amp;gt;&lt;br /&gt;
    &amp;lt;validation&amp;gt;&lt;br /&gt;
        &amp;lt;valid-connection-checker class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;background-validation&amp;gt;true&amp;lt;/background-validation&amp;gt;&lt;br /&gt;
        &amp;lt;exception-sorter class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/validation&amp;gt;&lt;br /&gt;
&amp;lt;/datasource&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===MS SQL===&lt;br /&gt;
====PC Server====&lt;br /&gt;
В файл &#039;&#039;WF_PATH/standalone/configuration/standalone.xml&#039;&#039; внести следующие изменения добавить новый источник данных в секцию &#039;&#039;&amp;lt;datasources&amp;gt;&amp;lt;/datasources&amp;gt;&#039;&#039; заменив pcs-db-host, port, pcs-db-host, pcs-db, pcs-user, pcs-pass:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;datasource jta=&amp;quot;true&amp;quot; jndi-name=&amp;quot;java:jboss/datasources/PayControlDS&amp;quot; pool-name=&amp;quot;PayControlDS&amp;quot; enabled=&amp;quot;true&amp;quot; use-ccm=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;connection-url&amp;gt;jdbc:sqlserver://pcs-db-host:port;databaseName=pcs-db&amp;lt;/connection-url&amp;gt;&lt;br /&gt;
	&amp;lt;driver&amp;gt;mssql&amp;lt;/driver&amp;gt;&lt;br /&gt;
	&amp;lt;security&amp;gt;&lt;br /&gt;
		&amp;lt;user-name&amp;gt;pcs-user&amp;lt;/user-name&amp;gt;&lt;br /&gt;
		&amp;lt;password&amp;gt;pcs-pass&amp;lt;/password&amp;gt;&lt;br /&gt;
	&amp;lt;/security&amp;gt;&lt;br /&gt;
	&amp;lt;pool&amp;gt;&lt;br /&gt;
		&amp;lt;min-pool-size&amp;gt;5&amp;lt;/min-pool-size&amp;gt;&lt;br /&gt;
		&amp;lt;max-pool-size&amp;gt;50&amp;lt;/max-pool-size&amp;gt;&lt;br /&gt;
		&amp;lt;prefill&amp;gt;false&amp;lt;/prefill&amp;gt;&lt;br /&gt;
		&amp;lt;use-strict-min&amp;gt;false&amp;lt;/use-strict-min&amp;gt;&lt;br /&gt;
		&amp;lt;flush-strategy&amp;gt;FailingConnectionOnly&amp;lt;/flush-strategy&amp;gt;&lt;br /&gt;
	&amp;lt;/pool&amp;gt;&lt;br /&gt;
	&amp;lt;validation&amp;gt;&lt;br /&gt;
		&amp;lt;valid-connection-checker class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker&amp;quot;&amp;gt;&amp;lt;/valid-connection-checker&amp;gt;&lt;br /&gt;
	&amp;lt;/validation&amp;gt;&lt;br /&gt;
&amp;lt;/datasource&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Oracle===&lt;br /&gt;
====PC Server====&lt;br /&gt;
В файл &#039;&#039;WF_PATH/standalone/configuration/standalone.xml&#039;&#039; внести следующие изменения добавить новый источник данных в секцию &#039;&#039;&amp;lt;datasources&amp;gt;&amp;lt;/datasources&amp;gt;&#039;&#039; заменив pcs-db-host, port, pcs-db, pcs-user, pcs-pass:&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;datasource jta=&amp;quot;true&amp;quot; jndi-name=&amp;quot;java:jboss/datasources/PayControlDS&amp;quot; pool-name=&amp;quot;PayControlDS&amp;quot; enabled=&amp;quot;true&amp;quot; use-ccm=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;connection-url&amp;gt;jdbc:oracle:thin:@pcs-db-host:port:sid&amp;lt;/connection-url&amp;gt;&lt;br /&gt;
    &amp;lt;driver-class&amp;gt;org.postgresql.Driver&amp;lt;/driver-class&amp;gt;&lt;br /&gt;
    &amp;lt;driver&amp;gt;oracle&amp;lt;/driver&amp;gt;&lt;br /&gt;
    &amp;lt;security&amp;gt;&lt;br /&gt;
        &amp;lt;user-name&amp;gt;pcs-user&amp;lt;/user-name&amp;gt;&lt;br /&gt;
        &amp;lt;password&amp;gt;pcs-pass&amp;lt;/password&amp;gt;&lt;br /&gt;
    &amp;lt;/security&amp;gt;&lt;br /&gt;
    &amp;lt;pool&amp;gt;&lt;br /&gt;
        &amp;lt;min-pool-size&amp;gt;1&amp;lt;/min-pool-size&amp;gt;&lt;br /&gt;
        &amp;lt;max-pool-size&amp;gt;5&amp;lt;/max-pool-size&amp;gt;&lt;br /&gt;
        &amp;lt;prefill&amp;gt;true&amp;lt;/prefill&amp;gt;&lt;br /&gt;
    &amp;lt;/pool&amp;gt;&lt;br /&gt;
    &amp;lt;validation&amp;gt;&lt;br /&gt;
        &amp;lt;check-valid-connection-sql&amp;gt;select 1 from dual&amp;lt;/check-valid-connection-sql&amp;gt;&lt;br /&gt;
        &amp;lt;validate-on-match&amp;gt;false&amp;lt;/validate-on-match&amp;gt;&lt;br /&gt;
        &amp;lt;background-validation&amp;gt;true&amp;lt;/background-validation&amp;gt;&lt;br /&gt;
        &amp;lt;background-validation-millis&amp;gt;10000&amp;lt;/background-validation-millis&amp;gt;&lt;br /&gt;
    &amp;lt;/validation&amp;gt;&lt;br /&gt;
&amp;lt;/datasource&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Настройка подключения PCIS External к PC Server=&lt;br /&gt;
На сервере PCIS External необходимо установить адрес сервера PC Server (host и port заменить на реальные значения). Для этого:&lt;br /&gt;
* на Linux в файл &#039;&#039;WF_PATH/bin/standalone.conf&#039;&#039; нужно добавить &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;JAVA_OPTS=&amp;quot;$JAVA_OPTS -Dpcservice.endpoint=http://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/ws/PayControlServiceV3?wsdl -Duser.language=ru -Dpaycontrol.locale=ru&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* на Windows в файл &#039;&#039;WF_PATH/bin/standalone.conf.bat&#039;&#039; нужно добавить &amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;set &amp;quot;JAVA_OPTS=%JAVA_OPTS% -Dpcservice.endpoint=http://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/ws/PayControlServiceV3?wsdl -Duser.language=ru -Dpaycontrol.locale=ru&amp;quot;&amp;lt;/syntaxhighlight&amp;gt; выше метки :JAVA_OPTS_SET&lt;br /&gt;
&lt;br /&gt;
=Настройка выделения памяти серверу=&lt;br /&gt;
На всех серверах установить максимальный объем доступной для использования памяти:&lt;br /&gt;
* на Linux в &#039;&#039;WF_PATH/bin/standalone.conf&#039;&#039; указать объём «ОбщийОбъёмОЗУ - 512MB»&lt;br /&gt;
* на Windows в &#039;&#039;WF_PATH\bin\standalone.conf.bat&#039;&#039; указать объём «ОбщийОбъёмОЗУ - 1536MB»&lt;br /&gt;
Для этого в строке&lt;br /&gt;
&#039;&#039;JAVA_OPTS=&amp;quot;-Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true&amp;quot;&#039;&#039; поменять значение параметра &#039;&#039;Xmx&#039;&#039; на выделяемый объём.&lt;br /&gt;
==Запуск проекта==&lt;br /&gt;
* Загрузить файлы модулей требуемых компонентов последних версий из репозитория по адресу https://repo.paycontrol.org/server/maven/tech/paycon/server/:&lt;br /&gt;
** PC Server — https://repo.paycontrol.org/server/maven/tech/paycon/server/PayControl-services-module/, файл &#039;&#039;PayControl-services-module-&amp;lt;VERSION&amp;gt;.ear&#039;&#039;&lt;br /&gt;
** PC Pusher — https://repo.paycontrol.org/server/maven/tech/paycon/server/pc-pusher/, файл &#039;&#039;pc-pusher-&amp;lt;VERSION&amp;gt;.war&#039;&#039;&lt;br /&gt;
** PCIS External — https://repo.paycontrol.org/server/maven/tech/paycon/server/PayControl-interaction-rest/, файл &#039;&#039;PayControl-interaction-rest-&amp;lt;VERSION&amp;gt;.war&#039;&#039;&lt;br /&gt;
* Скопировать файл приложения сервера &#039;&#039;WF_PATH\standalone\deployments\&#039;&#039;. Один сервер WildFly может запускать одно или несколько приложений сервера.&lt;br /&gt;
* Запустить&lt;br /&gt;
** Linux &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;WF_PATH/bin/standalone.sh -b 0.0.0.0&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** Windows &amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;WF_PATH\bin\standalone.bat -b 0.0.0.0&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*:  где -b 0.0.0.0 - позволяет подключаться к серверу используя любой его интерфейс (опция bind)&lt;br /&gt;
* Дождаться старта WF, проверить, что нет ошибок запуска.&lt;br /&gt;
&lt;br /&gt;
==Настройка автозапуска службы сервера==&lt;br /&gt;
===Linux===&lt;br /&gt;
Для настройки автозапуска службы, перейти в каталог WF_PATH/docs/contrib/scripts/systemd/ и выполнить шаги, описанные в файле README в этом каталоге, за исключением пунктов распаковки и создания символьной ссылки на каталог.&lt;br /&gt;
Пункт &amp;lt;code&amp;gt;chown -R wildfly:wildfly /opt/wildfly&amp;lt;/code&amp;gt; необходимо выполнить с параметрами «-RH» (параметр «H» указывает, что если на вход подана символьная ссылка, то нужно пойти вглубь каталога, на который она ссылается). Таким образом команда должна выглядеть следующим образом:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;chown -RHv wildfly:wildfly /opt/wildfly&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
При запуске в качестве службы, возможно отклонение запросов. В таком случае необходимо установить параметры JAVA_OPTS в файле standalone.conf:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;JAVA_OPTS=&amp;quot;$JAVA_OPTS -Djboss.bind.address=0.0.0.0&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Windows===&lt;br /&gt;
Скопировать папку&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;WF_PATH\docs\contrib\scripts\service\&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
в папку&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;WF_PATH\bin\&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выполнить&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;WF_PATH\bin\service\service.bat install /startup&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
При запуске в качестве службы, возможно отклонение запросов. В таком случае необходимо установить параметры JAVA_OPTS в файле standalone.conf.bat выше метки :JAVA_OPTS_SET.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;set &amp;quot;JAVA_OPTS=%JAVA_OPTS% -Djboss.bind.address=0.0.0.0&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==URL-фильтрация при совмещении PC Pusher и PCIS External==&lt;br /&gt;
При совмещении ролей PC Pusher и PCIS External на одном сервере необходимо исключить возможность выполнения запросов PC Pusher со стороны сети интернет. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо со стороны сети интернет разрешить подключения только на конечную точку PCIS External. &amp;lt;br&amp;gt;&lt;br /&gt;
Конечная точка PCIS External - &#039;&#039;&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/PayControl-interaction-rest/*&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Доступ к другим конечным точкам должен быть запрещен.&lt;br /&gt;
&lt;br /&gt;
При этом доступ к PC Pusher со стороны PC Server должен сохраниться. &amp;lt;br&amp;gt;&lt;br /&gt;
Конечная точка PC Pusher - &#039;&#039;&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/pc-pusher-api/*&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Внесение изменений в БД=&lt;br /&gt;
==Создание индексов БД PC Server==&lt;br /&gt;
После первого запуска приложения, в базе данных будут созданы необходимые таблицы.&lt;br /&gt;
&lt;br /&gt;
На продуктивной среде после этого необходимо создать индексы в базе данных(&#039;&#039;&#039;за исключением Oracle&#039;&#039;&#039;) PC Server.&lt;br /&gt;
&lt;br /&gt;
Для этого выполните SQL скрипт:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
create index pc_keyinfo1_idx on PC_KEYINFO (userID, expiration_date, is_deleted);&lt;br /&gt;
create index pc_delayedkeyinfo1_idx on PC_DELAYEDKEYINFO (userID, is_deleted);&lt;br /&gt;
create index pc_device1_idx on PC_DEVICE (userID, is_deleted); &lt;br /&gt;
create index pc_transaction1_idx on PC_TRANSACTION (userID, status);&lt;br /&gt;
create index pc_device2_idx on PC_DEVICE (userID); &lt;br /&gt;
create index pc_keyinfo2_idx on PC_KEYINFO (userID); &lt;br /&gt;
create index pc_transaction2_idx on PC_TRANSACTION (userID); &lt;br /&gt;
create index pc_user1_idx on PC_USER (systemID);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Корректировка типов данных для MS SQL==&lt;br /&gt;
Java-приложение при создании таблиц БД неоптимально устанавливает тип для одного из полей для СУБД MS SQL.&lt;br /&gt;
&lt;br /&gt;
Для его корректировки после того, как таблицы созданы, выполните запрос&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
ALTER TABLE PC_TRANSACTION ALTER COLUMN DATA_BINARY image;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Регистрация системы==&lt;br /&gt;
После успешного запуска приложения PC Server до начала работы необходимо зарегистрировать прикладную систему.&lt;br /&gt;
&lt;br /&gt;
Это действие выполняется путем отправки на PC Server HTTP POST запроса, сформированного ST/Airome. Содержание запроса предоставляется дополнительно.&lt;br /&gt;
&lt;br /&gt;
Для отправки запроса можно использовать любое средство отправки HTTP-запросов.&lt;br /&gt;
===Примеры===&lt;br /&gt;
&lt;br /&gt;
====Curl====&lt;br /&gt;
cURL (в ОС Linux доступна в репозиториях, для ОС Windows можно скачать с сайта разработчика https://curl.haxx.se/download.html):&lt;br /&gt;
* 1. Скопировать файл RegisterSystemRequest.xml (если название файла с запросом на регистрацию отличается, то необходимо либо переименовать его, либо изменить имя этого файла в параметрах команды curl) на сервер в любую директорию на машину, с которой будет производиться запуск команды curl.&lt;br /&gt;
* 2. Проверить содержимое файла. Если файл выглядит как&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;soapenv:Envelope xmlns:soapenv=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:pay=&amp;quot;http://ws.safetech.ru/PayControlV3/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;soapenv:Header/&amp;gt;&lt;br /&gt;
   &amp;lt;soapenv:Body&amp;gt;&lt;br /&gt;
      &amp;lt;pay:registerSystemRequest&amp;gt;&lt;br /&gt;
         &amp;lt;request&amp;gt;PD94bWwgdmVyc2lvbj0iMJlIHhtbG5zPSJodHRwOi8vd3Muc2FmZXRlY2gucS4w... ...ZXF1JlIHhtbG5zPSJodHRwOi8vd3Muc2FmZXRlY2gucnUZ==&amp;lt;/request&amp;gt;&lt;br /&gt;
      &amp;lt;/pay:registerSystemRequest&amp;gt;&lt;br /&gt;
   &amp;lt;/soapenv:Body&amp;gt;&lt;br /&gt;
&amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
то, перейти к п.4.&lt;br /&gt;
* 3. Если файл выглядит как&lt;br /&gt;
&amp;lt;code&amp;gt;PD94bWwgdmVyc2lvbj0iMJlIHhtbG5zPSJodHRwOi8vd3Muc2FmZXRlY2gucS4w... ...ZXF1JlIHhtbG5zPSJodHRwOi8vd3Muc2FmZXRlY2gucnUZ==&amp;lt;/code&amp;gt;&lt;br /&gt;
то необходимо добавить в его начало&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;soapenv:Envelope xmlns:soapenv=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:pay=&amp;quot;http://ws.safetech.ru/PayControlV3/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;soapenv:Header/&amp;gt;&lt;br /&gt;
   &amp;lt;soapenv:Body&amp;gt;&lt;br /&gt;
      &amp;lt;pay:registerSystemRequest&amp;gt;&lt;br /&gt;
         &amp;lt;request&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
и в его конец&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/request&amp;gt;&lt;br /&gt;
      &amp;lt;/pay:registerSystemRequest&amp;gt;&lt;br /&gt;
   &amp;lt;/soapenv:Body&amp;gt;&lt;br /&gt;
&amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
чтобы он принял вид, как представлено в п.2.&lt;br /&gt;
* 4. Выполнить команду (в той-же директории, где располагается скопированный/изменённый файл), заменив &amp;lt;PCServer_IP/localhost&amp;gt; на DNS-имя сервера или его IP-адрес:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl --header &amp;quot;Content-Type: text/xml;charset=UTF-8&amp;quot; --header &amp;quot;SOAPAction: registerSystem&amp;quot; --data @RegisterSystemRequest.xml  &amp;lt;PCServer_IP/localhost&amp;gt;:8080/ws/PayControlServiceV3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Если в составе ответа пришла строка &amp;lt;systemId&amp;gt;SYSTEMID ВАШЕЙ ПРИКЛАДНОЙ СИСТЕМЫ&amp;lt;/systemId&amp;gt;, значит прикладная система зарегистрирована. &lt;br /&gt;
* Если в составе ответа было &amp;lt;soap:Fault&amp;gt;, значит возникла проблема на этапе регистрации.&lt;br /&gt;
* После успешной регистрации прикладной системы на сервере, файл registerSystem.xml больше не нужен.&lt;br /&gt;
&lt;br /&gt;
====SOAP UI====&lt;br /&gt;
* 1. Добавить подключение к серверу PCS, указав адрес WSDL схемы:&lt;br /&gt;
[[Файл:Soap add conn.jpg]]&lt;br /&gt;
* 2. Создать новый запрос из категории registerSystem&lt;br /&gt;
[[Файл:Soap register system.jpg]]&lt;br /&gt;
* 3. Выполнить запрос&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Если в составе ответа пришла строка &amp;lt;systemId&amp;gt;SYSTEMID ВАШЕЙ ПРИКЛАДНОЙ СИСТЕМЫ&amp;lt;/systemId&amp;gt;, значит прикладная система зарегистрирована. &lt;br /&gt;
* Если в составе ответа было &amp;lt;soap:Fault&amp;gt;, значит возникла проблема на этапе регистрации.&lt;br /&gt;
&lt;br /&gt;
==Доступ к сервисам==&lt;br /&gt;
Сервис PC Server доступен по ссылкам (при запросе на эти 2 адреса ниже, должна возвратиться WSDL-схема):&lt;br /&gt;
* http://&amp;lt;IP или имя сервера с WF &amp;gt;:8080/ws/PayControlServiceV3?wsdl&lt;br /&gt;
* http://&amp;lt;IP или имя сервера с WF &amp;gt;:8080/ws/PayControlReportService?wsdl&lt;br /&gt;
&lt;br /&gt;
Адрес конечной точки PC Pusher по умолчанию:&lt;br /&gt;
* http://&amp;lt;IP или имя сервера с WF &amp;gt;:8080/pc-pusher-api/&lt;br /&gt;
Адрес PC Pusher health check:&lt;br /&gt;
* http://&amp;lt;IP или имя сервера с WF &amp;gt;:8080/pc-pusher-api/health_check&lt;br /&gt;
&lt;br /&gt;
PCIS External (при запросе на этот адрес должно возвратиться «Not Found». Также необходимо обратить внимание, на то, какой протокол разрешён – HTTP или HTTPS):&lt;br /&gt;
* http://&amp;lt;IP или имя сервера с WF &amp;gt;:8080/PayControl-interaction-rest/&lt;br /&gt;
=Настройка PC Pusher для отправки пушей в другое приложение (при необходимости)=&lt;br /&gt;
Необходимо выполнить пункты описанные по ссылке [[Обновление_с_3.6_до_3.8#Настройка PC Pusher|&amp;quot;Настройка PCS и PC Pusher&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
=Корректировка (смена) адресов серверов PayControl (при необходимости)=&lt;br /&gt;
{{Предупреждение|Не рекомендуется дополнительно указывать номер порта, в случаях, если для HTTP используется порт 80, или для HTTPS используется порт 443}}&lt;br /&gt;
==Учёт изменения адреса сервера PCS==&lt;br /&gt;
Для учёта изменения адреса сервера PCS необходимо произвести изменения в настройках PCIS External. В файле /opt/wildfly/bin/standalone.conf, в следующей строке, указав правильный адрес и при необходимости порт сервера PCS, а также уточнив протокол подключения (HTTP/HTTPS):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
JAVA_OPTS=&amp;quot;$JAVA_OPTS -Dpcservice.endpoint=http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/ws/PayControlServiceV3?wsdl -Duser.language=ru -Dpaycontrol.locale=ru&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Учёт изменения адреса сервера PC Pusher==&lt;br /&gt;
Для учёта изменения адреса сервера PC Pusher, необходимо, предварительно указав корректные данные (протокол (HTTP/HTTPS), имя или IP сервера, порт, идентификатор системы), выполнить запрос к БД PCS: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_internal_url = &#039;http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/pc-pusher-api/&#039; where systemid=&#039;&amp;lt;SYSTEMID&amp;gt;&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Учёт изменения внешнего адреса сервера PCIS External==&lt;br /&gt;
{{Предупреждение|Если система была переведена в промышленную эксплуатацию, при смене адреса для доступа мобильных устройств, не рекомендуется выводить из действия предыдущий адрес на протяжении всего срока действия выпущенных ключей пользователя. Иначе мобильное приложение потеряет доступ к серверу PayControl и для восстановления будет необходимо перевыпустить ключ и заново добавить его в приложение пользователя.}}&lt;br /&gt;
Для учёта изменения внешнего адреса сервера PayControl, по которому связываются мобильное приложение с сервером PayControl, необходимо, предварительно указав корректные данные (протокол (HTTP/HTTPS), имя или IP сервера, порт, идентификатор системы), выполнить запрос к БД PCS:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_external_url = &#039;http[s]://&amp;lt;IP или DNS-имя&amp;gt;[:PORT]/PayControl-interaction-rest/&#039; where systemid=&#039;&amp;lt;SYSTEMID&amp;gt;&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0_PayControl_v5&amp;diff=662</id>
		<title>Руководство администратора PayControl v5</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0_PayControl_v5&amp;diff=662"/>
		<updated>2022-07-20T15:03:01Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: Содержимое страницы заменено на «{{Уведомление|Актуальная документация по версии 5 располагается по адре…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Уведомление|Актуальная документация по версии 5 располагается по адресу https://repo.paycontrol.org/index/safe-tech/#paycontrol}}&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_PayControl_v5._Linux&amp;diff=661</id>
		<title>Установка PayControl v5. Linux</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_PayControl_v5._Linux&amp;diff=661"/>
		<updated>2022-07-20T15:02:21Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: Содержимое страницы заменено на «{{Уведомление|Актуальная документация по версии 5 располагается по адре…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Уведомление|Актуальная документация по версии 5 располагается по адресу https://repo.paycontrol.org/index/safe-tech/#paycontrol}}&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_PayControl_v5_%D0%B2%D1%80%D1%83%D1%87%D0%BD%D1%83%D1%8E&amp;diff=660</id>
		<title>Установка компонентов сервера PayControl v5 вручную</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_PayControl_v5_%D0%B2%D1%80%D1%83%D1%87%D0%BD%D1%83%D1%8E&amp;diff=660"/>
		<updated>2022-07-20T15:01:41Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: Содержимое страницы заменено на «{{Уведомление|Актуальная документация по версии 5 располагается по адре…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Уведомление|Актуальная документация по версии 5 располагается по адресу https://repo.paycontrol.org/index/safe-tech/#paycontrol}}&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=Wildfly&amp;diff=651</id>
		<title>Wildfly</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=Wildfly&amp;diff=651"/>
		<updated>2022-04-05T16:43:42Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Настройка=&lt;br /&gt;
==Из командной строки==&lt;br /&gt;
Подключение к консоли:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo /opt/wildfly/bin/jboss-cli.sh --connect&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Выполнение команд в неинтерактивном режиме:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo /opt/wildfly/bin/jboss-cli.sh --connect --commands=ls\ deployment&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Настройка PayControl===&lt;br /&gt;
Удаление настроек по умолчанию:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
data-source remove --name=ExampleDS&lt;br /&gt;
/subsystem=ee/service=default-bindings:remove()&lt;br /&gt;
reload&lt;br /&gt;
/subsystem=datasources/jdbc-driver=h2:remove&lt;br /&gt;
/subsystem=undertow/server=default-server/host=default-host/location=\/:remove()&lt;br /&gt;
/subsystem=undertow/configuration=handler:remove()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Добавление драйвера (postgresql) и источников данных:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
module add --name=org.postgresql --resources=/opt/paycontrol/postgresql-42.2.5.jar --dependencies=javax.api,javax.transaction.api,javax.servlet.api&lt;br /&gt;
/subsystem=datasources/jdbc-driver=postgres:add(driver-name=&amp;quot;postgres&amp;quot;,driver-module-name=&amp;quot;org.postgresql&amp;quot;,driver-class-name=org.postgresql.Driver)&lt;br /&gt;
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&lt;br /&gt;
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&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Установка wsdl-host&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/subsystem=webservices:write-attribute\(name=wsdl-host,value=docker.loc\)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление источников данных (разные СУБД)===&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Datasource!!Connection URL&lt;br /&gt;
|-&lt;br /&gt;
|IBM DB2||jdbc:db2://SERVER_NAME:PORT/DATABASE_NAME&lt;br /&gt;
|-&lt;br /&gt;
|MariaDB||jdbc:mariadb://SERVER_NAME:PORT/DATABASE_NAME&lt;br /&gt;
|-&lt;br /&gt;
|Microsoft SQL Server||jdbc:sqlserver://SERVER_NAME:PORT;DatabaseName=DATABASE_NAME&lt;br /&gt;
|-&lt;br /&gt;
|MySQL||jdbc:mysql://SERVER_NAME:PORT/DATABASE_NAME&lt;br /&gt;
|-&lt;br /&gt;
|Oracle||jdbc:oracle:thin:@SERVER_NAME:PORT:ORACLE_SID&lt;br /&gt;
|-&lt;br /&gt;
|PostgreSQL||jdbc:postgresql://SERVER_NAME:PORT/DATABASE_NAME&lt;br /&gt;
|-&lt;br /&gt;
|Sybase||jdbc:sybase:Tds:SERVER_NAME:PORT/DATABASE_NAME&lt;br /&gt;
|}&lt;br /&gt;
==Удаление настроек по умолчанию==&lt;br /&gt;
При конфигурировании Wildfly можно (при [[Перевод в промышленную эксплуатацию|переводе системы в промышленную эксплуатацию]] - рекомендуется) удалить пример источника данных и страницу-приветствие. Для этого в файле standalone.xml необходимо убрать (либо закомментировать) следующие объекты:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;datasource jndi-name=&amp;quot;java:jboss/datasources/ExampleDS&amp;quot; pool-name=&amp;quot;ExampleDS&amp;quot; enabled=&amp;quot;true&amp;quot; use-java-context=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;connection-url&amp;gt;jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE&amp;lt;/connection-url&amp;gt;&lt;br /&gt;
                    &amp;lt;driver&amp;gt;h2&amp;lt;/driver&amp;gt;&lt;br /&gt;
                    &amp;lt;security&amp;gt;&lt;br /&gt;
                        &amp;lt;user-name&amp;gt;sa&amp;lt;/user-name&amp;gt;&lt;br /&gt;
                        &amp;lt;password&amp;gt;sa&amp;lt;/password&amp;gt;&lt;br /&gt;
                    &amp;lt;/security&amp;gt;&lt;br /&gt;
                &amp;lt;/datasource&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;driver name=&amp;quot;h2&amp;quot; module=&amp;quot;com.h2database.h2&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xa-datasource-class&amp;gt;org.h2.jdbcx.JdbcDataSource&amp;lt;/xa-datasource-class&amp;gt;&lt;br /&gt;
                    &amp;lt;/driver&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
             &amp;lt;default-bindings context-service=&amp;quot;java:jboss/ee/concurrency/context/default&amp;quot; datasource=&amp;quot;java:jboss/datasources/ExampleDS&amp;quot; managed-executor-service=&amp;quot;java:jboss/ee/concurrency/executor/default&amp;quot; managed-scheduled-executor-service=&amp;quot;java:jboss/ee/concurrency/scheduler/default&amp;quot; managed-thread-factory=&amp;quot;java:jboss/ee/concurrency/factory/default&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;location name=&amp;quot;/&amp;quot; handler=&amp;quot;welcome-content&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;  &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;handlers&amp;gt;&lt;br /&gt;
                &amp;lt;file name=&amp;quot;welcome-content&amp;quot; path=&amp;quot;${jboss.home.dir}/welcome-content&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/handlers&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Добавление сертификатов корпоративных УЦ==&lt;br /&gt;
java keytool – с его помощью установить корневой сертификат в keystore. Если есть промежуточные, то их тоже.&lt;br /&gt;
&lt;br /&gt;
java keystore password по умолчанию – “changeit”.&lt;br /&gt;
&lt;br /&gt;
Примеры инструкций:&lt;br /&gt;
* https://docs.microsoft.com/ru-ru/java/azure/java-sdk-add-certificate-ca-store?view=azure-java-stable&lt;br /&gt;
* https://www.ibm.com/support/knowledgecenter/en/SSFUEU_6.2.1/com.ibm.swg.ba.cognos.administrators_guide.6.2.1.doc/t_shi_import_the_root_certificate_for_java.html&lt;br /&gt;
&lt;br /&gt;
Как минимум в CN сертификата должен быть адрес, по которому происходит обращение к серверу (DNS или IP). Если этого будет недостаточно, тогда добавить в SAN сертификата.&lt;br /&gt;
&lt;br /&gt;
==Включение и конфигурирование [[HTTPS]]==&lt;br /&gt;
===Добавление сертификата===&lt;br /&gt;
Для добавления/обновления сертификата необходимо выполнить следующие действия:&lt;br /&gt;
# Составить цепочку сертификатов.&amp;lt;br&amp;gt;Из файлов сертификатов в формате PEM (Base64) составить цепочку путём соединения в новом файле с расширением crt, например fullchain.crt. Для этого в новый файл с помощью текстового редактора нужно добавить сертификат корневого УЦ, промежуточных, и собственно сертификат сервера.&lt;br /&gt;
# Создать контейнер формата pkcs12:&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;openssl pkcs12 -export -in fullchain.crt -inkey private_key.key -out keycontainer.p12&amp;lt;/syntaxhighlight&amp;gt; при экспорте следует задать пароль &amp;lt;password&amp;gt; для приватного ключа.&lt;br /&gt;
# Создать JKS-контейнер из PKCS12:&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;keytool -importkeystore -srckeystore keycontainer.p12 \&lt;br /&gt;
        -srcstoretype PKCS12 \&lt;br /&gt;
        -destkeystore &amp;lt;container-name&amp;gt;.jks \&lt;br /&gt;
        -deststoretype JKS&amp;lt;/syntaxhighlight&amp;gt; при импорте указываем &amp;lt;password&amp;gt;, при экспорте указываем пароль к контейнеру.&lt;br /&gt;
# Скопировать &amp;lt;container-name&amp;gt;.jks например в /opt/wildfly/standalone/configuration/ (для Linux), либо в C:\wildfly\standalone\configuration\ (для Windows).&lt;br /&gt;
# Имя файла-контейнера (относительный путь от директории &amp;lt;code&amp;gt;configuration&amp;lt;/code&amp;gt;) и пароли указать в файле /opt/wildfly/standalone/configuration/standalone.xml (для Linux), либо в C:\wildfly\standalone\configuration\standalone.xml (для Windows), для WildFly 25 и выше, :&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;tls&amp;gt;&lt;br /&gt;
                &amp;lt;key-stores&amp;gt;&lt;br /&gt;
                    &amp;lt;key-store name=&amp;quot;applicationKS&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;credential-reference clear-text=&amp;quot;ПАРОЛЬ К КОНТЕЙНЕРУ&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;implementation type=&amp;quot;JKS&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;file path=&amp;quot;ИМЯ ФАЙЛА-КОНТЕЙНЕРА.jks&amp;quot; relative-to=&amp;quot;jboss.server.config.dir&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/key-store&amp;gt;&lt;br /&gt;
                &amp;lt;/key-stores&amp;gt;&lt;br /&gt;
                &amp;lt;key-managers&amp;gt;&lt;br /&gt;
                    &amp;lt;key-manager name=&amp;quot;applicationKM&amp;quot; key-store=&amp;quot;applicationKS&amp;quot; generate-self-signed-certificate-host=&amp;quot;localhost&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;credential-reference clear-text=&amp;quot;ПАРОЛЬ К ПРИВАТНОМУ КЛЮЧУ&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/key-manager&amp;gt;&lt;br /&gt;
                &amp;lt;/key-managers&amp;gt;&lt;br /&gt;
                &amp;lt;server-ssl-contexts&amp;gt;&lt;br /&gt;
                    &amp;lt;server-ssl-context name=&amp;quot;applicationSSC&amp;quot; key-manager=&amp;quot;applicationKM&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/server-ssl-contexts&amp;gt;&lt;br /&gt;
            &amp;lt;/tls&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;До версии 25, в объекте keystore (если АЛИАС не был задан, по умолчанию устанавливается значение &amp;quot;1&amp;quot;):&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;security-realm name=&amp;quot;ApplicationRealm&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;server-identities&amp;gt;&lt;br /&gt;
                    &amp;lt;ssl&amp;gt;&lt;br /&gt;
                        &amp;lt;keystore path=&amp;quot;ИМЯ ФАЙЛА-КОНТЕЙНЕРА.jks&amp;quot; relative-to=&amp;quot;jboss.server.config.dir&amp;quot; keystore-password=&amp;quot;ПАРОЛЬ К КОНТЕЙНЕРУ&amp;quot; alias=&amp;quot;АЛИАС&amp;quot; key-password=&amp;quot;ПАРОЛЬ К ПРИВАТНОМУ КЛЮЧУ&amp;quot; generate-self-signed-certificate-host=&amp;quot;localhost&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/ssl&amp;gt;&lt;br /&gt;
                &amp;lt;/server-identities&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Перезапустить сервис WildFly.&lt;br /&gt;
# Проверить подключение:&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;openssl s_client -connect &amp;lt;server-name&amp;gt;:8443&amp;lt;/syntaxhighlight&amp;gt;Verify Result должен быть 0.&lt;br /&gt;
&lt;br /&gt;
===Отключение HTTP порта (8080)===&lt;br /&gt;
{{Предупреждение|Приведённый ниже порядок действий применим для приложений, не публикующих WSDL-схему. Для приложений с WSDL потребуется дополнительная донастройка.}}&lt;br /&gt;
Для того, чтобы на сервере PCIS External отключить доступ к REST-интерфейсу по порту 8080 необходимо в файле &#039;&#039;/opt/wildfly/standalone/configuration/standalone.xml&#039;&#039; (для Linux), либо в &#039;&#039;C:\wildfly\standalone\configuration\standalone.xml&#039;&#039; (для Windows) (перед этим лучше сделать его резервную копию) в блоке &amp;lt;code&amp;gt;&amp;lt;server name=&amp;quot;default-server&amp;quot;&amp;gt;&amp;lt;/code&amp;gt; удалить строку&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;http-listener name=&amp;quot;default&amp;quot; socket-binding=&amp;quot;http&amp;quot; redirect-socket=&amp;quot;https&amp;quot; enable-http2=&amp;quot;true&amp;quot;/&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В блоке &amp;lt;code&amp;gt;&amp;lt;socket-binding-group name=&amp;quot;standard-sockets&amp;quot; default-interface=&amp;quot;public&amp;quot; port-offset=&amp;quot;${jboss.socket.binding.port-offset:0}&amp;quot;&amp;gt;&amp;lt;/code&amp;gt; удалить строку:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;socket-binding name=&amp;quot;http&amp;quot; port=&amp;quot;${jboss.http.port:8080}&amp;quot;/&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Изменить параметр &amp;lt;code&amp;gt;&amp;lt;http-connector name=&amp;quot;http-remoting-connector&amp;quot; connector-ref=&amp;quot;default&amp;quot; security-realm=&amp;quot;ApplicationRealm&amp;quot;/&amp;gt;&amp;lt;/code&amp;gt; следующим образом (изменить значение &amp;lt;code&amp;gt;connector-ref&amp;lt;/code&amp;gt; с &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; на &amp;lt;code&amp;gt;https&amp;lt;/code&amp;gt;):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;http-connector name=&amp;quot;http-remoting-connector&amp;quot; connector-ref=&amp;quot;https&amp;quot; security-realm=&amp;quot;ApplicationRealm&amp;quot;/&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Переключение публикации схемы на HTTPS===&lt;br /&gt;
Для того, чтобы, располагающаяся в WSDL, ссылка на схему была также корректна, необходимо в &amp;lt;code&amp;gt;&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:webservices:2.0&amp;quot;&amp;gt;&amp;lt;/code&amp;gt; добавить (заменив значения wsdl-host и, при необходимости, wsdl-port и wsdl-secure-port на необходимые) следующее:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-host&amp;gt;yoursite.com&amp;lt;/wsdl-host&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-port&amp;gt;8080&amp;lt;/wsdl-port&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-secure-port&amp;gt;8443&amp;lt;/wsdl-secure-port&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-uri-scheme&amp;gt;https&amp;lt;/wsdl-uri-scheme&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Пример результата:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:webservices:2.0&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-host&amp;gt;paycontrol.org&amp;lt;/wsdl-host&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-port&amp;gt;8080&amp;lt;/wsdl-port&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-secure-port&amp;gt;8443&amp;lt;/wsdl-secure-port&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-uri-scheme&amp;gt;https&amp;lt;/wsdl-uri-scheme&amp;gt;&lt;br /&gt;
            &amp;lt;endpoint-config name=&amp;quot;Standard-Endpoint-Config&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;endpoint-config name=&amp;quot;Recording-Endpoint-Config&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;pre-handler-chain name=&amp;quot;recording-handlers&amp;quot; protocol-bindings=&amp;quot;##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;handler name=&amp;quot;RecordingHandler&amp;quot; class=&amp;quot;org.jboss.ws.common.invocation.RecordingServerHandler&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/pre-handler-chain&amp;gt;&lt;br /&gt;
            &amp;lt;/endpoint-config&amp;gt;&lt;br /&gt;
            &amp;lt;client-config name=&amp;quot;Standard-Client-Config&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/subsystem&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Указание определённых стандартов защиты и алгоритмов===&lt;br /&gt;
Для выбора стандарта защиты HTTPS, только, например, TLS 1.2, нужно в &#039;&#039;объект https-listener объекта &amp;lt;nowiki&amp;gt;&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:undertow:X.X&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039; добавить, &#039;&#039;&#039;enabled-protocols=&amp;quot;TLSv1.2&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для выбора определённых криптографических алгоритмов, необходимо их указать в &#039;&#039;объекте https-listener объекта &amp;lt;nowiki&amp;gt;&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:undertow:X.X&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039;. Например, для запрета режимов работы без использования алгоритмов Диффи-Хеллмана, нужно добавить &#039;&#039;&#039;enabled-cipher-suites=&amp;quot;ALL:!kRSA&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:undertow:1.2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;server name=&amp;quot;default-server&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;https-listener name=&amp;quot;https&amp;quot; socket-binding=&amp;quot;https&amp;quot; security-realm=&amp;quot;ApplicationRealm&amp;quot; enable-http2=&amp;quot;true&amp;quot; enabled-cipher-suites=&amp;quot;ALL:!kRSA&amp;quot; enabled-protocols=&amp;quot;TLSv1.2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/server&amp;gt;&lt;br /&gt;
&amp;lt;/subsystem&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://security.stackexchange.com/questions/145855/how-to-enforce-perfect-forward-secrecy-using-jvm-properties&lt;br /&gt;
&lt;br /&gt;
https://www.openssl.org/docs/manmaster/man1/ciphers.html&lt;br /&gt;
&lt;br /&gt;
===Включение дополнительных заголовков===&lt;br /&gt;
Для включения дополнительных HTTP заголовков необходимо в файл&lt;br /&gt;
* Linux:&lt;br /&gt;
*: /opt/wildfly/standalone/configuration/standalone.xml&lt;br /&gt;
* Windows:&lt;br /&gt;
*: C:\wildfly\standalone\configuration\standalone.xml&lt;br /&gt;
# добавить фильтры в раздел &#039;&#039;&amp;lt;nowiki&amp;gt;&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:undertow:X.X&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039; добавив блок (при его отсутствии) &amp;lt;code&amp;gt;&amp;lt;filters&amp;gt;&amp;lt;/filters&amp;gt;&amp;lt;/code&amp;gt; следующего содержания:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;filters&amp;gt;&lt;br /&gt;
                &amp;lt;response-header name=&amp;quot;transport-security&amp;quot; header-name=&amp;quot;Strict-Transport-Security&amp;quot; header-value=&amp;quot;max-age=31536000&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;response-header name=&amp;quot;x-frame-options&amp;quot; header-name=&amp;quot;X-Frame-Options&amp;quot; header-value=&amp;quot;DENY&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;response-header name=&amp;quot;x-content-type-options&amp;quot; header-name=&amp;quot;X-Content-Type-Options&amp;quot; header-value=&amp;quot;nosniff&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;response-header name=&amp;quot;Content-Security-Policy&amp;quot; header-name=&amp;quot;Content-Security-Policy&amp;quot; header-value=&amp;quot;default-src &#039;self&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/filters&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# добавить ссылки на эти фильтры в раздел &#039;&#039;&amp;lt;nowiki&amp;gt;&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:undertow:X.X&amp;quot;&amp;gt; в &amp;lt;server name=&amp;quot;default-server&amp;quot;&amp;gt; в &amp;lt;host name=&amp;quot;default-host&amp;quot; alias=&amp;quot;localhost&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039; включив следующие строки:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;filter-ref name=&amp;quot;transport-security&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;filter-ref name=&amp;quot;x-frame-options&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;filter-ref name=&amp;quot;x-content-type-options&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;filter-ref name=&amp;quot;Content-Security-Policy&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:undertow:11.0&amp;quot; default-server=&amp;quot;default-server&amp;quot; default-virtual-host=&amp;quot;default-host&amp;quot; default-servlet-container=&amp;quot;default&amp;quot; default-security-domain=&amp;quot;other&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;buffer-cache name=&amp;quot;default&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;server name=&amp;quot;default-server&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;http-listener name=&amp;quot;default&amp;quot; socket-binding=&amp;quot;http&amp;quot; redirect-socket=&amp;quot;https&amp;quot; enable-http2=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;https-listener name=&amp;quot;https&amp;quot; socket-binding=&amp;quot;https&amp;quot; security-realm=&amp;quot;ApplicationRealm&amp;quot; enable-http2=&amp;quot;true&amp;quot; enabled-cipher-suites=&amp;quot;ALL:!kRSA&amp;quot; enabled-protocols=&amp;quot;TLSv1.2&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;host name=&amp;quot;default-host&amp;quot; alias=&amp;quot;localhost&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;http-invoker security-realm=&amp;quot;ApplicationRealm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;filter-ref name=&amp;quot;transport-security&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;filter-ref name=&amp;quot;x-frame-options&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;filter-ref name=&amp;quot;x-content-type-options&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;filter-ref name=&amp;quot;Content-Security-Policy&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/host&amp;gt;&lt;br /&gt;
    &amp;lt;/server&amp;gt;&lt;br /&gt;
    &amp;lt;servlet-container name=&amp;quot;default&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;jsp-config/&amp;gt;&lt;br /&gt;
        &amp;lt;websockets/&amp;gt;&lt;br /&gt;
    &amp;lt;/servlet-container&amp;gt;&lt;br /&gt;
    &amp;lt;filters&amp;gt;&lt;br /&gt;
        &amp;lt;response-header name=&amp;quot;transport-security&amp;quot; header-name=&amp;quot;Strict-Transport-Security&amp;quot; header-value=&amp;quot;max-age=31536000&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;response-header name=&amp;quot;x-frame-options&amp;quot; header-name=&amp;quot;X-Frame-Options&amp;quot; header-value=&amp;quot;DENY&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;response-header name=&amp;quot;x-content-type-options&amp;quot; header-name=&amp;quot;X-Content-Type-Options&amp;quot; header-value=&amp;quot;nosniff&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;response-header name=&amp;quot;Content-Security-Policy&amp;quot; header-name=&amp;quot;Content-Security-Policy&amp;quot; header-value=&amp;quot;default-src &#039;self&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/filters&amp;gt;&lt;br /&gt;
&amp;lt;/subsystem&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Изменение номера порта==&lt;br /&gt;
{{Предупреждение|ОС Linux не позволяет сервисам работающим не от имени root использовать порты с номерами ниже 1024. Для использования портов ниже 1024 необходимо выполнять трансляцию, например с помощью netfilter (iptables/firewalld).}}&lt;br /&gt;
Для изменения номера порта необходимо в файле /opt/wildfly/standalone/configuration/standalone.xml (Linux) или в C:\wildfly\standalone\configuration\standalone.xml (Windows), в блоке &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;socket-binding-group name=&amp;quot;standard-sockets&amp;quot; default-interface=&amp;quot;public&amp;quot; port-offset=&amp;quot;${jboss.socket.binding.port-offset:0}&amp;quot;&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; в нужном (для http, либо https) параметре &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;socket-binding name=&amp;quot;http&amp;quot; port=&amp;quot;${jboss.http.port:8080}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;socket-binding name=&amp;quot;https&amp;quot; port=&amp;quot;${jboss.https.port:8443}&amp;quot;/&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; изменить номер используемого порта.&lt;br /&gt;
&lt;br /&gt;
После изменения номера порта, службу WildFly необходимо перезапустить.&lt;br /&gt;
&lt;br /&gt;
При использовании «сервером» стандартных портов (80 для HTTP или 443 для HTTPS), при установке параметров настроек «клиента» для подключения к «серверу», номер порта в адресе дополнительно указывать не рекомендуется во избежании проблем, т.к. в этих случаях, согласно RFC2616 используется порт по умолчанию. При дополнительном указании в адресе порта по умолчанию бывали случаи возникновения проблем подключения.&lt;br /&gt;
&lt;br /&gt;
Приведённые ниже примеры описаны для протокола HTTP. При использовании HTTPS, необходимо также скорректировать название используемого протокола в адресе подключения.&lt;br /&gt;
===Изменение порта PCS===&lt;br /&gt;
При изменении порта для подключения к PCS, необходимо:&lt;br /&gt;
* установить новый порт для обращения к PC в настройках [[Прикладная система|прикладной системы]];&lt;br /&gt;
* изменить номер порта в настройках [[Сервер PayControl|PCIS External]].&lt;br /&gt;
Для изменения номера порта для обращения к PCS, в настройках PCIS External в файле /opt/wildfly/bin/standalone.conf (Linux) или C:\opt\wildfly\bin\standalone.conf.bat (Windows), в строке&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;JAVA_OPTS=&amp;quot;$JAVA_OPTS -Dpcservice.endpoint=http://localhost:8080/ws/PayControlServiceV3?wsdl -Duser.language=ru -Dpaycontrol.locale=ru&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
в параметре -Dpcservice.endpoint=http://&amp;lt;HOSTNAME&amp;gt;:&amp;lt;PORT&amp;gt;/ws/PayControlServiceV3?wsdl установить новое значение &amp;lt;PORT&amp;gt;.&lt;br /&gt;
===Изменение порта PCIS Internal===&lt;br /&gt;
Для изменения порта для подключения к [[Сервер PayControl|PCIS Internal]] необходимо в БД PCS выполнить следующий запрос:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_internal_url=&#039;http://&amp;lt;HOSTNASME&amp;gt;:&amp;lt;PORT&amp;gt;/wsis/PayControlInteractionService?wsdl&#039; where systemid=&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
где&lt;br /&gt;
* &amp;lt;HOSTNASME&amp;gt; - имя хоста PCIS Internal;&lt;br /&gt;
* &amp;lt;PORT&amp;gt; новое значение порта;&lt;br /&gt;
* XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - UUID идентификатор прикладной системы.&lt;br /&gt;
&lt;br /&gt;
Допускается выполнять запрос к БД PCS на обновление адреса PCIS Internal без указания systemid, в случае, если подключена только одна прикладная система, или необходимо обновить адрес PCIS Internal для всех прикладных систем.&lt;br /&gt;
&lt;br /&gt;
После изменения номера порта, службу wildfly необходимо перезапустить.&lt;br /&gt;
===Изменение порта PCIS External===&lt;br /&gt;
{{Предупреждение|При изменении порта PCIS External мобильное приложение потеряет возможность подключения к серверу PayControl до тех пор, пока пользователю мобильного приложения не будет перевыпущен ключ с новым адресом подключения к серверу.}}&lt;br /&gt;
&lt;br /&gt;
{{Предупреждение|Изменение порта, на котором сервер PCIS External ожидает подключения не всегда ведёт к изменению порта назначения, который используется мобильным приложением для доступа к серверу PayControl. Такая ситуация, например, может возникнуть, если перед сервером PCIS External со стороны сети Интернет установлено оборудование/ПО, выполняющее трансляцию сетевых портов.}}&lt;br /&gt;
При изменении порта PCIS External необходимо в БД PCS выполнить следующий запрос:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_external_url=&#039;http://&amp;lt;HOSTNASME&amp;gt;:&amp;lt;PORT&amp;gt;/PayControl-interaction-rest/&#039; where systemid=&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
где&lt;br /&gt;
* &amp;lt;HOSTNASME&amp;gt; - имя хоста PCIS External, используемое мобильными устройствами для доступа к серверу PayControl;&lt;br /&gt;
* &amp;lt;PORT&amp;gt; новое значение порта;&lt;br /&gt;
* XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - UUID идентификатор прикладной системы.&lt;br /&gt;
&lt;br /&gt;
Допускается выполнять запрос к БД PCS на обновление адреса PCIS External без указания systemid, в случае, если подключена только одна прикладная система, или необходимо обновить адрес PCIS External для всех прикладных систем.&lt;br /&gt;
&lt;br /&gt;
После изменения номера порта, службу wildfly необходимо перезапустить.&lt;br /&gt;
== Валидация подключения ==&lt;br /&gt;
=== PostgreSQL ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;validation&amp;gt;&lt;br /&gt;
      &amp;lt;valid-connection-checker class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker&amp;quot;&amp;gt;&amp;lt;/valid-connection-checker&amp;gt;&lt;br /&gt;
      &amp;lt;exception-sorter class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter&amp;quot;&amp;gt;&amp;lt;/exception-sorter&amp;gt;&lt;br /&gt;
    &amp;lt;/validation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Oracle ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;validation&amp;gt;&lt;br /&gt;
        &amp;lt;check-valid-connection-sql&amp;gt;select 1 from dual&amp;lt;/check-valid-connection-sql&amp;gt;&lt;br /&gt;
        &amp;lt;validate-on-match&amp;gt;false&amp;lt;/validate-on-match&amp;gt;&lt;br /&gt;
        &amp;lt;background-validation&amp;gt;true&amp;lt;/background-validation&amp;gt;&lt;br /&gt;
        &amp;lt;background-validation-millis&amp;gt;10000&amp;lt;/background-validation-millis&amp;gt;&lt;br /&gt;
    &amp;lt;/validation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== MS SQL ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;validation&amp;gt;&lt;br /&gt;
      &amp;lt;valid-connection-checker class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker&amp;quot;&amp;gt;&amp;lt;/valid-connection-checker&amp;gt;&lt;br /&gt;
    &amp;lt;/validation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Журналирование=&lt;br /&gt;
==Доступ к данным журнала==&lt;br /&gt;
Журнал работы сервера PayControl записываются общий лог функционирования Wildfly.&lt;br /&gt;
&lt;br /&gt;
Файлы журналов за текущий день доступны по следующему пути:&lt;br /&gt;
* Linux:&lt;br /&gt;
*: /opt/wildfly/standalone/log/server.log&lt;br /&gt;
* Windows:&lt;br /&gt;
*: C:\wildfly\standalone\log\server.log&lt;br /&gt;
Для просмотра журнала за другие дни, нужно добавить к имени файла требуемую дату в формате server.log.YYYY-MM-DD&lt;br /&gt;
&lt;br /&gt;
==Включение журналирования SOAP-вызовов==&lt;br /&gt;
Для включения расширенного логирования необходимо:&lt;br /&gt;
# Остановить службу wildfly.&lt;br /&gt;
# Добавить после блока &amp;lt;extensions&amp;gt; ... &amp;lt;/extensions&amp;gt; в файл&lt;br /&gt;
#* Linux:&lt;br /&gt;
#*: /opt/wildfly/standalone/configuration/standalone.xml&lt;br /&gt;
#* Windows:&lt;br /&gt;
#*: C:\wildfly\standalone\configuration\standalone.xml&lt;br /&gt;
#: следующий блок:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;system-properties&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;org.apache.cxf.logging.enabled&amp;quot; value=&amp;quot;pretty&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/system-properties&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Запустить службу wildfly.&lt;br /&gt;
==Направление логов Wildfly в Kafka==&lt;br /&gt;
Исходник https://developer.jboss.org/docs/DOC-56423. Основное отличие - добавление &amp;lt;code&amp;gt;&amp;lt;module name=&amp;quot;com.fasterxml.jackson.core.jackson-databind&amp;quot;/&amp;gt;&amp;lt;/code&amp;gt; в зависимости модуля &#039;&#039;org.apache.kafka.clients&#039;&#039;.&lt;br /&gt;
===Модули===&lt;br /&gt;
Файлы модулей можно загрузить с https://mvnrepository.com/&lt;br /&gt;
====org.apache.kafka.clients====&lt;br /&gt;
Создать файл &amp;lt;code&amp;gt;/opt/wildfly/modules/system/layers/base/org/apache/kafka/clients/main/module.xml&amp;lt;/code&amp;gt; с содержанием&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;module name=&amp;quot;org.apache.kafka.clients&amp;quot; xmlns=&amp;quot;urn:jboss:module:1.8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;resources&amp;gt;&lt;br /&gt;
        &amp;lt;resource-root path=&amp;quot;kafka-clients-2.6.0.jar&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;resource-root path=&amp;quot;snappy-java-1.1.8.2.jar&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;resource-root path=&amp;quot;lz4-java-1.7.1.jar&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/resources&amp;gt;&lt;br /&gt;
    &amp;lt;dependencies&amp;gt;&lt;br /&gt;
        &amp;lt;module name=&amp;quot;javax.api&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;module name=&amp;quot;org.slf4j&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;module name=&amp;quot;com.fasterxml.jackson.core.jackson-databind&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
и добавить в директорию указанные в блоке &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt; файлы.&lt;br /&gt;
====org.apache.kafka.log4jappender====&lt;br /&gt;
Создать файл &amp;lt;code&amp;gt;/opt/wildfly/modules/system/layers/base/org/apache/kafka/log4jappender/main/module.xml&amp;lt;/code&amp;gt; с содержанием&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;module name=&amp;quot;org.apache.kafka.log4jappender&amp;quot; xmlns=&amp;quot;urn:jboss:module:1.8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;resources&amp;gt;&lt;br /&gt;
        &amp;lt;resource-root path=&amp;quot;kafka-log4j-appender-2.6.0.jar&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;resource-root path=&amp;quot;slf4j-log4j12-1.7.30.jar&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/resources&amp;gt;&lt;br /&gt;
    &amp;lt;dependencies&amp;gt;&lt;br /&gt;
        &amp;lt;module name=&amp;quot;org.slf4j&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;module name=&amp;quot;org.apache.kafka.clients&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;module name=&amp;quot;org.jboss.log4j.logmanager&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
и добавить в директорию указанные в блоке &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt; файлы.&lt;br /&gt;
====org.apache.log4j====&lt;br /&gt;
Добавить модуль log4jappender в качестве зависимости в существующий org.apache.log4j модуль:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;module name=&amp;quot;org.apache.log4j&amp;quot; xmlns=&amp;quot;urn:jboss:module:1.6&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependencies&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;module name=&amp;quot;org.apache.kafka.log4jappender&amp;quot; export=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====org.jboss.as.standalone====&lt;br /&gt;
Указать в имеющемся модуле org.jboss.as.standalone в качестве зависимости модуль org.apache.kafka.clients.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;module name=&amp;quot;org.jboss.as.standalone&amp;quot; xmlns=&amp;quot;urn:jboss:module:1.6&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependencies&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;module name=&amp;quot;org.apache.kafka.clients&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Хэндлеры===&lt;br /&gt;
Необходимо добавить перечисленные ниже хэндлеры в файл standalone.xml в блок &amp;lt;code&amp;gt;&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:logging:8.0&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
====kafka====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;custom-handler name=&amp;quot;kafka&amp;quot; class=&amp;quot;org.apache.kafka.log4jappender.KafkaLog4jAppender&amp;quot; module=&amp;quot;org.apache.log4j&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;level name=&amp;quot;INFO&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;formatter&amp;gt;&lt;br /&gt;
                    &amp;lt;named-formatter name=&amp;quot;PATTERN&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/formatter&amp;gt;&lt;br /&gt;
                &amp;lt;properties&amp;gt;&lt;br /&gt;
                    &amp;lt;property name=&amp;quot;brokerList&amp;quot; value=&amp;quot;localhost:9092&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;property name=&amp;quot;topic&amp;quot; value=&amp;quot;out-topic&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/properties&amp;gt;&lt;br /&gt;
            &amp;lt;/custom-handler&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====async-kafka-wrapper====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;async-handler name=&amp;quot;async-kafka-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;level name=&amp;quot;ALL&amp;quot;/&amp;gt; &lt;br /&gt;
                &amp;lt;queue-length value=&amp;quot;1024&amp;quot;/&amp;gt; &lt;br /&gt;
                &amp;lt;overflow-action value=&amp;quot;block&amp;quot;/&amp;gt; &lt;br /&gt;
                &amp;lt;subhandlers&amp;gt; &lt;br /&gt;
                    &amp;lt;handler name=&amp;quot;kafka&amp;quot;/&amp;gt; &lt;br /&gt;
                &amp;lt;/subhandlers&amp;gt; &lt;br /&gt;
            &amp;lt;/async-handler&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Включение хэндлера====&lt;br /&gt;
В блок &amp;lt;code&amp;gt;&amp;lt;handlers&amp;gt;&amp;lt;/code&amp;gt; добавить &amp;lt;code&amp;gt;&amp;lt;handler name=&amp;quot;async-kafka-wrapper&amp;quot;/&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Проблемы и способы их устранения=&lt;br /&gt;
==Очень медленный старт через standalone.sh (каждый этап скрипта запуска - с большими задержками). Система отправляет сигнал на остановку сервиса==&lt;br /&gt;
Вероятная проблема - неверные настройки DNS сервера.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Решение&#039;&#039;&#039;:Необходимо скорректировать настройки DNS.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Проблема обнаружилась 2018-07-27 при развёртывании у заказчика.&#039;&#039; [[Участник:A.bursakov|A.bursakov]] ([[Обсуждение участника:A.bursakov|обсуждение]]) 19:56, 1 августа 2018 (MSK)&lt;br /&gt;
==Не происходит «биндинг» IP-адреса адаптера==&lt;br /&gt;
Вероятная проблема - отсутствие PTR-записи на DNS-сервере, или неправильная работа службы DNS.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Решение&#039;&#039;&#039;: Добавить в файл opt/wildfly/bin/standalone.conf (Linux) или C:\opt\wildfly\bin\standalone.conf.bat (Windows), в переменную JAVA_OPTS параметр -Djboss.bind.address=0.0.0.0&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Проблема проявилась на тестовом Windows-сервере&#039;&#039; [[Участник:A.bursakov|A.bursakov]] ([[Обсуждение участника:A.bursakov|обсуждение]]) 19:56, 1 августа 2018 (MSK)&lt;br /&gt;
&lt;br /&gt;
==Частое появление WARNING в логе==&lt;br /&gt;
Предупреждения в логе вида:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
Caused by: com.ctc.wstx.exc.WstxIOException: UT010029: Stream is closed&lt;br /&gt;
Caused by: java.io.IOException: UT010029: Stream is closed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
Caused by: java.io.IOException: Broken pipe&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Могут быть вызваны системой мониторинга, которая для проверки того, что сервер доступен, устанавливает соединение и обрывает его получив лишь только header.&lt;br /&gt;
&lt;br /&gt;
Для отключения предупреждений о непредвиденном закрытии соединения необходимо в файл /opt/wildfly/standalone/configuration/standalone.xml в блок &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;profile&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:logging:X.X&amp;quot;&amp;gt;&lt;br /&gt;
       ... &lt;br /&gt;
    &amp;lt;/subsystem&amp;gt;&lt;br /&gt;
&amp;lt;/profile&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; добавить:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- to prevent warnings on unsuspicious connection close --&amp;gt;&lt;br /&gt;
&amp;lt;logger category=&amp;quot;org.apache.cxf.phase.PhaseInterceptorChain&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;level name=&amp;quot;ERROR&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/logger&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==INFO: Disabling contextual LOB creation as createClob() method threw error==&lt;br /&gt;
Иногда смущает появление в журнале события, из-за присутствия в его составе слова &amp;quot;error&amp;quot;:&lt;br /&gt;
    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 &lt;br /&gt;
Для отключения этого сообщения необходимо установить &amp;lt;code&amp;gt;hibernate.temp.use_jdbc_metadata_defaults=false&amp;lt;/code&amp;gt;&lt;br /&gt;
в файл persistence.xml, располагающийся внутри модуля сервера следующим образом:&lt;br /&gt;
        &amp;lt;properties&amp;gt;&lt;br /&gt;
            ...&lt;br /&gt;
            &amp;lt;property name=&amp;quot;hibernate.temp.use_jdbc_metadata_defaults&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
            ...&lt;br /&gt;
        &amp;lt;/properties&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Wildfly не стартует как служба и нет логов ==&lt;br /&gt;
Возможные проблемы:&lt;br /&gt;
* Некорректные права на директории/файлы в /opt/wildfly.&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;chown -RHv wildfly:wildfly /opt/wildfly&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Проблемы с определением необходимой Java. Для восстановления необходимо выполнить &amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;sudo update-alternatives --config java&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Серверная часть]]&lt;br /&gt;
[[Категория:Возможные проблемы]]&lt;br /&gt;
[[Категория:Отладка]]&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
	<entry>
		<id>https://repo.paycontrol.org/wiki/index.php?title=Wildfly&amp;diff=644</id>
		<title>Wildfly</title>
		<link rel="alternate" type="text/html" href="https://repo.paycontrol.org/wiki/index.php?title=Wildfly&amp;diff=644"/>
		<updated>2021-12-28T11:55:31Z</updated>

		<summary type="html">&lt;p&gt;A.bursakov: /* Добавление сертификата */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Настройка=&lt;br /&gt;
==Из командной строки==&lt;br /&gt;
Подключение к консоли:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo /opt/wildfly/bin/jboss-cli.sh --connect&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Выполнение команд в неинтерактивном режиме:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo /opt/wildfly/bin/jboss-cli.sh --connect --commands=ls\ deployment&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Настройка PayControl===&lt;br /&gt;
Удаление настроек по умолчанию:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
data-source remove --name=ExampleDS&lt;br /&gt;
/subsystem=ee/service=default-bindings:remove()&lt;br /&gt;
reload&lt;br /&gt;
/subsystem=datasources/jdbc-driver=h2:remove&lt;br /&gt;
/subsystem=undertow/server=default-server/host=default-host/location=\/:remove()&lt;br /&gt;
/subsystem=undertow/configuration=handler:remove()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Добавление драйвера (postgresql) и источников данных:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
module add --name=org.postgresql --resources=/opt/paycontrol/postgresql-42.2.5.jar --dependencies=javax.api,javax.transaction.api,javax.servlet.api&lt;br /&gt;
/subsystem=datasources/jdbc-driver=postgres:add(driver-name=&amp;quot;postgres&amp;quot;,driver-module-name=&amp;quot;org.postgresql&amp;quot;,driver-class-name=org.postgresql.Driver)&lt;br /&gt;
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&lt;br /&gt;
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&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Установка wsdl-host&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/subsystem=webservices:write-attribute\(name=wsdl-host,value=docker.loc\)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление источников данных (разные СУБД)===&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Datasource!!Connection URL&lt;br /&gt;
|-&lt;br /&gt;
|IBM DB2||jdbc:db2://SERVER_NAME:PORT/DATABASE_NAME&lt;br /&gt;
|-&lt;br /&gt;
|MariaDB||jdbc:mariadb://SERVER_NAME:PORT/DATABASE_NAME&lt;br /&gt;
|-&lt;br /&gt;
|Microsoft SQL Server||jdbc:sqlserver://SERVER_NAME:PORT;DatabaseName=DATABASE_NAME&lt;br /&gt;
|-&lt;br /&gt;
|MySQL||jdbc:mysql://SERVER_NAME:PORT/DATABASE_NAME&lt;br /&gt;
|-&lt;br /&gt;
|Oracle||jdbc:oracle:thin:@SERVER_NAME:PORT:ORACLE_SID&lt;br /&gt;
|-&lt;br /&gt;
|PostgreSQL||jdbc:postgresql://SERVER_NAME:PORT/DATABASE_NAME&lt;br /&gt;
|-&lt;br /&gt;
|Sybase||jdbc:sybase:Tds:SERVER_NAME:PORT/DATABASE_NAME&lt;br /&gt;
|}&lt;br /&gt;
==Удаление настроек по умолчанию==&lt;br /&gt;
При конфигурировании Wildfly можно (при [[Перевод в промышленную эксплуатацию|переводе системы в промышленную эксплуатацию]] - рекомендуется) удалить пример источника данных и страницу-приветствие. Для этого в файле standalone.xml необходимо убрать (либо закомментировать) следующие объекты:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;datasource jndi-name=&amp;quot;java:jboss/datasources/ExampleDS&amp;quot; pool-name=&amp;quot;ExampleDS&amp;quot; enabled=&amp;quot;true&amp;quot; use-java-context=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;connection-url&amp;gt;jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE&amp;lt;/connection-url&amp;gt;&lt;br /&gt;
                    &amp;lt;driver&amp;gt;h2&amp;lt;/driver&amp;gt;&lt;br /&gt;
                    &amp;lt;security&amp;gt;&lt;br /&gt;
                        &amp;lt;user-name&amp;gt;sa&amp;lt;/user-name&amp;gt;&lt;br /&gt;
                        &amp;lt;password&amp;gt;sa&amp;lt;/password&amp;gt;&lt;br /&gt;
                    &amp;lt;/security&amp;gt;&lt;br /&gt;
                &amp;lt;/datasource&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;driver name=&amp;quot;h2&amp;quot; module=&amp;quot;com.h2database.h2&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xa-datasource-class&amp;gt;org.h2.jdbcx.JdbcDataSource&amp;lt;/xa-datasource-class&amp;gt;&lt;br /&gt;
                    &amp;lt;/driver&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
             &amp;lt;default-bindings context-service=&amp;quot;java:jboss/ee/concurrency/context/default&amp;quot; datasource=&amp;quot;java:jboss/datasources/ExampleDS&amp;quot; managed-executor-service=&amp;quot;java:jboss/ee/concurrency/executor/default&amp;quot; managed-scheduled-executor-service=&amp;quot;java:jboss/ee/concurrency/scheduler/default&amp;quot; managed-thread-factory=&amp;quot;java:jboss/ee/concurrency/factory/default&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;location name=&amp;quot;/&amp;quot; handler=&amp;quot;welcome-content&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;  &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;handlers&amp;gt;&lt;br /&gt;
                &amp;lt;file name=&amp;quot;welcome-content&amp;quot; path=&amp;quot;${jboss.home.dir}/welcome-content&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/handlers&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Добавление сертификатов корпоративных УЦ==&lt;br /&gt;
java keytool – с его помощью установить корневой сертификат в keystore. Если есть промежуточные, то их тоже.&lt;br /&gt;
&lt;br /&gt;
java keystore password по умолчанию – “changeit”.&lt;br /&gt;
&lt;br /&gt;
Примеры инструкций:&lt;br /&gt;
* https://docs.microsoft.com/ru-ru/java/azure/java-sdk-add-certificate-ca-store?view=azure-java-stable&lt;br /&gt;
* https://www.ibm.com/support/knowledgecenter/en/SSFUEU_6.2.1/com.ibm.swg.ba.cognos.administrators_guide.6.2.1.doc/t_shi_import_the_root_certificate_for_java.html&lt;br /&gt;
&lt;br /&gt;
Как минимум в CN сертификата должен быть адрес, по которому происходит обращение к серверу (DNS или IP). Если этого будет недостаточно, тогда добавить в SAN сертификата.&lt;br /&gt;
&lt;br /&gt;
==Включение и конфигурирование [[HTTPS]]==&lt;br /&gt;
===Добавление сертификата===&lt;br /&gt;
Для добавления/обновления сертификата необходимо выполнить следующие действия:&lt;br /&gt;
# Составить цепочку сертификатов.&amp;lt;br&amp;gt;Из файлов сертификатов в формате PEM (Base64) составить цепочку путём соединения в новом файле с расширением crt, например fullchain.crt. Для этого в новый файл с помощью текстового редактора нужно добавить сертификат корневого УЦ, промежуточных, и собственно сертификат сервера.&lt;br /&gt;
# Создать контейнер формата pkcs12:&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;openssl pkcs12 -export -in fullchain.crt -inkey private_key.key -out keycontainer.p12&amp;lt;/syntaxhighlight&amp;gt; при экспорте следует задать пароль &amp;lt;password&amp;gt; для приватного ключа.&lt;br /&gt;
# Создать JKS-контейнер из PKCS12:&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;keytool -importkeystore -srckeystore keycontainer.p12 \&lt;br /&gt;
        -srcstoretype PKCS12 \&lt;br /&gt;
        -destkeystore &amp;lt;container-name&amp;gt;.jks \&lt;br /&gt;
        -deststoretype JKS&amp;lt;/syntaxhighlight&amp;gt; при импорте указываем &amp;lt;password&amp;gt;, при экспорте указываем пароль к контейнеру.&lt;br /&gt;
# Скопировать &amp;lt;container-name&amp;gt;.jks например в /opt/wildfly/standalone/configuration/ (для Linux), либо в C:\wildfly\standalone\configuration\ (для Windows).&lt;br /&gt;
# Имя файла-контейнера (относительный путь от директории &amp;lt;code&amp;gt;configuration&amp;lt;/code&amp;gt;) и пароли указать в файле /opt/wildfly/standalone/configuration/standalone.xml (для Linux), либо в C:\wildfly\standalone\configuration\standalone.xml (для Windows), для WildFly 25 и выше, :&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;tls&amp;gt;&lt;br /&gt;
                &amp;lt;key-stores&amp;gt;&lt;br /&gt;
                    &amp;lt;key-store name=&amp;quot;applicationKS&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;credential-reference clear-text=&amp;quot;ПАРОЛЬ К КОНТЕЙНЕРУ&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;implementation type=&amp;quot;JKS&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;file path=&amp;quot;ИМЯ ФАЙЛА-КОНТЕЙНЕРА.jks&amp;quot; relative-to=&amp;quot;jboss.server.config.dir&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/key-store&amp;gt;&lt;br /&gt;
                &amp;lt;/key-stores&amp;gt;&lt;br /&gt;
                &amp;lt;key-managers&amp;gt;&lt;br /&gt;
                    &amp;lt;key-manager name=&amp;quot;applicationKM&amp;quot; key-store=&amp;quot;applicationKS&amp;quot; generate-self-signed-certificate-host=&amp;quot;localhost&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;credential-reference clear-text=&amp;quot;ПАРОЛЬ К ПРИВАТНОМУ КЛЮЧУ&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/key-manager&amp;gt;&lt;br /&gt;
                &amp;lt;/key-managers&amp;gt;&lt;br /&gt;
                &amp;lt;server-ssl-contexts&amp;gt;&lt;br /&gt;
                    &amp;lt;server-ssl-context name=&amp;quot;applicationSSC&amp;quot; key-manager=&amp;quot;applicationKM&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/server-ssl-contexts&amp;gt;&lt;br /&gt;
            &amp;lt;/tls&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;До версии 25, в объекте keystore (если АЛИАС не был задан, по умолчанию устанавливается значение &amp;quot;1&amp;quot;):&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;security-realm name=&amp;quot;ApplicationRealm&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;server-identities&amp;gt;&lt;br /&gt;
                    &amp;lt;ssl&amp;gt;&lt;br /&gt;
                        &amp;lt;keystore path=&amp;quot;ИМЯ ФАЙЛА-КОНТЕЙНЕРА.jks&amp;quot; relative-to=&amp;quot;jboss.server.config.dir&amp;quot; keystore-password=&amp;quot;ПАРОЛЬ К КОНТЕЙНЕРУ&amp;quot; alias=&amp;quot;АЛИАС&amp;quot; key-password=&amp;quot;ПАРОЛЬ К ПРИВАТНОМУ КЛЮЧУ&amp;quot; generate-self-signed-certificate-host=&amp;quot;localhost&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/ssl&amp;gt;&lt;br /&gt;
                &amp;lt;/server-identities&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Перезапустить сервис WildFly.&lt;br /&gt;
# Проверить подключение:&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;openssl s_client -connect &amp;lt;server-name&amp;gt;:8443&amp;lt;/syntaxhighlight&amp;gt;Verify Result должен быть 0.&lt;br /&gt;
&lt;br /&gt;
===Отключение HTTP порта (8080)===&lt;br /&gt;
{{Предупреждение|Приведённый ниже порядок действий применим для приложений, не публикующих WSDL-схему. Для приложений с WSDL потребуется дополнительная донастройка.}}&lt;br /&gt;
Для того, чтобы на сервере PCIS External отключить доступ к REST-интерфейсу по порту 8080 необходимо в файле &#039;&#039;/opt/wildfly/standalone/configuration/standalone.xml&#039;&#039; (для Linux), либо в &#039;&#039;C:\wildfly\standalone\configuration\standalone.xml&#039;&#039; (для Windows) (перед этим лучше сделать его резервную копию) в блоке &amp;lt;code&amp;gt;&amp;lt;server name=&amp;quot;default-server&amp;quot;&amp;gt;&amp;lt;/code&amp;gt; удалить строку&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;http-listener name=&amp;quot;default&amp;quot; socket-binding=&amp;quot;http&amp;quot; redirect-socket=&amp;quot;https&amp;quot; enable-http2=&amp;quot;true&amp;quot;/&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В блоке &amp;lt;code&amp;gt;&amp;lt;socket-binding-group name=&amp;quot;standard-sockets&amp;quot; default-interface=&amp;quot;public&amp;quot; port-offset=&amp;quot;${jboss.socket.binding.port-offset:0}&amp;quot;&amp;gt;&amp;lt;/code&amp;gt; удалить строку:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;socket-binding name=&amp;quot;http&amp;quot; port=&amp;quot;${jboss.http.port:8080}&amp;quot;/&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Изменить параметр &amp;lt;code&amp;gt;&amp;lt;http-connector name=&amp;quot;http-remoting-connector&amp;quot; connector-ref=&amp;quot;default&amp;quot; security-realm=&amp;quot;ApplicationRealm&amp;quot;/&amp;gt;&amp;lt;/code&amp;gt; следующим образом (изменить значение &amp;lt;code&amp;gt;connector-ref&amp;lt;/code&amp;gt; с &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; на &amp;lt;code&amp;gt;https&amp;lt;/code&amp;gt;):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;http-connector name=&amp;quot;http-remoting-connector&amp;quot; connector-ref=&amp;quot;https&amp;quot; security-realm=&amp;quot;ApplicationRealm&amp;quot;/&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Переключение публикации схемы на HTTPS===&lt;br /&gt;
Для того, чтобы, располагающаяся в WSDL, ссылка на схему была также корректна, необходимо в &amp;lt;code&amp;gt;&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:webservices:2.0&amp;quot;&amp;gt;&amp;lt;/code&amp;gt; добавить (заменив значения wsdl-host и, при необходимости, wsdl-port и wsdl-secure-port на необходимые) следующее:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-host&amp;gt;yoursite.com&amp;lt;/wsdl-host&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-port&amp;gt;8080&amp;lt;/wsdl-port&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-secure-port&amp;gt;8443&amp;lt;/wsdl-secure-port&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-uri-scheme&amp;gt;https&amp;lt;/wsdl-uri-scheme&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Пример результата:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:webservices:2.0&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-host&amp;gt;paycontrol.org&amp;lt;/wsdl-host&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-port&amp;gt;8080&amp;lt;/wsdl-port&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-secure-port&amp;gt;8443&amp;lt;/wsdl-secure-port&amp;gt;&lt;br /&gt;
            &amp;lt;wsdl-uri-scheme&amp;gt;https&amp;lt;/wsdl-uri-scheme&amp;gt;&lt;br /&gt;
            &amp;lt;endpoint-config name=&amp;quot;Standard-Endpoint-Config&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;endpoint-config name=&amp;quot;Recording-Endpoint-Config&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;pre-handler-chain name=&amp;quot;recording-handlers&amp;quot; protocol-bindings=&amp;quot;##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;handler name=&amp;quot;RecordingHandler&amp;quot; class=&amp;quot;org.jboss.ws.common.invocation.RecordingServerHandler&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/pre-handler-chain&amp;gt;&lt;br /&gt;
            &amp;lt;/endpoint-config&amp;gt;&lt;br /&gt;
            &amp;lt;client-config name=&amp;quot;Standard-Client-Config&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/subsystem&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Указание определённых стандартов защиты и алгоритмов===&lt;br /&gt;
Для выбора стандарта защиты HTTPS, только, например, TLS 1.2, нужно в &#039;&#039;объект https-listener объекта &amp;lt;nowiki&amp;gt;&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:undertow:X.X&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039; добавить, &#039;&#039;&#039;enabled-protocols=&amp;quot;TLSv1.2&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для выбора определённых криптографических алгоритмов, необходимо их указать в &#039;&#039;объекте https-listener объекта &amp;lt;nowiki&amp;gt;&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:undertow:X.X&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039;. Например, для запрета режимов работы без использования алгоритмов Диффи-Хеллмана, нужно добавить &#039;&#039;&#039;enabled-cipher-suites=&amp;quot;ALL:!kRSA&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:undertow:1.2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;server name=&amp;quot;default-server&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;https-listener name=&amp;quot;https&amp;quot; socket-binding=&amp;quot;https&amp;quot; security-realm=&amp;quot;ApplicationRealm&amp;quot; enable-http2=&amp;quot;true&amp;quot; enabled-cipher-suites=&amp;quot;ALL:!kRSA&amp;quot; enabled-protocols=&amp;quot;TLSv1.2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/server&amp;gt;&lt;br /&gt;
&amp;lt;/subsystem&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://security.stackexchange.com/questions/145855/how-to-enforce-perfect-forward-secrecy-using-jvm-properties&lt;br /&gt;
&lt;br /&gt;
https://www.openssl.org/docs/manmaster/man1/ciphers.html&lt;br /&gt;
&lt;br /&gt;
===Включение дополнительных заголовков===&lt;br /&gt;
Для включения дополнительных HTTP заголовков необходимо в файл&lt;br /&gt;
* Linux:&lt;br /&gt;
*: /opt/wildfly/standalone/configuration/standalone.xml&lt;br /&gt;
* Windows:&lt;br /&gt;
*: C:\wildfly\standalone\configuration\standalone.xml&lt;br /&gt;
# добавить фильтры в раздел &#039;&#039;&amp;lt;nowiki&amp;gt;&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:undertow:X.X&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039; добавив блок (при его отсутствии) &amp;lt;code&amp;gt;&amp;lt;filters&amp;gt;&amp;lt;/filters&amp;gt;&amp;lt;/code&amp;gt; следующего содержания:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;filters&amp;gt;&lt;br /&gt;
                &amp;lt;response-header name=&amp;quot;transport-security&amp;quot; header-name=&amp;quot;Strict-Transport-Security&amp;quot; header-value=&amp;quot;max-age=31536000&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;response-header name=&amp;quot;x-frame-options&amp;quot; header-name=&amp;quot;X-Frame-Options&amp;quot; header-value=&amp;quot;DENY&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;response-header name=&amp;quot;x-content-type-options&amp;quot; header-name=&amp;quot;X-Content-Type-Options&amp;quot; header-value=&amp;quot;nosniff&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;response-header name=&amp;quot;Content-Security-Policy&amp;quot; header-name=&amp;quot;Content-Security-Policy&amp;quot; header-value=&amp;quot;default-src &#039;self&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/filters&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# добавить ссылки на эти фильтры в раздел &#039;&#039;&amp;lt;nowiki&amp;gt;&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:undertow:X.X&amp;quot;&amp;gt; в &amp;lt;server name=&amp;quot;default-server&amp;quot;&amp;gt; в &amp;lt;host name=&amp;quot;default-host&amp;quot; alias=&amp;quot;localhost&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039; включив следующие строки:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;filter-ref name=&amp;quot;transport-security&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;filter-ref name=&amp;quot;x-frame-options&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;filter-ref name=&amp;quot;x-content-type-options&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;filter-ref name=&amp;quot;Content-Security-Policy&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:undertow:11.0&amp;quot; default-server=&amp;quot;default-server&amp;quot; default-virtual-host=&amp;quot;default-host&amp;quot; default-servlet-container=&amp;quot;default&amp;quot; default-security-domain=&amp;quot;other&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;buffer-cache name=&amp;quot;default&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;server name=&amp;quot;default-server&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;http-listener name=&amp;quot;default&amp;quot; socket-binding=&amp;quot;http&amp;quot; redirect-socket=&amp;quot;https&amp;quot; enable-http2=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;https-listener name=&amp;quot;https&amp;quot; socket-binding=&amp;quot;https&amp;quot; security-realm=&amp;quot;ApplicationRealm&amp;quot; enable-http2=&amp;quot;true&amp;quot; enabled-cipher-suites=&amp;quot;ALL:!kRSA&amp;quot; enabled-protocols=&amp;quot;TLSv1.2&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;host name=&amp;quot;default-host&amp;quot; alias=&amp;quot;localhost&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;http-invoker security-realm=&amp;quot;ApplicationRealm&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;filter-ref name=&amp;quot;transport-security&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;filter-ref name=&amp;quot;x-frame-options&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;filter-ref name=&amp;quot;x-content-type-options&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;filter-ref name=&amp;quot;Content-Security-Policy&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/host&amp;gt;&lt;br /&gt;
    &amp;lt;/server&amp;gt;&lt;br /&gt;
    &amp;lt;servlet-container name=&amp;quot;default&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;jsp-config/&amp;gt;&lt;br /&gt;
        &amp;lt;websockets/&amp;gt;&lt;br /&gt;
    &amp;lt;/servlet-container&amp;gt;&lt;br /&gt;
    &amp;lt;filters&amp;gt;&lt;br /&gt;
        &amp;lt;response-header name=&amp;quot;transport-security&amp;quot; header-name=&amp;quot;Strict-Transport-Security&amp;quot; header-value=&amp;quot;max-age=31536000&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;response-header name=&amp;quot;x-frame-options&amp;quot; header-name=&amp;quot;X-Frame-Options&amp;quot; header-value=&amp;quot;DENY&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;response-header name=&amp;quot;x-content-type-options&amp;quot; header-name=&amp;quot;X-Content-Type-Options&amp;quot; header-value=&amp;quot;nosniff&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;response-header name=&amp;quot;Content-Security-Policy&amp;quot; header-name=&amp;quot;Content-Security-Policy&amp;quot; header-value=&amp;quot;default-src &#039;self&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/filters&amp;gt;&lt;br /&gt;
&amp;lt;/subsystem&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Изменение номера порта==&lt;br /&gt;
{{Предупреждение|ОС Linux не позволяет сервисам работающим не от имени root использовать порты с номерами ниже 1024. Для использования портов ниже 1024 необходимо выполнять трансляцию, например с помощью netfilter (iptables/firewalld).}}&lt;br /&gt;
Для изменения номера порта необходимо в файле /opt/wildfly/standalone/configuration/standalone.xml (Linux) или в C:\wildfly\standalone\configuration\standalone.xml (Windows), в блоке &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;socket-binding-group name=&amp;quot;standard-sockets&amp;quot; default-interface=&amp;quot;public&amp;quot; port-offset=&amp;quot;${jboss.socket.binding.port-offset:0}&amp;quot;&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; в нужном (для http, либо https) параметре &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;socket-binding name=&amp;quot;http&amp;quot; port=&amp;quot;${jboss.http.port:8080}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;socket-binding name=&amp;quot;https&amp;quot; port=&amp;quot;${jboss.https.port:8443}&amp;quot;/&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; изменить номер используемого порта.&lt;br /&gt;
&lt;br /&gt;
После изменения номера порта, службу WildFly необходимо перезапустить.&lt;br /&gt;
&lt;br /&gt;
При использовании «сервером» стандартных портов (80 для HTTP или 443 для HTTPS), при установке параметров настроек «клиента» для подключения к «серверу», номер порта в адресе дополнительно указывать не рекомендуется во избежании проблем, т.к. в этих случаях, согласно RFC2616 используется порт по умолчанию. При дополнительном указании в адресе порта по умолчанию бывали случаи возникновения проблем подключения.&lt;br /&gt;
&lt;br /&gt;
Приведённые ниже примеры описаны для протокола HTTP. При использовании HTTPS, необходимо также скорректировать название используемого протокола в адресе подключения.&lt;br /&gt;
===Изменение порта PCS===&lt;br /&gt;
При изменении порта для подключения к PCS, необходимо:&lt;br /&gt;
* установить новый порт для обращения к PC в настройках [[Прикладная система|прикладной системы]];&lt;br /&gt;
* изменить номер порта в настройках [[Сервер PayControl|PCIS External]].&lt;br /&gt;
Для изменения номера порта для обращения к PCS, в настройках PCIS External в файле /opt/wildfly/bin/standalone.conf (Linux) или C:\opt\wildfly\bin\standalone.conf.bat (Windows), в строке&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;JAVA_OPTS=&amp;quot;$JAVA_OPTS -Dpcservice.endpoint=http://localhost:8080/ws/PayControlServiceV3?wsdl -Duser.language=ru -Dpaycontrol.locale=ru&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
в параметре -Dpcservice.endpoint=http://&amp;lt;HOSTNAME&amp;gt;:&amp;lt;PORT&amp;gt;/ws/PayControlServiceV3?wsdl установить новое значение &amp;lt;PORT&amp;gt;.&lt;br /&gt;
===Изменение порта PCIS Internal===&lt;br /&gt;
Для изменения порта для подключения к [[Сервер PayControl|PCIS Internal]] необходимо в БД PCS выполнить следующий запрос:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_internal_url=&#039;http://&amp;lt;HOSTNASME&amp;gt;:&amp;lt;PORT&amp;gt;/wsis/PayControlInteractionService?wsdl&#039; where systemid=&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
где&lt;br /&gt;
* &amp;lt;HOSTNASME&amp;gt; - имя хоста PCIS Internal;&lt;br /&gt;
* &amp;lt;PORT&amp;gt; новое значение порта;&lt;br /&gt;
* XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - UUID идентификатор прикладной системы.&lt;br /&gt;
&lt;br /&gt;
Допускается выполнять запрос к БД PCS на обновление адреса PCIS Internal без указания systemid, в случае, если подключена только одна прикладная система, или необходимо обновить адрес PCIS Internal для всех прикладных систем.&lt;br /&gt;
&lt;br /&gt;
После изменения номера порта, службу wildfly необходимо перезапустить.&lt;br /&gt;
===Изменение порта PCIS External===&lt;br /&gt;
{{Предупреждение|При изменении порта PCIS External мобильное приложение потеряет возможность подключения к серверу PayControl до тех пор, пока пользователю мобильного приложения не будет перевыпущен ключ с новым адресом подключения к серверу.}}&lt;br /&gt;
&lt;br /&gt;
{{Предупреждение|Изменение порта, на котором сервер PCIS External ожидает подключения не всегда ведёт к изменению порта назначения, который используется мобильным приложением для доступа к серверу PayControl. Такая ситуация, например, может возникнуть, если перед сервером PCIS External со стороны сети Интернет установлено оборудование/ПО, выполняющее трансляцию сетевых портов.}}&lt;br /&gt;
При изменении порта PCIS External необходимо в БД PCS выполнить следующий запрос:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update pc_system set pc_is_external_url=&#039;http://&amp;lt;HOSTNASME&amp;gt;:&amp;lt;PORT&amp;gt;/PayControl-interaction-rest/&#039; where systemid=&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
где&lt;br /&gt;
* &amp;lt;HOSTNASME&amp;gt; - имя хоста PCIS External, используемое мобильными устройствами для доступа к серверу PayControl;&lt;br /&gt;
* &amp;lt;PORT&amp;gt; новое значение порта;&lt;br /&gt;
* XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - UUID идентификатор прикладной системы.&lt;br /&gt;
&lt;br /&gt;
Допускается выполнять запрос к БД PCS на обновление адреса PCIS External без указания systemid, в случае, если подключена только одна прикладная система, или необходимо обновить адрес PCIS External для всех прикладных систем.&lt;br /&gt;
&lt;br /&gt;
После изменения номера порта, службу wildfly необходимо перезапустить.&lt;br /&gt;
== Валидация подключения ==&lt;br /&gt;
=== PostgreSQL ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;validation&amp;gt;&lt;br /&gt;
      &amp;lt;valid-connection-checker class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker&amp;quot;&amp;gt;&amp;lt;/valid-connection-checker&amp;gt;&lt;br /&gt;
      &amp;lt;exception-sorter class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter&amp;quot;&amp;gt;&amp;lt;/exception-sorter&amp;gt;&lt;br /&gt;
    &amp;lt;/validation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Oracle ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;validation&amp;gt;&lt;br /&gt;
        &amp;lt;check-valid-connection-sql&amp;gt;select 1 from dual&amp;lt;/check-valid-connection-sql&amp;gt;&lt;br /&gt;
        &amp;lt;validate-on-match&amp;gt;false&amp;lt;/validate-on-match&amp;gt;&lt;br /&gt;
        &amp;lt;background-validation&amp;gt;true&amp;lt;/background-validation&amp;gt;&lt;br /&gt;
        &amp;lt;background-validation-millis&amp;gt;10000&amp;lt;/background-validation-millis&amp;gt;&lt;br /&gt;
    &amp;lt;/validation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== MS SQL ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;validation&amp;gt;&lt;br /&gt;
      &amp;lt;valid-connection-checker class-name=&amp;quot;org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker&amp;quot;&amp;gt;&amp;lt;/valid-connection-checker&amp;gt;&lt;br /&gt;
    &amp;lt;/validation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Журналирование=&lt;br /&gt;
==Доступ к данным журнала==&lt;br /&gt;
Журнал работы сервера PayControl записываются общий лог функционирования Wildfly.&lt;br /&gt;
&lt;br /&gt;
Файлы журналов за текущий день доступны по следующему пути:&lt;br /&gt;
* Linux:&lt;br /&gt;
*: /opt/wildfly/standalone/log/server.log&lt;br /&gt;
* Windows:&lt;br /&gt;
*: C:\wildfly\standalone\log\server.log&lt;br /&gt;
Для просмотра журнала за другие дни, нужно добавить к имени файла требуемую дату в формате server.log.YYYY-MM-DD&lt;br /&gt;
&lt;br /&gt;
==Включение журналирования SOAP-вызовов==&lt;br /&gt;
Для включения расширенного логирования необходимо:&lt;br /&gt;
# Остановить службу wildfly.&lt;br /&gt;
# Добавить после блока &amp;lt;extensions&amp;gt; ... &amp;lt;/extensions&amp;gt; в файл&lt;br /&gt;
#* Linux:&lt;br /&gt;
#*: /opt/wildfly/standalone/configuration/standalone.xml&lt;br /&gt;
#* Windows:&lt;br /&gt;
#*: C:\wildfly\standalone\configuration\standalone.xml&lt;br /&gt;
#: следующий блок:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;system-properties&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;org.apache.cxf.logging.enabled&amp;quot; value=&amp;quot;pretty&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/system-properties&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Запустить службу wildfly.&lt;br /&gt;
==Направление логов Wildfly в Kafka==&lt;br /&gt;
Исходник https://developer.jboss.org/docs/DOC-56423. Основное отличие - добавление &amp;lt;code&amp;gt;&amp;lt;module name=&amp;quot;com.fasterxml.jackson.core.jackson-databind&amp;quot;/&amp;gt;&amp;lt;/code&amp;gt; в зависимости модуля &#039;&#039;org.apache.kafka.clients&#039;&#039;.&lt;br /&gt;
===Модули===&lt;br /&gt;
Файлы модулей можно загрузить с https://mvnrepository.com/&lt;br /&gt;
====org.apache.kafka.clients====&lt;br /&gt;
Создать файл &amp;lt;code&amp;gt;/opt/wildfly/modules/system/layers/base/org/apache/kafka/clients/main/module.xml&amp;lt;/code&amp;gt; с содержанием&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;module name=&amp;quot;org.apache.kafka.clients&amp;quot; xmlns=&amp;quot;urn:jboss:module:1.8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;resources&amp;gt;&lt;br /&gt;
        &amp;lt;resource-root path=&amp;quot;kafka-clients-2.6.0.jar&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;resource-root path=&amp;quot;snappy-java-1.1.8.2.jar&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;resource-root path=&amp;quot;lz4-java-1.7.1.jar&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/resources&amp;gt;&lt;br /&gt;
    &amp;lt;dependencies&amp;gt;&lt;br /&gt;
        &amp;lt;module name=&amp;quot;javax.api&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;module name=&amp;quot;org.slf4j&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;module name=&amp;quot;com.fasterxml.jackson.core.jackson-databind&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
и добавить в директорию указанные в блоке &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt; файлы.&lt;br /&gt;
====org.apache.kafka.log4jappender====&lt;br /&gt;
Создать файл &amp;lt;code&amp;gt;/opt/wildfly/modules/system/layers/base/org/apache/kafka/log4jappender/main/module.xml&amp;lt;/code&amp;gt; с содержанием&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;module name=&amp;quot;org.apache.kafka.log4jappender&amp;quot; xmlns=&amp;quot;urn:jboss:module:1.8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;resources&amp;gt;&lt;br /&gt;
        &amp;lt;resource-root path=&amp;quot;kafka-log4j-appender-2.6.0.jar&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;resource-root path=&amp;quot;slf4j-log4j12-1.7.30.jar&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/resources&amp;gt;&lt;br /&gt;
    &amp;lt;dependencies&amp;gt;&lt;br /&gt;
        &amp;lt;module name=&amp;quot;org.slf4j&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;module name=&amp;quot;org.apache.kafka.clients&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;module name=&amp;quot;org.jboss.log4j.logmanager&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
и добавить в директорию указанные в блоке &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt; файлы.&lt;br /&gt;
====org.apache.log4j====&lt;br /&gt;
Добавить модуль log4jappender в качестве зависимости в существующий org.apache.log4j модуль:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;module name=&amp;quot;org.apache.log4j&amp;quot; xmlns=&amp;quot;urn:jboss:module:1.6&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependencies&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;module name=&amp;quot;org.apache.kafka.log4jappender&amp;quot; export=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====org.jboss.as.standalone====&lt;br /&gt;
Указать в имеющемся модуле org.jboss.as.standalone в качестве зависимости модуль org.apache.kafka.clients.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;module name=&amp;quot;org.jboss.as.standalone&amp;quot; xmlns=&amp;quot;urn:jboss:module:1.6&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependencies&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;module name=&amp;quot;org.apache.kafka.clients&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Хэндлеры===&lt;br /&gt;
Необходимо добавить перечисленные ниже хэндлеры в файл standalone.xml в блок &amp;lt;code&amp;gt;&amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:logging:8.0&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
====kafka====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;custom-handler name=&amp;quot;kafka&amp;quot; class=&amp;quot;org.apache.kafka.log4jappender.KafkaLog4jAppender&amp;quot; module=&amp;quot;org.apache.log4j&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;level name=&amp;quot;INFO&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;formatter&amp;gt;&lt;br /&gt;
                    &amp;lt;named-formatter name=&amp;quot;PATTERN&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/formatter&amp;gt;&lt;br /&gt;
                &amp;lt;properties&amp;gt;&lt;br /&gt;
                    &amp;lt;property name=&amp;quot;brokerList&amp;quot; value=&amp;quot;localhost:9092&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;property name=&amp;quot;topic&amp;quot; value=&amp;quot;out-topic&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/properties&amp;gt;&lt;br /&gt;
            &amp;lt;/custom-handler&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====async-kafka-wrapper====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;async-handler name=&amp;quot;async-kafka-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;level name=&amp;quot;ALL&amp;quot;/&amp;gt; &lt;br /&gt;
                &amp;lt;queue-length value=&amp;quot;1024&amp;quot;/&amp;gt; &lt;br /&gt;
                &amp;lt;overflow-action value=&amp;quot;block&amp;quot;/&amp;gt; &lt;br /&gt;
                &amp;lt;subhandlers&amp;gt; &lt;br /&gt;
                    &amp;lt;handler name=&amp;quot;kafka&amp;quot;/&amp;gt; &lt;br /&gt;
                &amp;lt;/subhandlers&amp;gt; &lt;br /&gt;
            &amp;lt;/async-handler&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Включение хэндлера====&lt;br /&gt;
В блок &amp;lt;code&amp;gt;&amp;lt;handlers&amp;gt;&amp;lt;/code&amp;gt; добавить &amp;lt;code&amp;gt;&amp;lt;handler name=&amp;quot;async-kafka-wrapper&amp;quot;/&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Проблемы и способы их устранения=&lt;br /&gt;
==Очень медленный старт через standalone.sh (каждый этап скрипта запуска - с большими задержками). Система отправляет сигнал на остановку сервиса==&lt;br /&gt;
Вероятная проблема - неверные настройки DNS сервера.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Решение&#039;&#039;&#039;:Необходимо скорректировать настройки DNS.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Проблема обнаружилась 2018-07-27 при развёртывании у заказчика.&#039;&#039; [[Участник:A.bursakov|A.bursakov]] ([[Обсуждение участника:A.bursakov|обсуждение]]) 19:56, 1 августа 2018 (MSK)&lt;br /&gt;
==Не происходит «биндинг» IP-адреса адаптера==&lt;br /&gt;
Вероятная проблема - отсутствие PTR-записи на DNS-сервере, или неправильная работа службы DNS.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Решение&#039;&#039;&#039;: Добавить в файл opt/wildfly/bin/standalone.conf (Linux) или C:\opt\wildfly\bin\standalone.conf.bat (Windows), в переменную JAVA_OPTS параметр -Djboss.bind.address=0.0.0.0&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Проблема проявилась на тестовом Windows-сервере&#039;&#039; [[Участник:A.bursakov|A.bursakov]] ([[Обсуждение участника:A.bursakov|обсуждение]]) 19:56, 1 августа 2018 (MSK)&lt;br /&gt;
&lt;br /&gt;
==Частое появление WARNING в логе==&lt;br /&gt;
Предупреждения в логе вида:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
Caused by: com.ctc.wstx.exc.WstxIOException: UT010029: Stream is closed&lt;br /&gt;
Caused by: java.io.IOException: UT010029: Stream is closed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
Caused by: java.io.IOException: Broken pipe&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Могут быть вызваны системой мониторинга, которая для проверки того, что сервер доступен, устанавливает соединение и обрывает его получив лишь только header.&lt;br /&gt;
&lt;br /&gt;
Для отключения предупреждений о непредвиденном закрытии соединения необходимо в файл /opt/wildfly/standalone/configuration/standalone.xml в блок &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;profile&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem xmlns=&amp;quot;urn:jboss:domain:logging:X.X&amp;quot;&amp;gt;&lt;br /&gt;
       ... &lt;br /&gt;
    &amp;lt;/subsystem&amp;gt;&lt;br /&gt;
&amp;lt;/profile&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; добавить:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- to prevent warnings on unsuspicious connection close --&amp;gt;&lt;br /&gt;
&amp;lt;logger category=&amp;quot;org.apache.cxf.phase.PhaseInterceptorChain&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;level name=&amp;quot;ERROR&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/logger&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==INFO: Disabling contextual LOB creation as createClob() method threw error==&lt;br /&gt;
Иногда смущает появление в журнале события, из-за присутствия в его составе слова &amp;quot;error&amp;quot;:&lt;br /&gt;
    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 &lt;br /&gt;
Для отключения этого сообщения необходимо установить &amp;lt;code&amp;gt;hibernate.temp.use_jdbc_metadata_defaults=false&amp;lt;/code&amp;gt;&lt;br /&gt;
в файл persistence.xml, располагающийся внутри модуля сервера следующим образом:&lt;br /&gt;
        &amp;lt;properties&amp;gt;&lt;br /&gt;
            ...&lt;br /&gt;
            &amp;lt;property name=&amp;quot;hibernate.temp.use_jdbc_metadata_defaults&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
            ...&lt;br /&gt;
        &amp;lt;/properties&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Серверная часть]]&lt;br /&gt;
[[Категория:Возможные проблемы]]&lt;br /&gt;
[[Категория:Отладка]]&lt;/div&gt;</summary>
		<author><name>A.bursakov</name></author>
	</entry>
</feed>